LOB-goblin -> orc

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

Moderator: amesianx

Post Reply
KSH
Posts: 24
Joined: Thu Jul 21, 2016 5:39 pm

LOB-goblin -> orc

Post by KSH » Tue Aug 02, 2016 6:17 pm

LOB의 goblin -> orc를 풀어보았습니다.

1.홈디렉터리 파일 목록
1.png
1.png (4.17 KiB) Viewed 430 times
2.소스코드
소스.png
소스.png (14.38 KiB) Viewed 430 times
orc프로그램은 char **environ 전역변수를 선언한 뒤,
메인함수에서 인자를 받습니다.
40byte의 char형 배열 buffer, 그리고 int형 변수 i를 선언합니다.
그리고 인자의 수가 2개보다 작다면 프로그램을 종료합니다.

그 이후 for문을 돌려 환경변수를 0으로만듭니다.

argv[1][47]이 '\xbf'가 아니라면 프로그램을 종료하며,
bf가 맞다면 argv[1]의 내용을 버퍼에 넣은 뒤 출력합니다.

3.분석
disas-1.png
disas-1.png (31.27 KiB) Viewed 430 times
disas-2.png
disas-2.png (43.02 KiB) Viewed 430 times
main+3지점을 보면 스택에 0x2c(44)만큼의 공간을 할당한 것을 볼 수 있습니다.
따라서 스택의 구조는 다음과 같습니다.
<스택>
stack.png
stack.png (10.91 KiB) Viewed 430 times
이것으로 패이로드는 "A" * 44 + 환경변수의주소 이라고 생각했었습니다.
attack_fail.png
attack_fail.png (5.4 KiB) Viewed 430 times
그렇지만 실패했습니다.
이 프로그램에는 환경변수를 전부 0으로 만들어버리는 명령이 있기때문이었습니다.
이 문제는 환경변수가 아닌 메인함수의 두번째 인자를 이용해서 풀어내야합니다.

스택을 조회해보기 위해 '\xbf'를 48개 입력하여 프로그램이 종료되지 않도록 조건을 만족시켜준 뒤,
두번째인자로 50개의 A로 이루어진 문자열을 입력하였습니다.
stack_argv[2].png
stack_argv[2].png (30.51 KiB) Viewed 430 times
0xbffffbbf부터 A문자열이 시작하는 것으로 보아 어림잡아 0xbffffbc0부분에 NOP썰매를 실은 뒤,
쉘코드를 입력하고, 이 프로그램의 리턴주소에 0xbffffbc0을 입력한다면 공격은 성공합니다.

4.공격
attack_success.png
attack_success.png (8.51 KiB) Viewed 430 times
오크의 쉘을 획득하였고 패스워드를 얻었습니다.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest