[极客大挑战 2019]BuyFlag

[极客大挑战 2019]BuyFlag

一、解题思路

1.进入题目的主界面,点击右上角的菜单

[极客大挑战 2019]BuyFlag_第1张图片

2.题目是让我们买flag,那就点击payflag

[极客大挑战 2019]BuyFlag_第2张图片

3.根据题目要求买flag,需要花钱100000000,下面的英文提示说——If you want to buy the FLAG:
You must be a student from CUIT!!!
You must be answer the correct password!!!
中文意思就是:如果你想要买这个flag:你必须是来自CUIT的学生;你必须输入正确的密码。

[极客大挑战 2019]BuyFlag_第3张图片

4.解决web的基本操作,查看页面源代码(鼠标右键,检查页面源代码或者使用快捷键Ctrl + U),往下面可以看到提示

[极客大挑战 2019]BuyFlag_第4张图片

5.分析提示的代码

	~~~post money and password~~~
if (isset($_POST['password'])) {
	$password = $_POST['password'];
	if (is_numeric($password)) {
		echo "password can't be number
"; }elseif ($password == 404) { echo "Password Right!
"; } }

6.阅读源代码可以得出:
变量password使用POST的传参方式进行传参,不难看出来,只要$password == 404为真,那么,就可以绕过。函数is_numeric()判断其中的参数是数字还是其他,如果是数字则判断为真,否则为假。这里我选择传入的参数为404a

[极客大挑战 2019]BuyFlag_第5张图片

7.又看到新的提示,你必须是来自CUIT的学生,直接抓包看看是什么情况。

[极客大挑战 2019]BuyFlag_第6张图片

8.看了一下抓包情况,关于用户的提示只有在cookie:user=0,那我们将其换为1试试

[极客大挑战 2019]BuyFlag_第7张图片

9.可以看到提示——说我们的身份及密码正确,黑客,买flag,那我们再根据提示,支付money,使用post传参password=404a&money=100000000

[极客大挑战 2019]BuyFlag_第8张图片

10.根据提示,我们的输入长度太长了,那就换个小点的数试试
password=404a&money=10000

[极客大挑战 2019]BuyFlag_第9张图片

11.把钱的金额减少时,又有提示说——钱不够。这里的漏洞利用应该可以是这道题的精髓所在。明知道有漏洞,可以利用又感觉束手无策。没办法,只能查看一下服务器的版本,看看有没有可利用的点

[极客大挑战 2019]BuyFlag_第10张图片

12.可以看到PHP的版本为:PHP/5.3.3,可以利用函数strcmp(),使用数组绕过password=404a&money[]=1000

[极客大挑战 2019]BuyFlag_第11张图片

13.成功拿下flag
flag{469c921e-58ca-40dc-8374-e6cd858236b1}

二、知识点总结

1.通过修改cookie绕过身份认证机制;
2.通过查看PHP的版本,查看漏洞利用点;
3.is_number()函数和strcmp()函数的利用

PS

1.遇到问题很正常,得多尝试,不要怕报错;
2.多刷题目总结经验

你可能感兴趣的:(Buuctf,信息安全,渗透测试学习,java,前端,服务器)