wargame.kr writeup

题解

already got

看header

QR Code Puzzle

看网络流量,检查一下所使用的图片,识别一下即可

flee button

找到使用的js代码,直接在控制台输出

login filtering

页面字符集与数据库相同–不存在宽字符注入
查询语句单引号保护、转义、去空格–无法注入
mysql_real_escape_string(trim($_POST[‘id’])),如果去空格和转义的操作换一下就可以注入了。

1
if($id=='guest' || $id=='blueh4g')

这句判断是区分大小写的,mysql查询是不区分大小写的。因此id=Guest&ps=guest即可
参考题解

DB is really GOOD

通过测试登陆admin,发现不能登陆,可以想到是突破这个限制。
通过数据插入,发现存在注入问题,也发现数据库为SQLITE,php错误屏蔽未开启。
通过INSERT注入,发现数据库中只有一个表,内容只有当前用户的数据。用户名倒是可以XSS。
提示用户名和数据库有关联,猜想可能是根据用户名创建数据库,测试用户名tes/t,爆出相关语句,以及准备使用的数据库名。
通过规律猜测,可以确定admin数据库地址为http://wargame.kr:8080/db_is_really_good/db/wkrm_admin.db。下载下来用navicat打开就能找到flag。
参考题解

WTF_CODE

提示说这是一种编程语言,查一下是whitespace,找了一个在线的解码地址
参考题解

fly me to the moon

熟悉的JS逆向。
可以注意到页面的score在更改,因此拦截dom的变化,可以定位到相关代码,然后追溯下去,找到一段函数

1
2
3
function _0x8618x7() {
return _0x8618x6
}

由于整个代码是在chrome的js虚拟机里的,所以不能直接更改代码。在return这里下断点,把值改成31337然后继续就可以了,直到游戏挂了,就可以拿到flag了。
看了下这篇是发现了数据包,然后改包的。其实拿到题目的时候,题目说了是js game,那么flag很可能是写死在js里的,不过也算是观察入微:)

md5 password

问题在于碰撞出一个raw MD5为可使其注入的字符串。
搜一下,有如下payload可供选用

1
2
ffifdyop
129581926211651571912466741651878684928

没想到是leet more 2010的题,虽然并不知道这个比赛。

参考

type confusion

依然是php弱类型。

tmitter

给的提示是这样

1
2
3
4
5
create table tmitter_user(
idx int auto_increment primary key,
id char(32),
ps char(32)
);

一看就知道是截断。

web chatting

监控流量可以发现请求http://wargame.kr:8080/web_chatting/chatview.php?t=1&ni=31337ni为注入点。

理论上这题可以用SQLiGods做的,但是不知道为什么没有把flag爆出来,手动倒是可以。

lonely guys

还是注入,用sqlmap了。

是盲注,payload类似如下

1
desc,(SELECT (CASE WHEN (ORD(MID((SELECT IFNULL(CAST(authkey AS CHAR),0x20) FROM lonely_guys.authkey ORDER BY authkey LIMIT 0,1),39,1))>50) THEN 1 ELSE 4772*(SELECT 4772 FROM INFORMATION_SCHEMA.PLUGINS) END))
Author: hundan
Link: https://hundan.org/2018/08/12/writeup-wargame-kr/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.