상세 컨텐츠

본문 제목

[HITCON-Training] craxme

SYSTEM HACKING/CTF, etc

by koharin 2020. 1. 2. 18:19

본문

728x90
반응형

1. 보호기법 확인

 

 

2. 과정

 

 

read로 buf변수에 입력받은 후 buf변수 값을 출력할 때 그냥 printf(&buf)로 출력해서 FSB(format string bug) 취약점이 존재한다.

 

1) %n 서식자 사용한 방법

 

1)-1. 0x000000da => 0x0 0x0 0x0 0xda

 

입력한 AAAA가 8번째에서 출력된다.

길이를 8자리로 맞추기 위해 2번째 ~ 6번째까지는 %08x 5개를 출력하고,

7번째에는 0xda 10진수(218) - (처음 magic 주소 길이 + %08x 5개 길이 = 44) = 174, 즉 %174c를 주고,

ㅡmagic 주소가 위치한 곳에 %n을 출력해서 magic addr에 0xda의 값으로 덮히도록 한다.

 

 

1)-2. 0xfaceb00c => 0xb00c 0xface

 

0xfaceb00c의 경우, magic addr에 덮을 때 2바이트씩 나눠서, 0xface와 0xb00c로 나눠서 덮는다.

주소는 little endian으로 써지므로 magic_addr에 0xb00c를, magic_addr+2에는 0xface를 쓴다.

 

0xb00c 10진수 : 45068

0xface 10진수 : 64206

 

 

처음에 줄 때 magic_addr AAAA magic_addr+2 를 줘야하는데, 덮을 때 %000x %n을 쓰기 때문에 magic_addr+2를 덮을 때는  magic_addr의 %n 다음에 %000x %n을 줘야하기 때문에다.

 

magic_addr을 덮을 경우,

45068 - (%magic_addr(4) + AAAA(4) + &magic_addr+2(4) + %08x 5개(40)) = 45016

%45016c %n 으로 줘야한다.

 

magic_addr+2를 0xface로 덮을 경우,

앞에 길이가 총 45068이므로 64206 - 45068 = 19138

%19138c %n 으로 줘야한다.

 

p32(magic_addr) + "AAAA" + p32(magic_addr+2) + "%08x%08x%08x%08x%08x" + "%45016c%n"

+ "%19138c%n"

 

이 payload가 된다.

 

 

 

2) pwntools의 fmtstr 사용

 

pwntools에서 format string bug를 exploit하기 위한 tool인 fmtstr 함수를 제공한다.

 

 

fmtstr_payload(offset, {addr: 0xdeadbeef})

 

이렇게 써서 사용

 

 

728x90
반응형

'SYSTEM HACKING > CTF, etc' 카테고리의 다른 글

[Insomni'hack 2017] Wheel of Robots  (0) 2020.01.10
[HITCON 2016] SleepyHolder  (0) 2020.01.08
[HITCON-Training] crack  (0) 2020.01.02
[Codegate2018] BaskinRobins31  (0) 2020.01.01
simple_heap  (0) 2019.12.21

관련글 더보기