telnet으로 접속해

open -l gate [주소]를 입력해주면 된다.

'war game > LOB' 카테고리의 다른 글

LOB-level20(remote BOF)  (0) 2019.07.04
LOB-level19(fgets + destroyers)  (0) 2019.07.04
LOB-level18(plt)  (0) 2019.07.03
LOB-level17(function calls)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03

이번 문제는 remote bof이다. 거의 처음 접해본 문제여서 이것 저것 찾아보느라 오래걸렸다. 문제를 보면 recv에서 bof가 일어나는것을 볼 수 있다. 공격방법은 [buffer+44]+[ret]+[nop]+[shellcode]이다.

다만 서버에 ret주소를 모름으로 brute force를 사용해야한다.

맥북이 먼가 잘 안되서 워룸컴으로 진행했다.

우선 해당 터미널의 주소를 파악하고

nc로 4444포트에 접속해 놓는다.

워룸컴에는 peda가 있음으로 이용해 쉘코드를 만들고

페이로드를 작성한 뒤

실행시켜주면

아까 열어둔 포트에서 연결이 되었다고 뜬다~

 

https://d4m0n.tistory.com/93

 

[Linux/x86] Shell Reverse TCP Shellcode

Shell Reverse TCP Shellcode 이번 글에서는 Shell Reverse TCP Shellcode를 만들어 볼 것이다. Shell Reverse TCP Shellcode는 Local이 아닌 Remote 환경에서 대상 시스템의 쉘을 탈취하고자 할 때 사용된다. Rem..

d4m0n.tistory.com

TCP Shellcode 만드는 법

https://eunice513.tistory.com/275

 

[LOB] Level20: xavius → death_knight [完]

death_knight /* The Lord of the BOF : The Fellowship of the BOF - dark knight - remote BOF */ #include #include #include #include #include #i..

eunice513.tistory.com

peda로 쉘코드 만드는 법

 

https://k1rha.tistory.com/entry/Hackerschool-몽이형이-쓰신-리모트-버퍼오버플로우-총-정리remote-buffer-overflow-theory-by-mongil

 

Hackerschool 몽이형이 쓰신 리모트 버퍼오버플로우 총 정리(remote buffer overflow theory by mongil)

리모트 버퍼 오버플로우 총정리 made by Hackerschool_mongil 이번 WGD에선 데몬 형태로 작동하는 네트워크 프로그램에 대한 버퍼 오버플로우 공격 기법들에 대해 학습해 보도록 하겠다. 지금까지 우리는 로컬 영..

k1rha.tistory.com

remote bof 총정리

'war game > LOB' 카테고리의 다른 글

mac OS LOB실행  (0) 2019.07.04
LOB-level19(fgets + destroyers)  (0) 2019.07.04
LOB-level18(plt)  (0) 2019.07.03
LOB-level17(function calls)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03

음 해당 문제를 보니 이번에는 stack, 코드영역 둘다 ret에 못 쓰고, 심지어 library를 사용해도 leave, ret를 만나면 나가리 되는 것 같다.

library함수중 leave, ret가 없는 함수를 찾거나 해야할 텐데... 고민하던중 이번에는 이전처럼 argv로 인자를 받지도 않고, gets가 아닌 fgets로 받는 것을 볼 수 있다.

보니 stdin에 입력받아 buffer에 씌우는 것 같은데 그럼 stdin주소를 보면 넣은 인자값이 있지 않을까 생각했다.

main+6부분이 stdin부분을 받는 것 같다. bp를 걸고 확인해 보니

저렇게 들어가 있다. 아마 아직 인자를 안받아서 텅 비어있는 듯 하다.

인자를 받으니 stdin에 공간이 생겼다.

확인해보니 0x40015000에 인자를 받아준다.

그럼 쉘코드를 저곳에 넣고 ret를 저 주소로 해주면 되지 않을까..?

성공~

'war game > LOB' 카테고리의 다른 글

mac OS LOB실행  (0) 2019.07.04
LOB-level20(remote BOF)  (0) 2019.07.04
LOB-level18(plt)  (0) 2019.07.03
LOB-level17(function calls)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03

우선 문제를 보니 ret자리에 strcpy의 주소를 맞춰줘야하고, strcpy의 ret는 AAAA로 초기화해준다.

공격은 [system주소]+[AAAA]+[/bin/sh주소]+[nop*35]+[strcpy주소]+[AAAA]+[buf+48주소]+[buf시작주소]로 하면 될 것 같다.

 

음 실패. 역시 주소가 안맞나보다...

주소를 확인해보면 buf시작주소 = 0xbffffbb0, buf+48주소 = 0xbffffbe0이다.

가볍게 해결~

'war game > LOB' 카테고리의 다른 글

LOB-level20(remote BOF)  (0) 2019.07.04
LOB-level19(fgets + destroyers)  (0) 2019.07.04
LOB-level17(function calls)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03
LOB-level15(no stack, no RTL)  (0) 2019.07.02

일단 main문 길이보고 한번 놀라고 이것저것 존재하는 함수보고 한번 더 놀랐다.  느낌을 보니 맨처음 ret주소는 DO를 가르켜야 된다 했으니 그 뒤로 계속 함수를 호출해주면 될 것 같다.

nm명령어를 써주면 각 함수의 주소가 순차적으로 나온다. 이제 공격로드를 작성해보자.
[버퍼44]+[DO]+[GYE]+[GUL]+[YUT]+[MO]+[/bin/sh]

역시 저렇게 넣으면 안되는 듯 하다.

/bin/sh주소를 찾아주자. 코드를 보면 버퍼 48부터 100자리까지 지우지 않는 것을 볼 수 있다.

A로 ret를 덮고, 인자 받을 부분을 B로 채운 뒤 C를 잔뜩 넣으니 이런식으로 나온다.

/bin/sh의 주소는 0xbffffc38이겠다.

잉 아니네.

적게 채워주면 주소가 달라지나보다. 

0xbffffc58로 다시 가면~

성공~

'war game > LOB' 카테고리의 다른 글

LOB-level19(fgets + destroyers)  (0) 2019.07.04
LOB-level18(plt)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03
LOB-level15(no stack, no RTL)  (0) 2019.07.02
LOB-level14(RTL2, only execve)  (0) 2019.07.02

라이브러리도, 스택도 사용할 수 없다. fake ebp로 풀어보자.

buf 주소를 찾고.

[쉘코드]+[nop]+[쉘코드-4]+[leave코드주소]로 공격하자

실패.

core을 분석해보니 주소가 다르다.

성공~

최종 공격로드는 [쉘코드주소]+[쉘코드]+[nop]+[buf-4]+[leave코드주소]였다.

'war game > LOB' 카테고리의 다른 글

LOB-level18(plt)  (0) 2019.07.03
LOB-level17(function calls)  (0) 2019.07.03
LOB-level15(no stack, no RTL)  (0) 2019.07.02
LOB-level14(RTL2, only execve)  (0) 2019.07.02
LOB-level13(RTL1)  (0) 2019.07.02

음..문제를 보니 buffer을 지우고, 스택부분도 사용할 수 없게했다. 거기에 ret에 바로 system주소를 걸 수 없어서 코드부분을 이용해야겠다.

일단 코드를 disas 하면

\x80으로 시작하는 것을 알 수 있다. ret를 이용해 ret위치에서 한번더 ret를 하고 그 뒤에 system함수를 놓아 쉘을 따면 될 것 같다.

성공...ㅎ

'war game > LOB' 카테고리의 다른 글

LOB-level17(function calls)  (0) 2019.07.03
LOB-level16(fake ebp)  (0) 2019.07.03
LOB-level14(RTL2, only execve)  (0) 2019.07.02
LOB-level13(RTL1)  (0) 2019.07.02
LOB-level12(sfp)  (0) 2019.07.02

우선 argv[1]의 44번째 부터의 주소를 execve_addr과 같도록 맞춰주고, execv함수의 인자에 /bin/sh를 넣어주거나, system을 다시 호출해서 해결하는 두가지 방법이 있을 것 같다.

 

execve 주소를 찾아주고

system 주고소 찾아준 뒤

/bin/sh주소 찾은 뒤

실패... 찾아보니 \0a가 \x00으로 들어간다더라. 따라서 밖을 "로 감싸줘야한다.

해결~

'war game > LOB' 카테고리의 다른 글

LOB-level16(fake ebp)  (0) 2019.07.03
LOB-level15(no stack, no RTL)  (0) 2019.07.02
LOB-level13(RTL1)  (0) 2019.07.02
LOB-level12(sfp)  (0) 2019.07.02
LOB-level11(stack destroyer)  (0) 2019.06.30

이번에도 strcpy에서 인자 검사를 해주지 않는데, rtl을 이용해 문제를 풀라 제시했기에 rtl을 이용해보려한다.

system 주소를 구하고, 

/bin/sh가 들어있는 주소를 구하고

주소를 뽑아준 뒤

성공ㅎ

참고로 쉘코드는 [버퍼]+[system주소]+[system ret]+[system 인자]순으로 넣었다,

'war game > LOB' 카테고리의 다른 글

LOB-level15(no stack, no RTL)  (0) 2019.07.02
LOB-level14(RTL2, only execve)  (0) 2019.07.02
LOB-level12(sfp)  (0) 2019.07.02
LOB-level11(stack destroyer)  (0) 2019.06.30
LOB-level10(argv hunter)  (0) 2019.06.30

해당문제는 스택프레임포인터 오버플로우문제인것 같다. 보면 provlem_child에서 인자를 하나 더 받기에 sfp를 조작할 수 있고, 조작된 sfp는 leave를 할때 ebp를 다른 곳으로 튀게 만들어 쉘을 딸 수 있을 듯 하다.

buf 시작주소를 확인해주고

쉘코드 넣고 잘 들어간거 확인하고,

했는데 안되서 core을 분석했다.

주소가 다르게 들어가있다...;;

해결..ㅎ

'war game > LOB' 카테고리의 다른 글

LOB-level14(RTL2, only execve)  (0) 2019.07.02
LOB-level13(RTL1)  (0) 2019.07.02
LOB-level11(stack destroyer)  (0) 2019.06.30
LOB-level10(argv hunter)  (0) 2019.06.30
LOB-level9(check 0xbfff)  (0) 2019.06.29

+ Recent posts