포스팅을 하기 앞서 나는 Xshell을 사용해서 진행했다.
gate로 로그인하고 나서 ls 명령어로 파일 목록을 확인했다.
cat 명령으로 gremlin.c 파일 내용을 확인했다.
확인결과 256바이트 크기의 buffer가 있고, strcpy 함수를 사용해서 버퍼 오버플로우의 발생 가능성이 있다는 것을 알아냈다.
일단 실습을 진행하기 앞서 gremlin의 소유주는 gremlin이기 때문에 파일을 따로 복사해둬야 한다.
파일 복사를 완료했으면 gdb를 실행시킨다. 그리고 disas 명령으로 main의 어셈블리 코드를 확인한다.
아래 사진을 보면 main+54에 strcpy를 실행시키고, main+62에서 buffer[256]을 %eax에 복사하는 것을 확인할 수 있다.
buffer의 주소를 알아내기 위해 main+62에 breakpointer를 걸어두고 A를 256개 입력하겠다.
그 다음 $esp에서부터 메모리 100개를 16진수로 출력해보겠다.
실행결과 입력한 A 256개가 메모리에 잘 들어간 것을 확인할 수 있다. 그리고 buffer의 시작 주소가 0xbffff948인 것을 확인했다.
이제 NOP를 이용하여 공격 코드를 삽입해보겠다. 176바이트 NOP와 24바이트 크기의 쉘 코드를 합하면 200바이트다. 여기에 다시 NOP를 60바이트 채우고, 마지막 4바이트에 공격 코드의 시작 주소를 채운다.
그러면 위와 같이 다음 레벨로 갈 수 있는 정보를 확인할 수 있다.
성공!
'Study > System Hacking' 카테고리의 다른 글
[LOB] gremlin -> cobolt (0) | 2021.01.27 |
---|---|
[dreamhack] Linux Exploitation1 & Minigation Part 1 / Return Address Overwrite & NOP Sled (0) | 2021.01.27 |
[dreamhack] Memory Corruption - C (I) / 스택 버퍼 오버플로우 (0) | 2021.01.24 |
[OverTheWire] bandit / Level 6 -> Level 10 (0) | 2021.01.14 |
[달고나] 정리: 끝까지 (0) | 2021.01.13 |