본문 바로가기
Wargame/LOB

gate -> gremlin

by Anatis 2020. 8. 24.

LOB 첫 단계인 gate다. 

우선 ls 명령어로 확인해보니 gremlin과 gremlin.c가 있다.

 

buffer가 256Byte 이고 argc가 2 이상인지 확인하고,

취약한 함수인 strcpy() 에 buffer를 복사한다

 

strcpy 함수는 버퍼의 크기를 검증하지 않는다, 이로 인해 buffer의 크기인

256Byte 보다 훨씬 많은 데이터를 입력 할 수 있다.

 

buffer의 크기가 256Byte이니 쉘 코드를 buffer에 넣고 Return address 주소를 buffer 주소로 변조하여

쉘 코드를 실행 시키자.

 

권한 문제로 우선 gremlin을 똑같은 길이의 이름으로 복사한 후

gdb를 이용해 분석해보자.

 

main+3이 buffer 변수를 할당한다. 16진수로 0x100은 10진수 256이다.

 

 

strcpy 함수가 호출되고 난 후인 main+62에 break를 건다.

그리고 buffer + sfp(4) + ret(4) 만큼 실행한다.

 

esp를 확인해보면 0 xbffffad8이 buffer의 시작 주소이다.

시작 주소와 조금 떨어진 0 xbffffb28 주소로 Return address를 덮을 것이다

 

payload 구성 

payload는 NOP(100) + shellcode(25) + NOP(131) + SFP(4) + RET(4)

 

NOP sled를 이용하여 buffer에 쉘 코드, SFP, RET에  buffer의 주소를 채우고

실행을 하면 다음 스테이지의 쉘이 실행되었다.

 

Python으로 exploit code를 작성해보자.

gate -> gremlin

password : hello bof world

'Wargame > LOB' 카테고리의 다른 글

wolfman -> darkelf  (0) 2020.09.07
orc -> wolfman  (0) 2020.09.06
goblin -> orc  (0) 2020.09.06
cobolt -> goblin  (0) 2020.09.06
gremlin -> cobolt  (0) 2020.09.06

댓글