[OverTheWire (Vortex)] level1 -> level2

해킹대회 문제 풀이 연습장소

Moderator: amesianx

Post Reply
gee8195
Posts: 34
Joined: Thu Jul 21, 2016 5:12 pm

[OverTheWire (Vortex)] level1 -> level2

Post by gee8195 » Tue Oct 25, 2016 8:41 pm

1.png
1.png (14.42 KiB) Viewed 334 times
문제의 소스 코드입니다.
첫줄에 조건문에 ptr과 0xff000000 를 and연산했을때 0xca000000 와 비교하고 참이면 권한을 주는것 같습니다.
print함수는 buf에 저장된 값을 아스키값으로 출력해줍니다.
메인함수 에서 switch 구문을 보면.. 입력한 값이 "\n"인 경우에는 print함수를 호출하고,
"\\"인 경우에는 ptr--로 1byte씩 주소가 내려갑니다. 그리고 이 두가지 케이스를 제외한 값을
입력할 경우에는 e()를 실행한뒤, ptr의 주소가 buf + sizeof(buf)보다 크면 반복문으로 돌아가고,
아니라면 prt++[0] = x; 구문으로 메모리에 입력을 할 수 있습니다.
그리고 다시 반복문으로 돌아간뒤 "\n","\\"를 제외한 값을 입력하면 default로 가서 e()를 수행하고,
조건문이 참이되면 권한을 실행합니다.

결론은 "\\"를 사용해서 ptr의 초기주소까지 접근한뒤 "\xca"를 써주면 권한을 실행할 수 있을것 같습니다.


2.png
2.png (77.65 KiB) Viewed 334 times
일단 현재 ptr은 buf의 가운데를 가리키고 있을거같아서 한번 실행해보고 확인해 봤습니다.
예상대로 중간부터 입력되는것을 확인할 수 있었습니다.


3.png
3.png (69.88 KiB) Viewed 334 times
"\\"를 얼마나 써야할지 알아보기 위해 gdb에서 and연산하는 부분에 브레이크 포인트를 걸고 주소를 확인해 봤습니다.


4.png
4.png (30.16 KiB) Viewed 334 times
해당 위치에 "\xca"를 쓰위해선 리틀엔디언 방식인걸 감안해서 261만큼 사용하면 원하는 위치에 입력할 수 있을것 같습니다.


5.png
5.png (33.45 KiB) Viewed 334 times
바로 페이로드를 실행해보면
(python -c 'print "\\"*261 + "\xca" + "anything you want"';cat)| ./vortex1
권한 획득한걸 확인할 수 있습니다.
문제에 힌트로 EOF 를 신경쓰라했는데 습관적으로 cat을 붙이다보니 그냥 통과해버렸습니다.
cat을 쓰는 이유는 표준입력한 값을 파이프로 넘겨주게되면 실행된 쉘에 EOF를 주게되고, 쉘이 종료됩니다.
이에 cat을 써주면 cat의 작동이 끝나기 전까지는 쉘이 종료되지 않기때문에 사용하게 되는 것입니다.
이문제는 그걸 물어보는게 아닌가 싶습니다.


6.png
6.png (29.54 KiB) Viewed 334 times
vortex는 문제가 있는 디렉토리와 패스워드가 있는 디렉토리를 알아서 찾아풀라는 느낌입니다.
홈디렉토리에 아무것도 없어서 살짝 당황했습니다.
문제는 /vortex 디렉토리에 있고, 패스워드는 /etc/vortex_pass 디렉토리에 모아놓은것 같습니다.

Post Reply

Who is online

Users browsing this forum: No registered users and 17 guests