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 |
댓글