[极客大挑战 2019]BuyFlag
Posted 山川绿水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[极客大挑战 2019]BuyFlag相关的知识,希望对你有一定的参考价值。
[极客大挑战 2019]BuyFlag
一、解题思路
1.进入题目的主界面,点击右上角的菜单
2.题目是让我们买flag
,那就点击payflag
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的学生;你必须输入正确的密码。
4.解决web的基本操作,查看页面源代码(鼠标右键,检查页面源代码或者使用快捷键Ctrl + U
),往下面可以看到提示
5.分析提示的代码
~~~post money and password~~~
if (isset($_POST['password']))
$password = $_POST['password'];
if (is_numeric($password))
echo "password can't be number</br>";
elseif ($password == 404)
echo "Password Right!</br>";
6.阅读源代码可以得出:
变量password
使用POST
的传参方式进行传参,不难看出来,只要$password == 404
为真,那么,就可以绕过。函数is_numeric()
判断其中的参数是数字还是其他,如果是数字则判断为真,否则为假。这里我选择传入的参数为404a
7.又看到新的提示,你必须是来自CUIT
的学生,直接抓包看看是什么情况。
8.看了一下抓包情况,关于用户的提示只有在cookie:user=0
,那我们将其换为1
试试
9.可以看到提示——说我们的身份及密码正确,黑客,买flag
,那我们再根据提示,支付money
,使用post
传参password=404a&money=100000000
10.根据提示,我们的输入长度太长了,那就换个小点的数试试
password=404a&money=10000
11.把钱的金额减少时,又有提示说——钱不够。这里的漏洞利用应该可以是这道题的精髓所在。明知道有漏洞,可以利用又感觉束手无策。没办法,只能查看一下服务器的版本,看看有没有可利用的点
12.可以看到php的版本为:PHP/5.3.3,可以利用函数strcmp(),使用数组绕过password=404a&money[]=1000
13.成功拿下flag
flag469c921e-58ca-40dc-8374-e6cd858236b1
二、知识点总结
1.通过修改cookie
绕过身份认证机制;
2.通过查看PHP
的版本,查看漏洞利用点;
3.is_number()函数和strcmp()函数的利用
PS
1.遇到问题很正常,得多尝试,不要怕报错;
2.多刷题目总结经验
以上是关于[极客大挑战 2019]BuyFlag的主要内容,如果未能解决你的问题,请参考以下文章
[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag