gremlin으로 로그인한 후 ls로 남은 파일을 보면
cobolt 파일이 보인다
예상대로 cobolt 실행파일 권한은 코볼트한테 있다. gremlin은 cobolt의 쉘을 따고 싶어한다!
일단 cobolt.c를 열어 코드를 보면
버퍼의 크기가 쉘코드를 넣기엔 작다는것 외엔 LOB 1번문제와 같다.
쉘코드가 25바이트니 버퍼+sfp에 다 못넣으니 그냥 쉘코드의 위치를 ret 아래에 넣으면 된다. 굳이 위에 넣을 필요는 없으니..
그럼 cobolt 실행시 인자를 줄때
의미없는 문자를 20바이트 넣고 + 쉘코드의 주소를 넣고(4바이트) + 쉘코드(25바이트) 를 넣으면 될듯하다
cobolt랑 똑같은놈인 sagico 파일을 만들자 (cp cobolt sagico 하면됨)
그리고 sagico파일을 실행하며 인자를
'\xbb'*20 - #buffer+sfp공간을 bb로 채움
'\xaa'*4 - #return adress공간을 aa로 채움
'\xcc'*25 - #shell code공간을 cc로 채움
이렇게 보기좋게 채워주자
역시 core가 생긴다.
이제 gdb로 이 core를 뜯어보면
낄낄...편안하다...
계획대로 bb가 20바이트, aa가 4바이트, cc가 25바이트로 나란히 쭈욱 나타남을 볼 수 있다.
쉘코드가 시작되는 주소를 리턴어드레스에 넣어야하니 위 사진에서 cc, 노란부분이 시작하는 주소다.
즉 0xbffffae0이 되겠다. (little endian 방식으론 \xe0\xfa\xff\xbf)
그럼 이제 해야할건 너무 분명하다. 위의 aa자리엔 쉘코드의 시작주소인 \xe0\xfa\xff\xbf를, cc자리엔 쉘코드(25바이트)를 넣어주면 된다.
코볼트로 둔갑 성공~
'Pwnable > S! Wargame' 카테고리의 다른 글
sf3 - my solution (0) | 2022.09.13 |
---|---|
sf2 - my solution (0) | 2022.07.19 |
oneshot - my solution (0) | 2022.07.14 |
sf1 - my solution (0) | 2022.05.28 |
LOB 1 - my solution (0) | 2022.05.26 |
댓글