Level 9 To Level 10 Write-ups
Level 9
Challenge Descriptions

website: http://natas9.natas.labs.overthewire.org/
Background Knowledges
- PHP Command Injection 漏洞解析
- Linux 基本指令
Solve
- 檢查原始碼,沒啥好看的;直接進去看 php 的原始碼。
- 這邊可以看到原始碼中的 php 的部分有兩組
if/else,第一組if/else主要是檢查在有沒有needle這個參數,並且存入變數key。
php
<?
$key = "";
if(array_key_exists("needle", $_REQUEST)) {
$key = $_REQUEST["needle"];
}
if($key != "") {
passthru("grep -i $key dictionary.txt");
}
?>- 第二組
if/else中出現了一個指令:passthru,可以查詢一下這個指令是什麼:
php
<?
$key = "";
if(array_key_exists("needle", $_REQUEST)) {
$key = $_REQUEST["needle"];
}
if($key != "") {
passthru("grep -i $key dictionary.txt");
}
?>- 了解
passthru就是執行系統命令的指令後,那我們確認了這是一個 Command Injection 的經典漏洞。有了這個漏洞,我們就可以來注入我們要查詢的指令。 - 我們這邊可以從 規則頁 找到密碼通常會藏在
/etc/natas_webpass/natas*的檔案裡面,我們要去的下一關是level 10,所以要找的密碼地點應該藏在/etc/natas_webpass/natas10裡面。所以我們要用;cat /etc/natas_webpass/natas10;作為注入的 payload,就可以取得 level 10 的密碼。
Thoughts
這一關開始觸碰到 Command Injection 的基本漏洞。
雖然現在比較少碰到類似的,但是在某些場合還是會有這樣的漏洞存在。
通常是為了偷懶...不過也有一些是真的要 call 外部的應用程式也只能出此下策。
這邊就是要設定可以放入 payload 的白名單,會比較安全。
補充
這一關當然不是只有這種 payload 可以注入。
在下一關 Level 10 的 payload 同樣也可以拿來這裡用!
Answer
答案
username: natas10
password: D44EcsFkLxPIkAAKLosx8z3hxX1Z4MCE
Level 10
Challenge Description

website: http://natas10.natas.labs.overthewire.org/
Background Knowledges
- Linux 的指令進階應用
Solve
NOTE
這一題跟上一題一樣,但是要找到另一種 payload 才能處理。
這邊給個提示:grep -i 的用法很重要。
- 跟 Level 9 相同,只是多限制了 ;/& 的使用,不能在 payload 中出現上述兩個字元。
NEW PAYLOAD
bash
.* /etc/natas_webpass/natas11 #Thoughts
這才比較像是稍微真實的一點的情況,有做字元的限制,當然不會這麼少,但是至少要動動腦,換一種方式入侵。
這個最好的方法還是設定白名單,比較能保證不會出事。
白名單太多不好設定?
那一開始就不要有可以下系統 command 的寫法就好了..
Answer
答案
username: natas11
password: 1KFqoJXi6hRaPluAmk8ESDW4fSysRoIg

