[LOB] level4, goblin -> orc 풀이
- 시스템해킹/LordOfBof
- 2020. 4. 4. 19:11
LOB, goblin -> orc 문제 확인
strcpy 취약점을 이용해 bof를 하는 문제인데 앞에 2개정도 고려할 요소가 생겼다. 첫번째는 egghunter로 환경변수를 전부 초기화하고 있기 때문에 환경변수를 사용하지 않고 문제를 풀어야 한다는 것이고 두번째는 argv의 48번째 값이 \xbf여야 한다는 것이다.
LOB, goblin -> orc 풀이
main문을 gdb로 확인해주면 일단 dummy값은 없는 것으로 확인되기 때문에 스택 상황은 아래와 같다.
i | buffer | SFP | RET |
4 | 40 | 4 | 4 |
환경변수를 사용하지 못하기 때문에 gdb상에서 입력값이 저장되는 버퍼 주소값을 알아낼 필요가 있다. strcpy 바로 뒤인 main+194에 bp를 건다.
그리고 48번째 바이트가 \xbf가 아니면 프로그램이 조건문에서 종료되기 때문에 조건을 맞춘 인자값을 넘겨주고 실행시킨다. 대략 \xbffffab4 에서부터 입력값이 저장되고 있는데 당연하게도 랜덤스택일 것이다.
일단 이 문제는 buffer부터 RET 앞에 44바이트(buffer + SFP) 밖에 없기 때문에 많은 nop을 채울 수가 없다. 따라서 이런 경우 RET 뒤에 'nop+쉘코드'를 넣어주고 RET에 덮어쓸 값에 RET 뒤의 적당한 주소를 넘겨주는 방식을 사용할 수 있다.
i | buffer | SFP | RET | ||
4 | 40 | 4 | 4 | ||
dummy | RET 뒤의 적당한 주소 | nop | shellcode |
LOB, goblin -> orc 익스플로잇
난 적당한 주소로 \xbffffb54 를 사용했다. 이 값을 사용하면 어차피 자동으로 48번째 바이트가 \xbf가 되기 때문에 프로그램이 조건문에서 종료되는 일은 없고, 적당한 값으로 리턴되어 nop을 타고 쭉 내려가다가 쉘코드를 만나면 쉘이 실행되기 때문에 아래와 같이 쉘을 획득할 수 있게된다.
'시스템해킹 > LordOfBof' 카테고리의 다른 글
[LOB] level6, wolfman -> darkelf 풀이 (0) | 2020.04.04 |
---|---|
[LOB] level5, orc -> wolfman 풀이 (0) | 2020.04.04 |
[LOB] level2, gremlin -> cobolt 풀이 (0) | 2020.04.04 |
[LOB] level3, cobolt -> goblin 풀이 (0) | 2020.04.04 |
[LOB] level1, gate -> gremlin 풀이 (0) | 2020.04.03 |