目录
从Less11开始和前面的有所不同最大的一点就是:前面的都是Get方法,而现在开始的是POST方法。Less-11和Less-12都为基于错误的POST类型的字符型注入;Less-13和Less-14都为基于错误的POST类型的盲注;Less-15和Less-16都为基于错误的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
Less-11主要是:单引号字符注入 ,从登陆界面的样子,最直接想到的就是“万能密码”。
我们先看一下源码,发现sql语句是这样的:
从这个代码里我们看到用户的地方输入用户名,而不能在用户名后闭合用前面的--+或#来注释后面的,如果注释了整个语句会出错。所以要保证整个语句正确一般有两种方法,要么在用户名位置构造返回是ture,要么在密码地方构造。
服务端接收数据: uname=数据 passwd=数据 ===>推断出 uname=用户名&passwd=密码 ====>又可大致推断数据库的sql语句为:select username,password from users where uname=用户名&passwd。
那么我们该如何进行注入呢?
其实也很简单在Less1-4中,我们正常访问需要 ?id 而这里需要 uname=用户名&passwd=密码:
?id=1 uname=1&passwd=1 uname=1&passwd=1
?id=1' uname=1&passwd=1' =====同理==》uname=