POST提交注入

POST提交注入有别于我们之前的注入方式,我们之前的注入方式都采用了GET请求的方式,而POST提交注入是使用POST请求的方式进行尝试注入。

POST提交、GET提交对比

  • get提交可以被缓存,post提交不会

    在浏览器地址栏、历史记录、书签都可以保存GET提交

  • get提交有长度限制,最长2048个字符;

    post提交没有长度要求,不是只允许使用ASCII字符,还可以使用二进制数据

POST提交演示

这里我们使用less-11进行演示,并使用burpsuite进行抓包演示

image-20230428234628954

我们可以发现,在内容区存在三个参数uname、passwd和submit。这三个参数就是我们刚刚提交的登录操作,我们可以选择放行Forward或丢弃Drop,这里我们选择放行。发现出现登录失败的提示。

image-20230428234720489

一般来说,登陆的场景都是通过POST的方式提交的。

联合注入

我们在前面抓包分析后,发现提交的参数有三个,我们可以在hackbar添加Post data尝试我们之前GET提交熟悉的的流程,对网站注入点进行测试

  • 判断注入点闭合,并注释后面语句

    image-20230429001620832
  • group by二分法判断查询列数。发现无报错列数不符即可

    image-20230429001934053
  • 把uname修改为不存在数字或为空(我这里已经是不存在的),测试联合查询

    image-20230429002235928
  • 依次拿到靶机数据库名(可直接database())、表名、列名

    表名

    image-20230429002530619

    列名

    image-20230429002709272
  • 拿取最终目标

    image-20230429002940565

对于其他注入方式来说,流程上和方法上大致都无差异,最大差异在于把--+替换成#作注释掉后续代码。