如果无权读取information schema库 / 拒绝union、order by语句,只能通过猜测的方式:
猜列名
' and asd is null--+ (+代表空格)
- 当我们执行之后,通过报错可看出来没有这个asd
- 通过更换asd,去猜测,如果没有报错,说明数据库存在这个列名
- 但是一般情况下,都是通过跑字典的方式,kali里面自带字典文件
- 之后我们就可以通过bp进行跑字典的操作,首先执行随便的参数,然后代理截断下来
- 之后将截断地发送到repeater测试服务器是否可以正常响应
- 服务器能够正常响应之后的话,发送到intruder去
- 之后选中你想要插入地点,选择它,然后点击add
- 接着点击Payloads,传入我们的字典文件
- 之后点击start attack
- 之后我们就可以分析出哪些是正常存在的列了
猜表名
- 列表猜出来了,就可以开始猜测表名字,刚刚我们看到确实存在user这个列名
'and table.user is null--+ (+代表空格)
- 如果表名不存在会报错
- 之后的才做和猜列名一样了,不做详细概述,自己试试吧,表名的字典路径如下
猜库里面的其他表
'and(select count(*) from b)>0--+(+代表空格)
上面的直接爆出库名了;
- 接着从bp里面去跑字典就行了,库名不变,猜测表明,不做详细步骤描述了
猜测字段内容
'or user='admin
'or user like '%a%
##包含a的user
当数据库可写
';update users set user='yuanfh' where user='admin
- 将用户名修改,直接注入会报错,原因是Sql客户端工具的问题,直接用工具演示
同理也可以修改密码、添加用户、删除表等等,熟悉SQL语句的人去尝试下吧;
SQLi没有通用的方法,掌握原理,了解各种数据库特性;