오기로 풀어낸 문제이다.

쉘코드를 만들어주는 파이썬 모듈을 이용하면 편하다고 했지만
나는 내가 만들기 시작한거 내가 직접 만들어서 풀고싶었다.

밤을 새서 찾아보다가 자고 일어나니 리버싱에서 배웠던 기술이 생각이나 문제를 해결할 수 있었다.

asm 문제이다.



(asm)



문제 화면은 이렇다.


(문제 화면)



쉘코드를 만들으라는 것 같다.

문제는 flag 파일 이름이 너무 긴것...



(긴 flag)



sym 링크를 쓰고 싶었지만 chroot로 인해 링크 걸어봤자 소용 없었다.

즉 저 긴 문자열을 쉘코드 안에 넣어야한다는 것...
하도하도 생각하다가 리버싱 공부하면서 배운 기술이 생각났다.

바로 call !!
call 명령어로 아래로 쭉 내려간다 이때 rip를 스택에 저장하고 가는 걸 이용한느 것이다.


(구성한 모습)



뒤에는 문자열들을 입력해준다.

그렇게 되면 엉뚱한 명령어로 인식이 되는데 상관없다. 나는 call을 이용해 이녀석들을 내려갈거기 때문에



(call 사용)



call 을 사용해서 아래로 내려간다.

그런데 올리디버거에서 쓰는거랑 직접 gdb를 이용해 코드를 보니 조금 달라서 직접 asm 를 만들어 테스트해보았다.



(테스트)



테스트 하면서 안 사실!
e8 은 call 명령어 이고
뒤에 0d 만큼 떨어진 곳으로 call 하게 되는 것!

그렇다면 나는 e8 을 이용해 100 떨어진 곳으로 이동시킬 것이다.



(call binary)



그 후 살짝의 미스매치가 있으므로 Nop 코드로 쿠쎤을 깔아준다.



(쿠쎤)



그 후 pop rsi 를 시작하여 open, read, write 함수를 호출하는 코드를 붙이면 끝!




(테스트)




(테스트 성공)



테스트 성공! 기분이 좋다.



(공격도 성공)



공격도 성공하니 기분이 더더 좋다!

'WarGame > 500 Project' 카테고리의 다른 글

(58/500) pwnable.kr - fsb  (0) 2017.08.12
(57/500) pwnable.kr - ascii_easy  (2) 2017.08.09
(55/500) pwnable.kr - uaf  (0) 2017.07.12
(54/500) pwnable.kr - cmd1  (0) 2017.07.12
(53/500) pwnable.kr - blackjack  (0) 2017.07.12

+ Recent posts