bugku-web 前35題詳解 (當然除去題目失效)

第二題:計算器

嘗試輸入96,發現只能輸入一位數字,於是輸入“9”,點擊驗證,彈出“輸入有誤!”

F12查看網頁源代碼,發現輸入框的最大長度是1。

於是更改最大長度爲100,輸入正確答案96,得到flag。

第三題:web基礎$_GET

題目分析:根據題面和所給代碼,判斷出是一道GET傳參的題。GET傳參時請求的參數是在URL中,所以直接在網址後面加上?what=flag。

第四題:web基礎$_POST

題目分析:根據題面和所給代碼,判斷出是一道POST傳參的題。POST傳參時請求的參數是在頁面表單中。所以藉助在線工具或firefox中的Hackbar,以POST的方式提交給題目網址。

第五題:矛盾

題目分析:觀察代碼,發現有個關鍵函數is_numeric(),上網搜索這是一個檢測變量是否爲數字或數字字符串。如果傳進去的是數字或字符串,則進不來這個函數,也就不辦法輸出了。

解決方法就是要繞過,既然不能輸入數字字符串,那就輸入數字加字母的字符串,例“1asdf”。根據“==”弱類型比較,如果等號兩邊類型不同,則會轉換成相同類型的再比較,所以當一個字符串與數字比較時,會把字符串轉換成數字,保留字母前的數字。

於是在地址欄加上?num=1z,就可以進入判斷體,輸出flag。

第六題web3

不使該頁面創建對話框後,F12查看源代碼,發現一串HTML編碼的字符串

複製後,用在線工具解密,得到flag

剛開始在沒有禁止創建對話框時,F12沒有出現源代碼,然後由於反覆出現兩個對話框,就想到利用Burp進行抓包,結果失敗了,浪費了時間。

第七題 域名解析

題目分析:域名解析,就是把一個域名指向一個IP,方便記憶。

在本機C盤上有一個host文件,可以視爲一個系統本地的DNS服務器,所以只要在上面添加123.206.87.240 flag.baidu.com 就可以了。

訪問flag.baidu.com,得flag

第八題 你必須讓他停下

題目分析:打開鏈接,網頁一直顯示不同的圖片,想到用brup抓包讓他停下來。

成功

第九題 本地包含

  題目打不開

第十題 變量1

題目分析:flag在變量中,GET方式從地址欄傳參,Isset()檢測變量是否已設置並非NULL,preg_match()用於執行一個正則表達式匹配,/^ 開始, \w表示任意一個單詞字符,即[a-zA-Z0-9_] ,+將前面的字符匹配一次或多次,$/ 結尾。var_dump()判斷一個變量的類型與長度,並輸出變量的數值.$$”是可變變量的標誌,可視爲$($args)

解決方法:因爲flag在變量中,所以我們可以利用GLOBALS輸出全部的變量,即將args=GLOBALS,var_dump()會將$GLOBALS數組中存放的所有變量以數組的方式輸出 得到flag。

第十一題 web5

題目分析:在題目描述中有JSP,在源代碼中發現jother編碼。

解決方法:把這些字符放入控制檯中,有了flag。

題目背景:jother編碼是在javascript語言中,利用少量特定字符構造精簡的匿名函數對與字符串的編碼方式。其中少量的特定字符包括:“+”、“!”、“(”、“)”、“[”、“]”、“{”、“}"。

目前任何瀏覽器都可以進行jother編碼的,但是有些出於安全考慮,屏蔽了該功能。

第十二題 頭等艙

題目分析:真的什麼都沒有。。。

解決方法:抓下包看看,結果Go一下就出現了

題目背景:Burp Repeater 通常用於多次重放請求響應和手工修改請求消息的修改後對服務器端響應的消息分析。可以從Proxy history、site map、Scanner等模塊中右鍵菜單send to repeater發送到repeater,對頁面數據進行修改,點擊go,發送請求,右邊響應請求。

第十三題 網站被黑

題目分析:webshell是網頁後門的標誌,所以可以用御劍掃描後臺

進行訪問

利用burpsuit中的Intruder模塊爆破

輸入密碼,得到flag。

第十四題 管理員系統

題目分析:題中信息有“IP禁止訪問,請聯繫本地管理員登陸,IP已被記錄.”,“dGVzdDEyMw==”

解決方法:僞裝成本地訪問,X-Forwarded-For: 127.0.0.1。test123可能是用戶名或密碼。用brup抓包改包。

第十五題 web4

題目分析:源代碼中有兩大段URL編碼和eval() 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。

unescape() 函數可對通過 escape() 編碼的字符串進行解碼。

加號(+)拼接字符串,數字。

解決方法:解碼得p1= 67d709b2b,p2= aa648cf6e87a7114f1 把三個URL編碼結合起來67d709b2b54aa2aa648cf6e87a7114f1,輸入到表單裏。提交,得到flag。

第十六題 flag在index裏

題目分析:在網址上發現php僞協議 filefile的功能是訪問本地文件系統。並且file關鍵字是get參數傳遞。

解決方法:利用訪問本地文件的協議php://filter/,去訪問index.php 具體方式是在網址上加上

file=php://filter/read=convert.base64-encode/resource=index.php

BASE64解碼:

題目補充:爲什麼要設置讀取方式是base64編碼後的?通過我們傳遞的file參數,include()函數引入了index.php的編碼格式,因爲是編碼格式的,所以執行不成功,則返回了源碼的base64格式。反之,就會直接執行,沒有任何信息出現,並且flag在註釋中,更得不到。

而且源碼中還有對php://協議的其它方法的過濾:../ tp data input 

題目背景:

第十七題 輸入密碼查看flag

題目分析:URL中出現baopo?yes的字樣,所以brup抓包爆破。

解決步驟:

設置類型爲數字,因爲是5位數的密碼,所以從10000到99999.

輸入密碼,得到flag

第十八題 點擊一百萬次

      題目打不開

第十九題 備份是個好習慣

題目分析:“備份”和兩段一樣的字符串。先找出備份文件.bak

解題步驟:用御劍後臺掃描掃一下,出現了有.bak的網址

點進去,發現一段代碼。

strstr()搜索字符串在另一字符串中的第一次出現,返回字符串的剩餘部分(從匹配點)。執行過後,$str就是URL中“?”之後的字符串,包括“?”。

Substr()函數截取字符串,返回字符串的一部分。執行過後,$str就是去掉了“?”

Str_replace()函數以其他字符替換字符串中的一些字符。執行過後,就是將$str中的字符“key”替換成“”,去除$str中的“key”。

Parse_str()函數把查詢字符串解析到變量中。根據下面的兩個輸出$key1,$key2,說明$str在經歷了Str_replace()函數後,一定還有“key1”,“key2”。那麼可以是kkeyey1或kekeyy1。

然後利用md5()不能處理數組的特性,我們可以構造payload爲kkeyey1[]=1&kekeyy2[]=2。

或者利用弱比較的特性,使MD5的值是0開頭的字符串,就可以通過判斷。常見的有

QNKCDZO、240610708、s878926199a、s155964671a、s214587387a、s214587387a

第二十題 成績單

題目分析:在Hackbar裏輸入id=2和id=2’#,頁面正常;id=2’,頁面異常。說明存在SQL注入點。

解決方法 :

嘗試獲取列數,利用order by對指定列對結果集排序,發現有4列。

接着使用union聯合注入,union前後兩個sql語句的選擇列數要相同,記得把前面查詢爲空,id=0,顯示正常,確實存在四列數據。

發現都有回顯,開始爆破

首先爆庫名, id=0‘ union select 1,2,3,database()#,得到數據庫名skctf_flag

爆表名, id=0’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#,得到表名fl4g,sc

爆字段,id=0’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666c3467,得到字段skctf_flag。

查詢數據,id=0’ union select 1,2,3,(select skctf_flag from fl4g)#,得到flag。

知識點補充:

Union select 手工注入

Mysql中的information_schema結構用來存儲數據庫系統信息。

schemata 存儲數據庫名的,

關鍵字段:SCHEMA_NAME,表示數據庫名稱

tables 存儲表名的

關鍵字段:table_schema表示表所屬的數據庫名稱;

table_name表示表的名稱

columns 存儲字段名的

關鍵字段:table_schema表示表所屬的數據庫名稱;

table_name表示所屬的表的名稱

column_name表示字段名

爆所有數據庫名

select group_concat(SCHEMA_NAME) from information_schema.schemata

得到當前庫的所有表

select group_concat(table_name) from information_schema.tables where table_schema=database()

得到表中的字段名 將敏感的表進行16進制編碼

adminuser=0x61646D696E75736572

select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E75736572

得到字段具體的值    

select group_concat(username,0x3a,password) from adminuser

第二十一題 秋名山老司機

 題目失效

第二十二題 速度要快

題目分析:需要以post的方式提交margin。

不是flag,那可能是margin的值

額~ 得快點,不能手動解碼,那寫腳本。

第二十三題 cookies欺騙

題目分析:對URL中的a2V5cy50eHQ=進行base64解碼,發現keys.txt。

解題思路:line空着,那隨便賦給值1.既然出現了keys.txt,那去主頁看看,要對index.php進行base64編碼。出現了代碼,說明index.php有東西,嘗試將line依次賦予2、3、4…同樣出現了不同的代碼。

用爬蟲,把代碼內容盤下來。

第二十四題 never give up

題目分析:訪問1p.html,頁面自動跳轉到bugku主頁面。在鏈接前面加上view-source,直接查看1p.html源碼,發現有url編碼的字符串。

url解碼,又出現base64加密的字符串

Base64解碼,又出現url編碼的字符串。

url解碼,又出現一段代碼

訪問view-source:http://123.206.87.240:8006/test/f4l2a3g.txt,得到flag。

第二十五題 welcome to bugkuctf

(題目失效)

第二十六題 過狗一句話

題目分析:分析代碼得,$poc_2($_GET[‘s’])=assert($_GET[‘s’])。

Assert()斷言函數,判斷表達式是否爲真則繼續,反之則中斷。能夠執行表達式。所以賦給s執行代碼。

(題目無效)

第二十七題 字符?正則?

題目分析:當$IM爲真,就輸出key。所以分析preg_match裏的正則表達式,在地址欄里加上id。

解題:"/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i"

/key 要有“key”

*key 匹配前面有0個或多個字符key

{4,7}key:\/ ——最少匹配4次且最多匹配7次key,加上一個“:/”。

\/(.*key)[a-z][[:punct:]] ——  首先一個“/”,接着(匹配前面有0個或多個字符key),最後匹配小寫字母和任何標點符號

/i 標記大小寫不敏感

所以構造出的id: keykeykeykeykey:/k/keya.

第二十八題 前女友

網頁打不開

第二十九題 login1

題目分析:SQL約束攻擊—— 前提在SQL中執行字符串處理時,字符串末尾的空格符將會被刪除。所以使用“admin   ”查詢和“admin”查詢的結果是一樣的。

解題思路:先註冊admin,果然admin已存在

註冊“admin   ”

按新註冊的“admin   ”登錄,得到flag。

第三十題 你從哪裏來

題目分析:打開網頁,只有一句你是否來自google。所以只要抓包,改一下請求頭referer,就可以成功。

解題:

題目背景:HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器基此可以獲得一些信息用於處理。

第三十一題 md5 collision(NUPT_CTF)

題目分析:MD5碰撞,與md5有關,應該是比較之類的,抓包發現是GET傳參。

解決方法:想到那幾個0e開頭的MD5,就一個一個嘗試,結果就有了。。。

題目補充:使MD5的值是0開頭的字符串,常見的有

QNKCDZO、240610708、s878926199a、s155964671a、s214587387a、s214587387a

第三十二題 程序員本地網站

題目分析:“請從本地訪問”,即僞裝成本地訪問,在repeater中寫入X-Forwarded-For:127.0.0.1。

題目補充:X-Forwarded-For: 簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP 代理或者負載均衡服務器時纔會添加該項。

第三十三題 各種繞過

題目分析:$_GET['id'] = urldecode($_GET['id']); urldecode()對字符串進行URL解碼

isset($_GET['uname']) and isset($_POST['passwd'])     isset() — 檢測變量是否設置。

sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')

解題思路:要使uname和passwd 的值不相等,但是sha1()加密的值相等。利用sha1不能處理數組的特性,將uname和passwd傳入兩個不同的數組,就可以得到flag。和“備份是個好習慣”中,考察點類似。

第三十四題 web8

題目分析:extract() 函數從數組中將變量導入到當前的符號表。trim() 函數移除字符串兩側的空白字符或其他預定義字符。file_get_contents() 函數把整個文件讀入一個字符串中。

訪問一下flag.txt。

解題思路:所以flag.txt裏面是flags。也就是$ac=文件內容,$fn=文件名,就可以使$ac==$f.

第三十五題:細心

還以爲題目真的崩了呢

題目分析:把各個地方點了一遍,並沒有什麼。

解題步驟:用御劍掃一下,出現了一個robots.txt

打開resusl.php

出現一個x,嘗試x=password,admin等,是否能獲得管理員頁面。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章