bugku地址鏈接:https://ctf.bugku.com
web2
一進去瀏覽器就顯示一堆動態笑臉,時間長了密集恐懼症了。
解法1: F12查看源碼
解法2: 地址欄輸入:
view-source:http://123.206.87.240:8002/web2/
計算器
考察: 前端基礎知識,maxlength的使用。
前端常用F12調試更改,把值改成100突破限制即可提交結果,彈窗flag
解法1:想辦法輸入正確的答案,來獲得flag
<input type="text" class="input" maxlength="1"/>
改為:<input type="text" class="input" maxlength="100"/>
解法2,這里多提一嘴:
(前端的代碼一般都是暴露出來的,html、javascript、css)全部可以直接看到。
既然是彈窗flag,那么他寫的東西可能是是javascript代碼,
右鍵查看源代碼可以看到,code.js點擊鏈接進去就看到源碼。
//發現code.js
<script type="text/javascript" src="js/code.js"></script>
//code.js代碼部分如下:
$("#check").click(function(){
if ($(".input").val() == code && code != 9999) {
alert("flag{CTF-bugku-0032}");
} else {
alert("輸入有誤!");
}
});
web基礎$_GET
考察get傳參: url?變量=值 url?變量1=值1&變量2=值2
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
地址欄輸入如下得到flag
http://123.206.87.240:8002/get/?what=flag
web基礎$_POST
考察post傳參:上傳賬號密碼、音頻文件等常用post傳參
擴展:傳post的方法有很多種:爬蟲,postman,burpsuite,火狐瀏覽器的編輯重發,hackbar等等很靈活,只要能達到傳post數據的目的
網頁內容是如下的PHP代碼
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';:
示例方法1:Chrome使用hackbar傳參,
示例方法2:瀏覽器console中發送post
調用jquery
var s = document.createElement("script");
s.src = "http://cdn.bootcss.com/jquery/2.2.0/jquery.js";
document.body.append(s);
發送post請求參數waht:"flag",
$.post("http://123.206.87.240:8002/post/",
{
what:"flag",
},
function(data,status){
alert("Data: " + data + "\nStatus: " + status);
});
矛盾
知識點:PHP的弱比較和強比較
is_numeric() 函數用於檢測變量是否為數字或數字字符串。
打開地址后會回顯如下代碼。
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
代碼分析:
1.你需要用get方法傳一個叫num的參數,
2.num不是數字時才可以通過if句的驗證
3.只有"num==1"時才可以得到flag
當自己使用PHP寫邏輯時可以使用三等號"==="。
等號的詳細原理可自行搜索。
由於他的檢測是用雙等號的弱類型比較,這樣就出現了以外的邏輯。雙等號是可以繞過的。
你只需要傳一個參數,首字符是1后面是字母的形式即可繞過。
payload:
http://123.206.87.240:8002/get/index1.php?num=1abcdefg
web3
考點:html字符實體
查看網頁源代碼:
view-source:http://123.206.87.240:8002/web3/
最下方發現了如下關鍵代碼:
<!--KEY{J2sa42ahJK-HS11III}-->
這樣&#開頭的叫做HTML實體,組成是&#加上一個實體編號,或者&加上實體名稱。
咱們這里是前者,這里對應的試題編號是ASCII碼,比如75對應K,69對應E,89對應Y。
如果表示漢字也會有自己的相應實體編號。
python,其他語言也可。
s="KEY{J2sa42ahJK-HS11III}"
answer = [ int(i) for i in s.replace("&#","").split(";")[:-1] ]
for i in answer:
print( chr(i) , end="" )
得到結果:KEY{J2sa42ahJK-HS11III}
常見的一些實體實例:
顯示結果 | 描述 | 實體名稱 | 實體編號 |
---|---|---|---|
空格 | &#nbsp; |
  |
|
< | 小於號 | < |
< |
> | 大於號 | > |
> |
& | 和號 | & |
& |
域名解析
題目描述:
聽說把 flag.baidu.com 解析到123.206.87.240 就能拿到flag
考察點:http 請求頭中的的host字段
在http1.1中新增了一個Host頭,因為在connect的時候已經指定了IP,也就是說connect后已經知道主機了,那還用Host做什么呢。
需要說明的是Host是1.1中才有的,Http1.1中,如果沒指定Host,則返回404。題解完會在下方給出一些知識點。
姿勢1:在本地的hosts文件,添加對應的域名指向
hosts文件位置:C:\Windows\System32\drivers\etc,注意host文件沒有后綴名
修改示例如下:(管理員權限才可更改),改完后刷新瀏覽器訪問題目給的IP地址 123.206.87.240 即可
姿勢2:通過接口測試工具模擬http請求
這里以hackbar做演示,只要是可以添加修改header的工具即可。點擊發送后得到flag。
姿勢3:通過編寫語言腳本進行訪問
這里我是用python3編寫 , 如下payload就是我們的 headers 報文中模擬,( Http headers中文翻譯:請求頭 )。
header = {"Host":"flag.baidu.com"}
腳本:
import requests
url = "http://123.206.87.240/"
header = {"Host":"flag.baidu.com"}
r = requests.get(url,headers=header)
r.encoding = r.apparent_encoding
print(r.text)
#運行完畢后顯示flag
hosts文件知識點拓展
Hosts文件作用如下:
1、幫助電腦加快域名解析。
我們可以通過 hosts文件中所記錄的域名來提高那些域名的解析速度,並且我們輸入電腦的域名也會很快被解析出ip地址,這樣電腦就可以減輕工作量。
2、hosts 文件可以幫助一些單位為他們的一些重要用戶帶來方便。
在一些單位中,會專門為一些比較重要的用戶設置局域網。但是這些局域網比較特殊,特別是在使用時要輸入很長的ip地址。如果每次都要輸入,這就是一件非常麻煩的事,如果有了hosts文件,就可以為這些服務器標記,那么客戶在使用時,就只用輸入自己的服務器名字即可。
3、屏蔽網站。
現在有很多網站不經過用戶同意就將各種各樣的插件安裝到你的計算機中,其中有些說不定就是木馬或病毒。對於這些網站我們可以利用Hosts把該網站的域名映射到錯誤的IP或本地計算機的IP,這樣就不用訪問了。
在WINDOWSX系統中,約定127.0.0.1為本地計算機的IP地址, 0.0.0.0是錯誤的IP地址。
4、虛擬域名。
很多時候,網站建設者需要把”軟環境“搭建好,再進行上傳調試。但類似於郵件服務,則需要使用域名來輔助調試,這時就可以將本地 IP 地址與一個”虛擬域名“做地址指向,就可以達到要求的效果,且無需花費。
你必須讓他停下
考察點:這個點不大好解釋,大概就是循環吧。
運用瀏覽器的view-source功能,或者考察截取數據。
這道題右鍵查看源代碼會發現它設置了每0.5秒重新加載本網頁。
<script language="JavaScript">
function myrefresh(){
window.location.reload();
}
setTimeout('myrefresh()',500);
</script>
網頁的內容是動態變化的。最明顯的回顯就是圖片。
做法有幾種:
最便捷的姿勢:
下圖這種是最簡單的,上面的題也用到過,瀏覽器的view-source:功能,這不會讓本頁面去瘋狂刷新了。
刷新url即可,等刷出10.jpg時,會回顯flag : view-source:http://123.206.87.240:8002/web12/
flag代碼在倒數第二行,整理如下。
<center>
<div>
<img src="[10.jpg](http://123.206.87.240:8002/web12/10.jpg)"/>
</div>
</center>
<br><a style="display:none">flag{dummy_game_1s_s0_popular}</a></body>
其他姿勢
1.使用burpsuite的repeater模塊重發,找到回顯flag的頁面。
2.寫腳本循環訪問,當出現"flag{"字段時輸出網頁內容
3.自行發揮,用自己學到過的可以測試的方法即可。
web5
題目描述:
JSPFUCK??????答案格式CTF{**}
字母大寫
考察點: jother編碼
詳情可參考:
進入題目,隨便輸入點東西。
聽他的看一下網頁源碼吧,發現如下密集的東西~。
后來查看了解到是javascript的jother編碼,扔到console可以直接執行的那種。
得到答案:記得大寫。CTF{WHATFK}