본문 바로가기

보안/DreamHack

Dreamhack out of bound

배열의 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