(matrix 문제)
먼저 바이너리를 받아서 handray로 직접 c로 바꾸었다.
(main 중 구문)
위와 같이 main문에서 choice를 입력받고 이름을 입력받은 후, 해당 choice에 따라 함수가 분기되는 구문이 있었다.
(zion 함수)
(command injection 구상)
Zion을 실행시키기위해서는 choice가 0이 되어야하는데 0이 되면 입력을 다시 받으라고 한다. 정상적으로 쓰지 못한다. Zion을 실행시키기 위해 프로그램을 더 분석하던 중 zion으로 넘어갈 수 있을 만한 껀덕지를 발견했다.
(blue_pill 함수 중)
Neo에다가 뒤에 null을 붙이고 나의 명령 payload를 붙여서 보내야지하고 생각했다.(잘못된 생각이었고 방향을 바꾸었어야했다.)
(기대값)
A*B의 값이 위와같이 나와야한다.
(기대값 수치)
(matric 출력코드)
값을 해당 배열의 위치를 고려하여 출력하였다.
(exploit)
그렇게 해서 태어난 exploit코드
A의 값에는 해당값과 B에는 곱셈의 항등원으로 7x7 단위행렬을 넣어주어 곱셈의 결과가 기대되는 행렬이 나오도록 하였다.
(실패)
놓치고 있었던 것….
%s 또한 문자열을 인식하는거니까 name에 null까지만 넣는다…
즉, Neo뒤에 null을 추가하고 뒤에 payload를 넣는다는 생각은 너무 짧았었다..
(메모리 상황)
마침 name바로 위에 있으니 덮어 쓸 수 있지 않을 까 생각했다.
(입력값 검증 헛점)
맨 마지막의 개행문자를 null로 바꾸어준다. 그런데 딱 해당하는 길이가 넘어오면 걸리지 않았다.
즉 비교문에 =이 빠져 한바이트를 null로 덮어쓸수 있었던 것이고 zion을 실행시킬 수 있었다.
(exploit)
다시 작성한 exploit 코드
(쉘 획득)
*저건 플래그가 아니고 저 파일을 읽어야합니다 :)
'WarGame > 500 Project' 카테고리의 다른 글
(66/500) pwnable.kr - rsa_calculator (1) | 2018.03.10 |
---|---|
(65/500) pwnable.kr - echo2 (0) | 2018.03.08 |
(63/500) pwnable.kr - syscall (2) | 2017.10.22 |
(62/500) NOE.systems - BURYBURY (0) | 2017.10.01 |
(61/500) NOE.systems - double_input (0) | 2017.09.17 |