ctf学习记录5.10

第一题.signin(签到题)

59c0f72c0a474b968ad9fe1be624d9d2.png

 一进来就看到这个页面,老规矩先看源代码

bf7d209b04504da2b272f314399883a2.png

在html代码中看到了<a href="/flag">GET Your Flag</a>,<a>是html中链接的意思,这里的意思是将GET Your Flag 赋予链接的作用,可以跳转到/flag文件

daf78357e09b40d29e2867d3de921fc5.png

点击后,发现网页并没有跳转,看了一下发现是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的解释器不认它

一种可行的方法是使用php的伪协议,利用 php: / filter 将文件内容进行base64编码后再读取,这样就 不会有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

659a37258df54a4481058ba1c93c4cbb.png


19cd4f15377348f795d27c4f02112118.png

 通过提示得知,我们要修改user-Agent请求头,一般各个搜索引擎的蜘蛛都带有特定的请求头信息


User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。我们知道,网络爬虫使用程序代码来访问网站,而非人类亲自点击访问,因此爬虫程序也被称为“网络机器人”。绝大多数网站都具备一定的反爬能力,禁止网爬虫大量地访问网站,以免给网站服务器带来压力。网站通过识别请求头中 User-Agent 信息来判断是否是爬虫访问网站。如果是,网站首先对该 IP 进行预警,对其进行重点监控,当发现该 IP 超过规定时间内的访问次数, 将在一段时间内禁止其再次访问网站。


本题的wp使用了curl命令,因此我也跟着学习了一下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

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值