오기로 풀어낸 문제이다.
쉘코드를 만들어주는 파이썬 모듈을 이용하면 편하다고 했지만
나는 내가 만들기 시작한거 내가 직접 만들어서 풀고싶었다.
밤을 새서 찾아보다가 자고 일어나니 리버싱에서 배웠던 기술이 생각이나 문제를 해결할 수 있었다.
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 |