SQL注入 1-3_基于post报错注入

**

SQL注入 1-3_基于post报错注入

**
一.概念
客户端提交参数基于post
1.基于post注入不会拼接到url
2.相对get提交参数更加安全
3.但是依然可以使用代理(中间人)截断判断是否存在sql注入

SQL注入 1-3_基于post报错注入
二.基于post报错的实列

1.打开登陆页面

按照常规的符号手段,观察以下三张图,并没有报错

当然也可以使用 id=1 and 1=2 和 id=1’ and ‘1’ = 1’一样没有反应

由此判断我们应该使用代理,因为他是基于post,无法拼接到url
SQL注入 1-3_基于post报错注入
SQL注入 1-3_基于post报错注入
SQL注入 1-3_基于post报错注入
打开代理截断,和burpsuite
SQL注入 1-3_基于post报错注入
提交任意登陆参数
SQL注入 1-3_基于post报错注入
可以看到我们发送的所有的信息
SQL注入 1-3_基于post报错注入
点击action 然后发生到repeater
repeater的作用:可以修改发送的参数,达到注入目的
SQL注入 1-3_基于post报错注入
可以看到已经发送过去了
SQL注入 1-3_基于post报错注入
我们使用反斜杠测试
SQL注入 1-3_基于post报错注入
向右看,可以看到服务器报错
则我们可以推测他应该是基于报错 的post注入
SQL注入 1-3_基于post报错注入
我们可以大致的推测出sql语句
SQL注入 1-3_基于post报错注入
在存在注入的的位置,使用万能密码
如果没有严格过滤提交的参数
则可以绕过登陆
SQL注入 1-3_基于post报错注入

可以看到我们已经登录了后台
并且爆出了用户的密码和账户
SQL注入 1-3_基于post报错注入
我们再来看看源码
确实和我们的猜测一样,没有过滤机制
并且是 使用 ‘’ 包含参数
SQL注入 1-3_基于post报错注入

好,我们接着看下一个,直接看看源码
可以看到,程序员是使用了双引号和括号包含了参数
SQL注入 1-3_基于post报错注入
同样的方法代理截断,并且输入反斜杠,让他报错,当然也可以使用其他,符号手段
SQL注入 1-3_基于post报错注入
往右边可以看到,又报错了
SQL注入 1-3_基于post报错注入
我们又大致猜出了他的sql语句
SQL注入 1-3_基于post报错注入
在-- 空格 前面输入万能密码,同样成功登陆并且获得密码

当然在前面也可以输入其他sql语句

和get手工注入一样的
SQL注入 1-3_基于post报错注入

三.使用sqlmap探测
首先登陆,
然后代理截断
SQL注入 1-3_基于post报错注入

将截断的内容复制保存到root/下,保存名为passwd.tet
SQL注入 1-3_基于post报错注入
SQL注入 1-3_基于post报错注入

-r 使用刚刚截断的文件
-p 指定注入位置
并且指定探测技术
和指定当前使用的数据库

SQL注入 1-3_基于post报错注入

可以看到成功的到当前数据库名,
当然也可以其他详细的注入
SQL注入 1-3_基于post报错注入

总结
1.当发现是post提交参数时,使用代理截断手段
2.判断大致sql语句,分析出sql语句,并且知道是字符型注入还是整型
3.接下来使用万能密码,也可以拼接sql语句,和get的报错一样的写法
4.如果判断出类型,可以直接使用sqlmap探测,不用那么麻烦
5.能够注入的关键原因还是,参数过滤不完善,程序员应该使用多重过滤 比如,先正则,在使用多个过滤函数