108第三次社課
===
###### tags: `1081`
:::success
簽到:
B073040047 楊志璿
B063012054 林祐安
B062040025 黃宇豪
B083040037 黃琮閔
B083040036 蔡明霖
B073040032 涂哲誠
B083040021 嚴宇同
B073040039 吳秉勳
B083040045 李亦晴
B083040044 沈育齊
B083011026 蘇彥龍
B083011023 陳又𩑹
B073040050 翁昌閔
B073040030 林秉承
B073040037 王昇鴻
B073040023 花千祐
B083011002 蔡泳霈
B083040004 艾保丞
B063040010 林宏儒
B073040022 張浩綸
B063040013 李洳瑄
B073040062 南政佑
B063040046 徐彥庭
B083040001 陳宥景
B083040014 陳昱維
B073040031 葉星佑
B063040059 陳縵欣
B073022002 蔡東霖
B063012015 賴亭諭
B064011007 徐筱媛
B063040016 陳垣菘
I083010013 陈金羽
B063040015 呂昇峰
B063040004 劉翔誠
B083040050 陳柏穎
M083140014 黃晏林
M083140008 黃警鋒
M083140006 莫閔勛
M083140001 張郢展
M083140005 曾煜鈞
:::
slide: https://docs.google.com/presentation/d/1UhU3tgzdzmtcAZh3cVkF-RuSRnLa_7CH3xHp5nv-XmI/edit?usp=sharing
---
[Macaca CTF](https://ctf.macaca.cool)
macaca.cool port:30XX
帳號: user
密碼: Is_l4b_pw
---
## objdump
用這個可以看到 vuln 的組合語言
```
objdump -d -M intel ~/labs/abc/vuln | less
```
鍵盤打
```
/main
```
可以看到 main 的組合語言
在 0x8048421 可以看到 push ebp
就是保存上一個 ebp 的位置(註: \_start() )
然後 main 就是從這裡開始
little endian
"ABC" = 0x434241
main 在 call sum 的時候:
```
804843c: ff 75 f8 push DWORD PTR [ebp-0x8]
804843f: ff 75 fc push DWORD PTR [ebp-0x4]
8048442: e8 c4 ff ff ff call 804840b <sum>
```
可以看到 push 了兩個參數進去
然後往上看,可以看到 sum function 在 0x804840b
把 ebp-8 移動到 edx
把 ebp-4 移動到 eax
這樣 sum function 就可以吃到 main 傳過來的參數了
離開是按 q ,就可以離開了。
## GDB
接著輪到 gdb
```
gdb ~/labs/abc/vuln
```
輸入 b main 設定中斷點在 main 上
```
b main
```
接著輸入 r 執行(run)
```
r
```
單行執行
```
ni
```
gdb 會顯示當前許多重要資訊
```
[----------------------------------registers-----------------------------------]
EAX: 0xf7f2b808 --> 0xffe9e82c --> 0xffea0848 ("SHELL=/bin/bash")
EBX: 0x0
ECX: 0x84680548
EDX: 0xffe9e7b4 --> 0x0
ESI: 0xf7f29000 --> 0x1e5d6c
EDI: 0xf7f29000 --> 0x1e5d6c
EBP: 0xffe9e788 --> 0x0
ESP: 0xffe9e778 --> 0x8048479 (<__libc_csu_init+9>: add ebx,0x1b87)
EIP: 0x8048435 (<main+20>: mov DWORD PTR [ebp-0x10],0x434241)
EFLAGS: 0x286 (carry PARITY adjust zero SIGN trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
0x8048424 <main+3>: sub esp,0x10
0x8048427 <main+6>: mov DWORD PTR [ebp-0x4],0x10
0x804842e <main+13>: mov DWORD PTR [ebp-0x8],0x20
=> 0x8048435 <main+20>: mov DWORD PTR [ebp-0x10],0x434241
0x804843c <main+27>: push DWORD PTR [ebp-0x8]
0x804843f <main+30>: push DWORD PTR [ebp-0x4]
0x8048442 <main+33>: call 0x804840b <sum>
0x8048447 <main+38>: add esp,0x8
[------------------------------------stack-------------------------------------]
0000| 0xffe9e778 --> 0x8048479 (<__libc_csu_init+9>: add ebx,0x1b87)
0004| 0xffe9e77c --> 0x0
0008| 0xffe9e780 --> 0x20 (' ')
0012| 0xffe9e784 --> 0x10
0016| 0xffe9e788 --> 0x0
0020| 0xffe9e78c --> 0xf7d61fb9 (<__libc_start_main+249>: add esp,0x10)
0024| 0xffe9e790 --> 0x1
0028| 0xffe9e794 --> 0xffe9e824 --> 0xffea082f ("/home/user/labs/abc/vuln")
[------------------------------------------------------------------------------]
Legend: code, data, rodata, value
0x08048435 in main ()
gdb-peda$
```
單步執行
```
ni
```
跟 si 的差異是 nexti 遇到要 call 另外一個 function ,那麼它會直接執行到該 function 結束,也就是說 nexti 不會暫停在其它的 function。
display assemble 列印出組語程式碼
```
disass
```
可以看組語
leave = mov esp, ebp; pop ebp;
ret = pop eip
看 main assembly code
```
disass main
```
看到 const char*
```
$ x/s 0xffe540d8
> 0xffe540d8: "ABC"
```
---
## execute
```
ls -l
./vuln
cat flag.txt
```
離開 shell
```
exit
```
---
## address
```
objdump -d -M intel ~/labs/address/vuln | less
/main
```
比較 source code
```
cat vuln.c
```
沒有關到 canary,先略過(這題是正常的,只是剛好被改寫QQ)
canary 參考資料:https://szlin.me/2017/12/09/stack-buffer-overflow-stack-canaries/
---
## endian
```
echo -e "\x41"
>A
echo -e "\xef"
>????不可視字元
```
echo -e
---
ssh連線工具: putty
https://www.putty.org/
install this: https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.73-installer.msi
---
## 頁尾意見區
有沒有好的自學網站QQ
>[name=楊志璿][pwnable.kr](https://pwnable.kr) (?)
>或是說 picoctf.com
>[name=吃瓜眾]如果是關於GDB的部分,可以google有蠻多資源。
>像是[如何使用-GDB-Debug](https://www.puritys.me/docs-blog/article-329-如何使用-GDB-Debug.html)
>[name=吃瓜眾] 若題目有提供source code可以先看看程式是如何執行的:)
>
>[name=講師] 抱歉~今天環境目錄權限沒關好,導致有些題目被修改而開保護,無法解題QQ
>>[name=蘇彥龍] 請問影響哪些題目呢?impossible可以解嗎?XD
>>[name=講師] 全部都正常,除非被修改,而impossible真的impossible了QQ (已從ctfd移除)
>>[name=蘇彥龍] 所以,因此才出現``` 'flag.txt' missing in the current directory!```嗎?XD
>>[name=講師]嘿呀,設計有誤,jump過去也沒權限讀
>>[name=蘇彥龍] 原來如此,害我花那麼多時間在想這怎麼回事XD
>>[name=講師]sorrr,耽誤到你時間><
>>[name=蘇彥龍] 沒關係啦~ 話說,你輸入法是不是開到轉成簡體的模式?
>>[name=講師] debian10太新,gcin還沒跟上,只有破破輸入法
>>[name=蘇彥龍] 有注音卻預設簡體?真奇怪
>>[name=講師]剛又翻了下,確定没有繁體的...(已放棄治療
>>[name=蘇彥龍] XDD
vuln擁有者為ctf:[題目名稱]代表正常
```shell
-r--r----- 1 ctf address 27 Oct 23 11:31 flag.txt
-rwxr-sr-x 1 ctf address 7592 Oct 24 09:30 vuln
-rw-rw-r-- 1 ctf address 805 Oct 24 08:00 vuln.c
```
vuln擁有者為user:user代表被修改過,可能無解(建議換一台)
```shell
-r--r----- 1 ctf address 27 Oct 23 11:31 flag.txt
-rwxrwxr-x 1 user user 7592 Oct 24 09:30 vuln
-rw-rw-r-- 1 ctf address 805 Oct 24 08:00 vuln.c
```
路人路過,補充幾個學習資源(不符合格式再麻煩管理員刪除Orz):
* wargame:
* [pwnable.tw](https://pwnable.tw)
* hitcon 成員架的解題網站
* 很像平常 ctf 比賽的模式
* 偏難,練到一定程度可以去玩玩看
* 學習:
* [angelboy-slide](https://www.slideshare.net/AngelBoy1?utm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview)
* hitcon pwn 主力選手,[人物介紹](https://ithelp.ithome.com.tw/articles/10226236)
* 教材很經典
* 初學看 linunx binary exploitation 和 execution 就好,其他可以先略過
* 可以配合 angelboy 的 [lab](https://github.com/scwuaptx/HITCON-Training) 自己練習
* [ctf-wiki](https://ctf-wiki.github.io/ctf-wiki/)