profile image

L o a d i n g . . .

1. 문제

파일들을 확인해보니, hint와 attackme가 있다.

 

attackme를 실행해보니 입력받은 문장을 출력해주는 것 같다.

 

hint는 attackme에 대한 소스코드같다.

 

gets 함수를 통해 입력을 받는데, 입력값 검증을 하지 않아 버퍼 크기보다 더 많이 받을 수 있고, 따라서 bof가 발생한다.

아마 이번에도 aslr이 적용되서 주소들이 계속 바껴 nop을 줘서 풀면 될 것 같다.

 

 

2. 문제 해결 과정

주소가 계속 바뀌는 걸 보니 aslr이 적용된 듯하다.

 

그럼 버퍼와 ret 간의 offset과 버퍼의 시작 주소를 구해보도록 하자.

 

 

main을 디스어셈블한 모습

 

main 첫 부분과 gets 함수 호출 직전에 bp를 건다.

 

main 함수 첫 부분에서 bp가 걸렸다.

이때의 esp는 ret를 가르킨다.

 

gets 함수 호출 직전에 bp가 걸렸다.

gets 함수 호출 전에 eax를 push 하므로, eax에 buf의 시작주소가 들어있을 것이다.

 

offset : 268

버퍼와 ret 간의 offset은 268이다.

 

str + 0x500 : 0xbffff0d0

버퍼의 시작 주소 + 0x500 = 0xbffff0d0

 

 

payload는 11번과 유사하다.

ret 전까지를 dummy 값으로 채우고

뒤에 쉘코드를 넣고 쉘 코드 앞에 0x1000 만큼 nop을 준다.

그리고 ret에 buf+0x500에 해당하는 주소를 넣는다.

"A"*268 + (0xbffff0d0) + "\x90"*0x1000 + shellcode(41 byte)

 

 

3. Exploit

위와 같은 논리로 페이로드를 작성해보았다.

 

성공적으로 쉘을 획득한 모습이다.

 

Level13 password : "have no clue"

'Wargame > Hackerschool FTZ' 카테고리의 다른 글

[FTZ] 해커스쿨 FTZ level 14  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 13  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 11  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 10  (0) 2021.03.26
[FTZ] 해커스쿨 FTZ level 9  (0) 2021.03.26
복사했습니다!