IThome 2024 鐵人賽 一直刷 CTF - Day17
前言
本日進度:
上課紀錄
Injection (駭客的填字遊戲)

把所有車牌都刪掉了 xddd

這次會提到的

Code Injection
以 python eval 舉例

其他常見的危險函式

如何預防?
可以看看 這個
Code Injection 常常會出現在 IOT 設備 (像是監視器、TX link 之類的)
Command Injection

指令就會變成 dig vincent55.tw; id
基本技巧 ;
|
&&
||

command substitution

如果空白被過濾了 - 用 ${IFS}
/ <

如果有一些 keyword 被過濾了

Lab - dig
這題她有提供原始碼,可以知道背後的執行邏輯是
<pre><?= system("dig '" . $_POST['name'] . "';") ?></pre>
,所以可以用 ';
來截斷 dig
然後就能在後面輸入想要的指令了,先用 ls
找到 Flag
的位置,然後再印出來就是答案摟


Lab - dig waf1
這題多檔了一些字
blacklist = ['|', '&', ';', '>', '<', "\n", 'flag'];
,可以用之前的 code substitution 來繞過

Lab - dig waf2
這題多檔了空白,用 ${IFS}
就能通過了

Reverse shell
Normal shell: ssh

Reverse shell 就是改成從 server 主動連線到 client


這邊 有各種不同的 reverse shell
ngrok 可以用來反向代理,這樣如果連成大網路就不會被擋一些東西了
SQL Injection
簡介



SELECT title, subtitle, context FROM articles;
這邊是要找出 title, subtitle, context 這三個欄位的資料

SELECT * FROM articles;
找出所有欄位的資料

SELECT * FROM articles WHERE id = 2;
找出 id 為 2
的資料

這邊就有點像是前面 command injection 一樣,可以讓他做一些壞壞的事情
SELECT * FROM articles WHERE id = 3; DROP TABLE articles;

另外如果是在處理登入的資料庫是用
SELECT * FROM user='' AND pass=
來做判斷帳密是否正確,那就有可能發生下面一張的問題

藉由 '
截斷 和 --
註解的方式,可以讓他不管密碼是什麼的狀況下登入

分類
- Stacked: 用分號隔開各種語句
- Union Based: 用 UNION 來將兩個語句合在一起
- Blind Based: 當目標不會告訴你 result 的時候
- Time Based: 透過 sleep 來判斷條件
- Boolean Based: 透過布林結果來判斷條件
- Error Based: 透過錯誤訊息來取得資料
- Out of Band: 讀檔、寫檔…