刷题记录

[安洵杯 2019]easy_web

初见 两个参数 cmd 和img
cmd 无论传递什么参数都没用 但是img仿佛还是有用的 可以将图片内容进行一个base64编码之后再传回到页面里面 涉及到一个data:标签

php data schema url

data 数据嵌入

本题目 img 参数 是请求这个文件内容 然后将文件内容返回到这个data后面的数据 里面

跟文件包含不一样 因此直接请求index.php读取源码

<?phperror_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;
charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd']))
header('Refresh:0;
url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));
$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
echo '<img src ="./ctf3.jpeg">';
die("xixio= no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;
base64," . $txt . "'></img>";
echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;
|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{
|\}
|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{
|}
|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
echo `$cmd`;
} else {
echo ("md5 is funny ~");
}
}?><html><style>  body{   background:url(./bj.png)  no-repeat center center;   background-size:cover;   background-attachment:fixed;   background-color:#CCCCCC;
}
</style><body></body></html>

其实事情已经很简单了 直接一个post传递参数 的 a b 强比较 直接绕过
同时注意黑名单的过滤 应该是如何的黑名单 的过滤

rce绕过

[[rce.md#Rce执行命令函数#]]

php弱比较

[[php弱比较#php强比较#]]