본문 바로가기

CTF/picoCTF

buffer overflow 3

 




이 문제는 brute-force로 canary 값을 알아낸 후 리턴주소를 win으로 exploit하면 된다.


코드를 보면

첫번째 read할 때 exploit코드의 길이만큼 입력하고

두번째 read할 때 exploit을 하는 것


여기서 첫번째 포인트는 canary위치가 어디인가

또 canary를 어떻게 때려맞출 것인가


canary위치는 vuln함수의 memcpy를 보면


ebp-0x10에 있는 걸 알 수 있다.


그럼 buf의 위치만 알면 코드에서 때려맞출 canary의 위치를 알 수 있다.

buf는 read(0,buf,count)를 보면


ebp-0x30에 있는 걸 알 수 있다.


0x20 즉, 32byte 만큼 떨어져 있다.


두번째로 brute-force로 때려맞춰야 하는데 어떻게?


여기서 놓쳤던 부분은

canary는 이미 메모리 내에 있는 값이고 그래서 굳이 4자리를 한번에 때려맞추지 않아도

한개씩 맞춰서 알아내도 된다는 것


즉, 

memcpy 이후 canary엔 값이 있다.

global_canary 주소 : 0x804a058


이 상태에서 length를 전체 덮어쓰는 길이인 36byte가 아닌


33byte부터 입력해서 하나씩 맞추는 것 

canary값이 맞으면 Ok문장('***'문장X)이 실행되는 것을 이용한다.




이렇게 짜서 canary를 구하면 IHwj값이 나온다.


그 canary값과 리턴주소(ebp+0x4)를 win함수 주소(0x80486eb)로 덮어쓰면





기억하자


                                                                                  1. ssh는 원격자의 컴퓨터로 접속하는 것

                                                                                  2. set_working_directory() : 디렉토리 이동

                                                                                  3. '{}'.format() : {}있는 부분에 값이 문자열로 들어간다.

                                                                                  4. 찾는문자열 not in 문자열 : 문자열 내에 내가 찾고자하는 문자열이 있는지 확인한다. 

                                                                                  5. log : from pwn import * 사용하면 log 객체가 전역 이름 공간에 삽입된다.

                                                                                               이걸 이용해 exploitation과정에서 상태 메시지 출력가능








'CTF > picoCTF' 카테고리의 다른 글

echo back  (0) 2019.01.11
rop chain  (0) 2019.01.11
authenticate  (0) 2018.12.28
keygen-me1  (0) 2018.11.18
assembly4  (0) 2018.11.18