SQL注入(10):POST注入
POST提交注入
POST提交注入有别于我们之前的注入方式,我们之前的注入方式都采用了GET请求的方式,而POST提交注入是使用POST请求的方式进行尝试注入。
POST提交、GET提交对比
-
get提交可以被缓存,post提交不会
在浏览器地址栏、历史记录、书签都可以保存GET提交
-
get提交有长度限制,最长2048个字符;
post提交没有长度要求,不是只允许使用ASCII字符,还可以使用二进制数据
POST提交演示
这里我们使用less-11进行演示,并使用burpsuite进行抓包演示
我们可以发现,在内容区存在三个参数uname、passwd和submit。这三个参数就是我们刚刚提交的登录操作,我们可以选择放行Forward或丢弃Drop,这里我们选择放行。发现出现登录失败的提示。
一般来说,登陆的场景都是通过POST的方式提交的。
联合注入
我们在前面抓包分析后,发现提交的参数有三个,我们可以在hackbar添加Post data尝试我们之前GET提交熟悉的的流程,对网站注入点进行测试
-
判断注入点闭合,并注释后面语句
-
group by二分法判断查询列数。发现无报错列数不符即可
-
把uname修改为不存在数字或为空(我这里已经是不存在的),测试联合查询
-
依次拿到靶机数据库名(可直接database())、表名、列名
表名
列名
-
拿取最终目标
对于其他注入方式来说,流程上和方法上大致都无差异,最大差异在于把--+
替换成#
作注释掉后续代码。