Web.
Claire
Intro
Tools
Practice
Web
Vulnerabilities
Web:網站
尋找+利用網頁有的漏洞(vulnerablility)
常用技術
command/code injection(指令注入)
SQL injection
XSS (Cross-site scripting)
Frontend
Backend
HTTP
GET / HTTP/1.1
Host: www.google.comHTTPS
robots.txt
.htaccess
.htpasswd
.git
.DS_Store
Internet Standards
LAN
IP:Port(ex. 192.168.1.12:8080)
$ nslookup google.com
Elements
Console
Sources
Network
Application
curl [options...] <url>
-d, --data <data> # HTTP POST data
-f, --fail # HTTP 回傳錯誤(4xx / 5xx)時不輸出內容
-i, --include # 在輸出中包含 HTTP Response Headers
-o, --output <file> # 將回應內容輸出到 <file>
-s, --silent # 不要進度/錯誤訊息(for 大量測試)
-T, --upload-file <file> # 上傳檔案
-u, --user <user:password> # HTTP Basic Auth
-v, --verbose # 顯示完整請求和回應過程透過 HTTP Protocol上傳/下載的指令
Web 安全測試工具
kali 有預設裝好 community 版的 burp
$ ping google.com$ nc <ip> <port>
Reflected XSS
http://www.example.com/upload.asp?id=<script>alert(1);</script>
Stored XSS
DOM XSS
<img src=# onerror=”alert(1)”>
我是壞人! <script>alert(1);</script><?php
$username = $_GET['username']; // 輸入 ' OR 1=1" --
$result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1" -- '");
?><?php
$student = $_GET['student']; // claire
$result = mysql_query("SELECT * FROM users WHERE student='claire'");
?>空行 CR+LF:\r+\n
在可以插入字串的地方插入 CRLF
欺騙伺服器告訴這裡我們這邊提早換行
在後面插入惡意的 payload
如果 Hacker 能操縱 Server Client 傳輸的 header
302 Found => redirect
把 reflected XSS url 塞在"\r\n"後面
得到 cookie & session
把釣魚連結塞在"\r\n"後面
預防方法
對要 redirect 的內容 urlEncode
檢查 respond header 的內容 過濾掉多的"\r\n"
<img
src="http://bank.com/transfer.do?acct=BadGuy&amount=100000 HTTP/1.1"
width="0"
height="0"
/>
GET 來做關鍵操作
POST 請求需要使用者的提交動作才能觸發
Set-Cookie 的屬性POST、 DELETE、PUT 都不帶上 Cookie,GET 會帶上 Cookie可以透過這個漏洞去執行伺服器的命令
可以做到遠端程式碼執行
ex :
php
python :
os.system()
subprocess.call()
os.popen()
常發生於 ping 測試
IOT 設備常用
命令連接
;:命令終止符號&:讓指令在後台運行|:pipe,將前項命令的輸出當成後項命令的輸入||:第一個命令失敗才執行下一個&&:第一個命令失敗不再執行下一個`:讓 ping 失敗#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
char cat[] = "cat ";
char *command;
size_t commandLength;
commandLength = strlen(cat) + strlen(argv[1]) + 1;
command = (char *) malloc(commandLength);
strncpy(command, cat, commandLength);
strncat(command, argv[1], (commandLength - strlen(cat)) );
system(command);
return (0);
}$ ./catWrapper Story.txt
When last we left our heroes...#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
char cat[] = "cat ";
char *command;
size_t commandLength;
commandLength = strlen(cat) + strlen(argv[1]) + 1;
command = (char *) malloc(commandLength);
strncpy(command, cat, commandLength);
strncat(command, argv[1], (commandLength - strlen(cat)) );
system(command);
return (0);
}$ ./catWrapper "Story.txt; ls"
When last we left our heroes...
Story.txt doubFree.c nullpointer.c
unstosig.c www* a.out*
format.c strlen.c useFree*
catWrapper* misnull.c strlength.c useFree.c
commandinjection.c nodefault.c trunc.c writeWhatWhere.c