

배열의 index값에 대한 아무런 제한이 없기 때문에 out of bound 취약점이 발생한다.심지어 ASLR은 적용이 되어있기에 실행 시 마다 스택, 라이브러리등의 주소는 랜덤화가 되지만, PIE가 적용되어있지는 않기 때문에 해당 바이너리가 실행되는 메모리 주소는 바뀌지 않는다.
따라서 command[idx]가 "/bin/sh"를 가르키도록 페이로드를 작성하면 된다.

name배열이 command 배열보다 76바이트 위에 존재하는 것을 알 수 있고 32bit 아키텍처이므로 주소를 나타내는 포인터 자료형의 크기는 32bit 즉, 4바이트이다. 따라서 command[19]는 name 배열의 시작주소를 가르키게 된다.
근데 무작정 name 배열에 '/bin/sh'를 넣으면 안되는게 command는 포인터배열이고 name은 그냥 배열이기 때문이다. 따라서 name 배열에 '/bin/sh\x00'을 넣되, 이후 name배열의 주소 뒤에 패킹해서 붙여주고 command 배열의 index를 19에서 21로 늘려주면 command[21]은 name배열의 시작 주소를 가리키고 name배열의 시작 주소에는 '/bin/sh\x00'이 있기에 쉘을 얻을 수 있다.

페이로드는 다음과 같고

쉘을 얻은 것을 볼 수 있다.
'보안 > DreamHack' 카테고리의 다른 글
| Dreamhack basic_exploitation_002 (0) | 2024.12.04 |
|---|---|
| Dreamhack Format String Bug (0) | 2024.12.04 |
| Dreamhack hook (0) | 2024.10.28 |
| Dreamhack oneshot (0) | 2024.10.18 |
| Dreamhack fho (0) | 2024.10.14 |