LOB darkelf Write-UP

2019. 7. 30. 23:43
728x90
728x90
728x90

LOB darkelf 풀어보자.

 

[사진 1]

이전 문제와 다른 점은 argv[0]의 길이가 77bytes가 아니면 프로그램을 종료한다. argv[0]은 파일명이다. 파일명을 77bytes로 바꿔야 하는데 방법은 다음과 같이 실행하면 된다.

".////////////////////////////////////////////////////////////////////////orge"

 

 

[사진 2]

위와 같이 python을 이용해 "." 1bytes, "/" 72bytes, "orge" 4bytes를 입력하면 된다. 이전 문제와 다른 점은 이 것 하나이기 때문에 이전 문제와 동일한 방법인 두 번째 인자 argv[2]에 shellcode를 입력하고 ret를 argv[2]로 변조하면 될 것 같다.

 

 

[사진 3]
[사진 4]

main 함수의 어셈블리어 코드를 보면 strcpy 함수를 호출하기 전에 ebp-0x28 주소를 eax 레지스터에 저장한다. 즉, 이 곳이 buffer 변수의 시작점이다.

 

 

[사진 5]

따라서 스택은 위와 같이 형성될 것이고, strcpy 함수로 argv[1] 값을 buffer 변수로 복사하므로 44bytes를 입력하면 ebp까지 변조할 수 있다.

 

 

[사진 6]

디버깅하기 위해 darkelf 파일을 다른 이름(krge)으로 복사하였다. gdb로 실행할 때도 python을 이용하여 파일명을 77bytes로 맞춰줘야 한다. 그리고 함수 프롤로그를 마치는 main+3에 브레이크 포인트를 설정하고 첫 번째 인자로 임의의 값 "\x90" 44bytes와 ret를 변조할 값 "ABCD"을 입력하고 두 번째 인자로 shellcode 용도의 50bytes를 입력하였다. 그러면 위와 같이 0xbffffbf6 주소부터 두 번째 인자가 저장되는 것을 확인할 수 있다.

 

 

[사진 7]

[사진 6]에서 확인한 두 번재 인자의 주소로 ret를 변조하고 두 번째 인자에 shellcode를 입력했지만 세그멘테이션 오류를 일으키고 종료된다. 변조된 ret 값이 정확한 주소가 아닌 것이다.

 

 

[사진 8]

두 번째 인자의 정확한 주소를 알기 위해 core 파일을 이용해야 한다. core 파일은 세그멘테이션 오류가 생기면 생성되는 파일인데 orge 파일은 권한 문제로 생성되지 않으므로 krge 파일을 이용해야 한다. 따라서 krge 파일에 세그멘테이션 오류를 발생시키면 core 파일이 생성된다.

그리고 -c 옵션으로 core 파일을 gdb로 볼 수 있다. 확인해보면 위와 같이 주소 0xbffffb01부터 두 번째 인자가 저장되는 것을 확인할 수 있다. 기존에 확인했던 주소와 차이나는 이유는 gdb를 통해 실행하면 gdb 환경변수 등과 같은 이유로 실제 주소와 차이가 나기 때문이다.

 

 

[사진 9]

따라서 페이로드는 위와 같이 임의의 값 "\x90" 44bytes를 입력하여 ebp까지 변조해주고 ret는 [사진 8]에서 확인한 정확한 두 번째 인자의 주소로 변조한다. 그리고 두 번째 인자로 shellcode를 입력해주는데 사용한 shellcode는 다음과 같고 setreuit 함수가 포함되었다.

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80

shellcode 앞에 nop(\x90)를 6bytes 입력해주었는데, 이는 명령어를 구분해주기 위함이다.

이대로 실행하면 orge 계정의 password를 확인할 수 있다.

728x90
728x90

'Wargame > LOB' 카테고리의 다른 글

LOB troll Write-Up  (0) 2019.07.31
LOB orge Write-Up  (0) 2019.07.31
LOB wolfman Write-Up  (0) 2019.07.30
LOB orc Write-Up  (0) 2019.07.30
LOB goblin Write-Up  (0) 2019.07.30

+ Recent posts