**
SQL注入 1-3_基于post报错注入
**
一.概念
客户端提交参数基于post
1.基于post注入不会拼接到url
2.相对get提交参数更加安全
3.但是依然可以使用代理(中间人)截断判断是否存在sql注入
二.基于post报错的实列
1.打开登陆页面
按照常规的符号手段,观察以下三张图,并没有报错
当然也可以使用 id=1 and 1=2 和 id=1’ and ‘1’ = 1’一样没有反应
由此判断我们应该使用代理,因为他是基于post,无法拼接到url
打开代理截断,和burpsuite
提交任意登陆参数
可以看到我们发送的所有的信息
点击action 然后发生到repeater
repeater的作用:可以修改发送的参数,达到注入目的
可以看到已经发送过去了
我们使用反斜杠测试
向右看,可以看到服务器报错
则我们可以推测他应该是基于报错 的post注入
我们可以大致的推测出sql语句
在存在注入的的位置,使用万能密码
如果没有严格过滤提交的参数
则可以绕过登陆
可以看到我们已经登录了后台
并且爆出了用户的密码和账户
我们再来看看源码
确实和我们的猜测一样,没有过滤机制
并且是 使用 ‘’ 包含参数
好,我们接着看下一个,直接看看源码
可以看到,程序员是使用了双引号和括号包含了参数
同样的方法代理截断,并且输入反斜杠,让他报错,当然也可以使用其他,符号手段
往右边可以看到,又报错了
我们又大致猜出了他的sql语句
在-- 空格 前面输入万能密码,同样成功登陆并且获得密码
当然在前面也可以输入其他sql语句
和get手工注入一样的
三.使用sqlmap探测
首先登陆,
然后代理截断
将截断的内容复制保存到root/下,保存名为passwd.tet
-r 使用刚刚截断的文件
-p 指定注入位置
并且指定探测技术
和指定当前使用的数据库
可以看到成功的到当前数据库名,
当然也可以其他详细的注入
总结
1.当发现是post提交参数时,使用代理截断手段
2.判断大致sql语句,分析出sql语句,并且知道是字符型注入还是整型
3.接下来使用万能密码,也可以拼接sql语句,和get的报错一样的写法
4.如果判断出类型,可以直接使用sqlmap探测,不用那么麻烦
5.能够注入的关键原因还是,参数过滤不完善,程序员应该使用多重过滤 比如,先正则,在使用多个过滤函数