728x90
반응형
1. intro
2. code 및 분석
2.1. code
생략
2.2. 분석
파일 구조체 변조가 가능하며, 마지막에 fwrite로 종료된다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
FSOP
3.2. 공격 준비
강의에 너무 잘 나와있어서 그냥 보고 베낀 수준이다.
pwn.college
Apply various FILE struct exploits to obtain a leak, then hijack hijack control flow. Start Practice
pwn.college
일단, libc version이 다소 높기에 vtable 주소를 직접적으로 수정하는 것은 불가하고,
file structure 구조체 내의 주소로만 vtable 주소를 사용할 수 있다.
지금까지 _IO_str / wstr_overflow / finish 정도만 생각하고 있었는데, 역시 익스 방법은 무궁무진했다.
해당 문제에서는 바이너리에서 fwrite를 콜하기 때문에 vtable의 주소를 *__GI__IO_wfile_overflow -0x10으로 돌리고,
해당 함수 내부의 __GI__IO_wdoallocbuf 를 거쳐 임의 위치에 값을 실행할 수 있다.
여기서 임의 위치는 _wide_data를 기준으로한 offset이며, 해당 위치를 조작할 수 있다면 임의 함수를 call 할 수 있다.
어셈블러 코드와 설명은 아래와 같다.
gef➤ disas __GI__IO_wdoallocbuf
Dump of assembler code for function __GI__IO_wdoallocbuf:
0x00007fd24b3f6490 <+0>: endbr64
0x00007fd24b3f6494 <+4>: mov 0xa0(%rdi),%rax # rdi + 0xa0 위치가 _wide_data 값임.
0x00007fd24b3f649b <+11>: cmpq $0x0,0x30(%rax) # _wide_data + 0x30은 0이어야 함. 아니면 종료.
0x00007fd24b3f64a0 <+16>: je 0x7fd24b3f64a8 <__GI__IO_wdoallocbuf+24>
0x00007fd24b3f64a2 <+18>: retq
0x00007fd24b3f64a3 <+19>: nopl 0x0(%rax,%rax,1)
0x00007fd24b3f64a8 <+24>: push %r12
0x00007fd24b3f64aa <+26>: push %rbp
0x00007fd24b3f64ab <+27>: push %rbx
0x00007fd24b3f64ac <+28>: mov %rdi,%rbx
0x00007fd24b3f64af <+31>: testb $0x2,(%rdi)
0x00007fd24b3f64b2 <+34>: jne 0x7fd24b3f6528 <__GI__IO_wdoallocbuf+152>
0x00007fd24b3f64b4 <+36>: mov 0xe0(%rax),%rax # _wide_data + 0xe0 값을 rax에 넣고
=> 0x00007fd24b3f64bb <+43>: callq *0x68(%rax) #rax + 0x68의 주소를 call 함.
4. exploit
생략
728x90
반응형
'Wargame > pwn.college' 카테고리의 다른 글
pwn.college - Format string bug payload (0) | 2023.07.30 |
---|---|
pwn.college - ROP payload (0) | 2023.07.30 |
Shellcode - level 14 (0) | 2023.07.28 |
File struct exploit - level 4 (0) | 2023.07.22 |
format string bug - level10, 11, 12 (0) | 2023.07.22 |