우선 문제를 보니 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

음..문제를 보니 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

+ Recent posts