第一题.signin(签到题)
一进来就看到这个页面,老规矩先看源代码
在html代码中看到了<a href="/flag">GET Your Flag</a>,<a>是html中链接的意思,这里的意思是将GET Your Flag 赋予链接的作用,可以跳转到/flag文件
点击后,发现网页并没有跳转,看了一下发现是301重定向,但是在响应头发现flag,base64解码即可获得flag
第二题.baby_php
<?php
error_reporting(0);
highlight_file(__FILE__);
if (!isset($_GET['a']) || !isset($_GET['b']))
die('Never gonna give you up');
$a = $_GET['a'];
$b = $_GET['b'];
if ($a == $b || md5($a) != md5($b)) {
die('Never gonna let you down');
}
if (!isset($_GET['c'])) {
die('Never gonna run around and desert you');
}
if (file_get_contents($_GET['c']) !== 'Never gonna make you cry') {
die('Never gonna say goodbye');
}
if (!isset($_GET['d'])) {
$_GET['d'] = 'flag.php';
echo 'Never gonna tell a lie and hurt you';
}
include $_GET['d'];
Never gonna give you up
进入网页后,显示这样一段PHP代码(接下来就是搞明白意思就好,虽然我那时候用chatgpt帮我翻译了哈哈)
本题PHP知识
1.highlight_file 对括号内文件PHP代码高亮显示(对做题应该没啥影响把...)
2.$_GET 通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组
3.isset 检测变量是否声明
4.die 输出括号内内容并结束程序,相当于exit()
5.md5 计算散列值
6.file_get_contents 将整个文件读入一个字符串,这里的意思是 c参数的内容是否等于后面那个字符串
7.!== 不同于!=,这个还要判断类型是不是不同
8.echo 输出一个以上的字符串
9.include 在当前PHP文件引入并执行指定文件内容
那么现在就可以开始愉快的做题了,首先我们要让a和b参数值不相同但散列值相同,在wp中的解法是传递数组,md5对非字符串都返回NULL,那么null肯定等于null
/?a[]=1&b[]=2
wp中还提到可以用弱类型绕过(弱类型指的是在 PHP 中变量的类型是根据赋给它们的值自动推断的,并且变量的类型可以随时改变)弱比较会把0exxxx当做科学计数法,不管后面的值为任何东西,0的任何次幂都为0
- 以下是一些字符串md5值以0e开头
QNKCDZO
240610708
s878926199a
s155964671a
s21587387a
if (file_get_contents($_GET['c']) !== 'Never gonna make you cry') {
die('Never gonna say goodbye');
}
/?a[]=1&b[]=2&c=data: / text/plain,Never gonna make you cry
file_get_contents要读取文件,然而c是参数,直接输入是不行的,于是要利用伪协议。这里我们要知道,data伪协议是数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。php伪协议
if (!isset($_GET['d'])) {
$_GET['d'] = 'flag.php';
echo 'Never gonna tell a lie and hurt you';
}
include $_GET['d'];
如果直接执行include就是通过php解释器执行代码了,所以要换个方法,让php的解释器不认它
/?a[]=1&b[]=2&c=data: / text/plain,Never gonna make you
cry&d=php://filter/read=convert.base64-encode/resource=flag.php
<?php
$flag = $_ENV['FLAG'] ? 'Spirit{fake-flag-qwq}';
file_put_contents('spiritflagqwq', $flag);
获得这个后读取就好了
/?a[]=1&b[]=2&c=data: / text/plain,Never gonna make you
cry&d=php://filter/read=convert.base64-encode/resource=spiritflagqwq
第三题 robot
通过提示得知,我们要修改user-Agent请求头,一般各个搜索引擎的蜘蛛都带有特定的请求头信息
User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。我们知道,网络爬虫使用程序代码来访问网站,而非人类亲自点击访问,因此爬虫程序也被称为“网络机器人”。绝大多数网站都具备一定的反爬能力,禁止网爬虫大量地访问网站,以免给网站服务器带来压力。网站通过识别请求头中 User-Agent 信息来判断是否是爬虫访问网站。如果是,网站首先对该 IP 进行预警,对其进行重点监控,当发现该 IP 超过规定时间内的访问次数, 将在一段时间内禁止其再次访问网站。
本题的wp使用了curl命令,因此我也跟着学习了一下curl命令
在这里,首先我们要修改请求头
curl --user-agent Baiduspider http://<host>:<port>/verify
这里的host和port要用实际题目替代,verify是请求方式,后面还要修改Referer头和cookie
curl --user-agent Baiduspider --referer https://www.baidu.com --cookie price= http://<host>:<port>/verify
得到flag