코드를 보면 ultra argv hunter 라고 argv를 모두 초기화 시키는 부분이 추가되었다.

처음에는 어떻게 할지 모르겠어서 일단 코드를 보고 심볼릭링크가 필요하다는 것을 알았다.

gdb 권한문제 때매 파일 명 길이가 같은 새 파일에 복사 후 심볼릭 링크를 걸어주었다.

쉘코드는 이것을 사용하였다.

\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3

구글링을 통해 스택 레이아웃을 다시 한번 살펴보았다.

https://www.win.tue.nl/~aeb/linux/hh/stack-layout.html

마지막 부분에 program name이 남는 것을 볼 수 있었다.

혹시나 해서 한번 시도해보았다.


정말로 마지막 부분에 프로그램 이름이 남아있었다. 

그래서 이부분에서 nop 주소중 하나를 골라서 ret에 덮었더니 성공하였다.

Flag : shellcoder


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

[LOB] skeleton  (0) 2016.07.24
[LOB] troll  (0) 2016.07.17
[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17

소스가 많이 줄어들었다.

이번에는 \xff를 필터링 하고 있다.

 | argv[2] | argv[1] | argv[0] |

-->>> 

스택의 진행 방향이다.

argv[2]의 크기가 커질 수록 argv[1]는 더 낮은 주소에서 시작되게 된다.    

이렇게 3번쨰 인자값을 늘리면서 0xbffff 가 아닌 주소값을 찾아내었다.

Flag : music world


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

[LOB] skeleton  (0) 2016.07.24
[LOB] vampire  (0) 2016.07.23
[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17

코드를 보면 argv[0]을 초기화 시키는 구문이 사라지고, argv[1]을 초기화 시키고 있다.

따라서 argv[0]을 이용하여 문제를 풀어야한다.

이렇게 코드를 만들고, argv[0]의 주소를 구한다.

argv[0]에 쉘코드를 넣어야 하는데, 어떻게 넣어야 할까 하다 이름 자체를 변경하여 넣기로 하였다.

하지만 쉘코드 중간에는 "\x2f" 라는 부분이 있는데 이 부분은 디렉토리를 구분해주는 인자이기 때문에 계속 오류가 떴다.


그래서 다음과 같은 쉘코드를 사용하였다.

\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81


이렇게 복사후

쉘을 땄다.

Flag : aspirin

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

[LOB] vampire  (0) 2016.07.23
[LOB] troll  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17

+ Recent posts