2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]

二发入魂

涉及内容
伪随机

打开页面如下:
2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]_第1张图片

简单尝试了一下表单提交,发现抽卡x次即生成x个随机数,再加上上面表情包的提示,初步判断题目应该是想让做题的人在cdkey处提交随机数种子。
还是常规操作,看看网页源码,找找线索。
发现JS代码

<script>
	function random() {
		var times = $("input[name='times']").val();
		$.get("random.php?times="+times, 
		function(data) {
			if(data) {
				var show = $("div[name='show']")
				show.empty()
				show.append(data)
			}
		})
	}
	function verify() {
		var verify = $("input[name='verify']").val();
		$.post("verify.php", {
			"ans": verify
		},
		function(data) {
			if(data) {
				alert(data)
			}
		})
	}
</script>

知道了随机数是在random.php下生成的,种子的校验应该是在verify.php下校验的。同时也知道了参数的传递方式是get还是post
刚开始觉得和祈福赛第一题很像,考虑是不是要爆破随机数种子,但是随机数取值范围不明了,而且随意提交一个值以后发现弹框
2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]_第2张图片
必须在两秒之内解决,显然是不能采取爆破种子的手段了。
这里参考国外大佬的一篇文章[传送门],通过第n个值和第n+227个值可以计算出种子的值。
构建python脚本如下:

import requests
import os

url = r"https://twoshot.hgame.n3ko.co/random.php?times=228"
session = requests.session()
response = session.get(url)
# print(response.text)
list = response.text.replace('[','').replace(']','').split(',')
# print(list)
cmd =os.popen("python reverse_mt_rand.py "+list[0]+" "+list[227]+" 0 0")
seed = cmd.read().strip()
print(seed)
cmd.close()
urlv = r"https://twoshot.hgame.n3ko.co/verify.php"
response2 = session.post(urlv,data={'ans':seed})
print(response2.text)

运行,输出了flag。
2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]_第3张图片

Cosmos的二手市场

涉及内容
条件竞争

打开页面,如下:
2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]_第4张图片
简单测试一下,表面上的逻辑很简单,购买/出售,会消耗/获得相应的金额,但是出售的价格是比购买的价格低的,所以通过正常的页面操作是无法“赚取一个亿”的。
这道题其实我没做出来,最后有师傅提示说是条件竞争,才知道怎么做。
那这样就很简单了,懒得写脚本,burpsuite直接发数据包,高线程卖出,低线程买入,摸了几分钟鱼,余额已经刷到8个亿了:
2020 HGAME WEB_Week3 [二发入魂][cosmos的二手市场]_第5张图片
直接getflag即可。

(个人整理,如有错误欢迎指正)

你可能感兴趣的:(CTF_Writeup)