Cookie,指某些网站为了辨别用户身份而储存在用户本地终端上的数据。Cookie在web应用中至关重要,用户的唯一标识session id也是存在cookie中的。
那么,在sqlmap使用的时候,也会经常需要考虑到cookie。sqlmap也提供了和cookie相关的命令,本文将会介绍。
1. cookie保存了用户登录状态
很多网站的功能都是需要登陆后才能访问,而http本身是无状态的,因此服务器通常是通过cookie确认用户身份。
sqlmap进行检测时,默认是不带cookie的,发出去的请求会被服务器拒之门外。
这时,我们需要带上cookie才能进行sql注入检测,我们可以通过多种方法增加cookie,注意-v 4表示输出请求头信息,因为cookie在请求头中。
默认情况下不带cookie,注意看header。
[18:57:46] [TRAFFIC OUT] HTTP request [#1]:
GET /testforcoolcard/sqltest.php?id=1 HTTP/1.1
Accept-language: en-us,en;q=0.5
Accept-encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: sqlmap/1.0.9.8#dev (http://sqlmap.org)
Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Host: 192.168.16.51
Pragma: no-cache
Cache-control: no-cache,no-store
Connection: close
使用--header命令,可以增加自定义header,这里加入一个cookie字段为is_login,可以看到sqlmap发出去的请求已经加入了cookie。
[19:06:15] [TRAFFIC OUT] HTTP request [#1]:
GET /testforcoolcard/sqltest.php?id=1 HTTP/1.1
Host: 192.168.16.51
Cookie: is_login=1
Accept-encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: sqlmap/1.0.9.8#dev (http://sqlmap.org)
Connection: close
使用-r命令,可以模拟指定的请求行为。
一般情况下,手动去复制cookie在放到header里面,太复杂。一般都是通过工具,直接把想要分析的网络请求抓下来,存成一个文本,sqlmap可以自己分析这个文本。
我们可以通过浏览器调试工具复制请求头信息,也可以通过Burpsuite抓包解惑,什么样的方法都可以,总之格式保证是正确的就好。
假设存储文件为test.cookie,sqlmap命令如下,注意此时不需要再输入-u网址了。
[19:17:11] [TRAFFIC OUT] HTTP request [#1]:
GET /testforcoolcard/sqltest.php?id=1 HTTP/1.1
Host: 192.168.16.51
Accept-language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-encoding: gzip, deflate
Cache-control: max-age=0
Cookie: is_login=1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Connection: close
使用--cookie命令,这个命令更方便。
[19:21:23] [TRAFFIC OUT] HTTP request [#1]:
GET /testforcoolcard/sqltest.php?id=1 HTTP/1.1
Accept-language: en-us,en;q=0.5
Accept-encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: sqlmap/1.0.9.8#dev (http://sqlmap.org)
Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Host: 192.168.16.51
Cookie: is_login=1
Pragma: no-cache
Cache-control: no-cache,no-store
Connection: close
2. 参数在cookie中的注入
检查一个请求是否存在sql注入,一般是通过GET和POST进行测试,但是有些时候,参数是放在cookie里面,我们需要对cookie的参数进行注入测试,这个时候怎么办呢?
我们继续以is_login为注入点,直接使用--cookie 'is_login=1'带上is_login参数,并没有用。此时,sqlmap是不会构造不同的is_login进行攻击的。
首先,看一下sqlmap源代码,有对--level说明。
# --level >= 3
skip = (place == PLACE.USER_AGENT and conf.level < 3)
skip |= (place == PLACE.REFERER and conf.level < 3)
# Test Host header only if
# --level >= 5
skip |= (place == PLACE.HOST and conf.level < 5)
# Test Cookie header only if --level >= 2
skip |= (place == PLACE.COOKIE and conf.level < 2)
可以看到,我们只要输入的--level大于等于2,cookie就会进行注入检测。
由于此时,我不想检测id参数,只想检测is_login。我们可以通过-p命令指定检测具体对象。
do you want to URL encode cookie values (implementation specific)? [Y/n]
sqlmap使用cookie,就写到这里吧。
Leave a Reply