sql注入原理
当客户端传递给sql语句的参数没有做安全过滤式,用户可以任意构造改变sql语句结构,执行攻击者想要的操作
栗子:语句"select * from table where id=" + id
当id传递 1 or 1=1时,语句就变成了
select * from table where id=1 or 1=1
该语句就恒为真,满足所有行的结果
Mysql注入中常用的函数
| 函数 | 函数功能 |
|---|---|
| system_user() | 系统用户名 |
| user() | 用户名 |
| current_user() | 当前用户名 |
| session_user() | 连接数据库的用户名 |
| database() | 当前数据库名 |
| version() | 数据库版本 |
| @@datadir | 数据库路径 |
| @@basedir | 数据库安装路径 |
| @@version_compile_os | 操作系统 |
| concat() | 无分隔符连接字符串 |
| concat_ws | 含分隔符连接字符串 |
| group_concat | 以逗号连接字符串 |
| load_file() | 读取本地文件 |
| info outfile | 写文件 |
| ascii() | 字符的ascii码 |
| ord() | 字符串的第一个字符ascii码 |
| mid() | 返回子字符串 |
| substr() | 返回子字符串 |
| length() | 返回字符串长度 |
一般注入流程:
1.寻找注入点
类似url中传递参数xxx.xxx?id=x,像这种可能会与数据库交互的,都可能会存在注入点
2.测试注入点
传递" ' "造成引号闭合失败,出错,则可能存在注入点
继续传递" '# ",若无报错,说明引号闭合成功,传递的参数为字符型注入;若报错,则为数字型注入
3.开始攻击
上sqlmap! or 手工注入











网友评论