exploit-exercise Fusion level-00

2018. 8. 10. 19:55WarGame/exploit-exercises.com-fusion

맞습니다.. 다음과제는 exploit-exercise funsion이였습니다 :)


lob와 비슷해보이는데 조금더 리얼한 코드같습니다.


코드를 먼저확인하죠.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "../common/common.c"    
 
int fix_path(char *path)
{
  char resolved[128];
  
  if(realpath(path, resolved) == NULL) return 1; // can't access path. will error trying to open
//취약점 각 becuase memcmp
  strcpy(path, resolved);
}
 
char *parse_http_request()
{
  char buffer[1024];
  char *path;
  char *q;
 
  // printf("[debug] buffer is at 0x%08x :-)\n", buffer); :D
 
  if(read(0, buffer, sizeof(buffer)) <= 0) errx(0, "Failed to read from remote host");
  if(memcmp(buffer, "GET ", 4) != 0) errx(0, "Not a GET request");
 
  path = &buffer[4];
  q = strchr(path, ' ');
  if(! q) errx(0, "No protocol version specified");
  *q++ = 0;
  if(strncmp(q, "HTTP/1.1", 8) != 0) errx(0, "Invalid protocol");
 
  fix_path(path);
 
  printf("trying to access %s\n", path);
 
  return path;
}
 
int main(int argc, char **argv, char **envp)
{
  int fd;
  char *p;
 
  background_process(NAME, UID, GID); 
  fd = serve_forever(PORT);
  set_io(fd);
 
  parse_http_request(); 
}
cs


저기 realpath가 취약점인 것 같습니다 왜냐하면 상대경로를 절대경로로 바꾸어주는 함수라고 나와있는데 그 과정에서 memcmp가 들어가기때문에 bof가 일어날 가능성이 큽니다.


코드를 조금더 살펴보면 맞춰줘야할 조건이 2개가 있습니다.

1. payload안에 "GET "이 들어가야한다

2. payload안에 "GET " 후에 " HTTP/1.1 "이 들어가야한다 입니다.


페이로드는 생각보다 간단해 보입니다.


"GET " + dummy[n] + ret + " HTTP/1.1 " + nopsled + shellcode


저는 pwntools를 이용해서 payload를 작성하려고 합니다.

쉘코드는 단순한 쉘코드가아닌 리모트 쉘코드를 이용해야하고,

ret를 버퍼 + x로 하여서 뒷부분으로 바로 보내줍시다.


저희가 알아내야할 것들은 dummy의 갯수입니다.

노가다로 brutforce를 해도 상관은 없지만.. 그래도 구해봅시다 (grin)



lea -0x88, $eax이부분이 버퍼의 크기입니다.

0x88 = 136이고 sfp까지 덮어줘야하니 140byte입니다.


그래서 처음에는 dummy값을 140을 주었지만 쉘을 획득하지 못하였습니다.

오류를 찾아보니 realpath에는 절대경로니까 맨 앞에 "/"이 붙어서 1byte를 가져간다고 추론하고(몰라서 물어봤습니다 ㅎ)

더미를 139byte를 주었습니다.


페이로드입니다.



쉘을 얻었습니다 :)


'WarGame > exploit-exercises.com-fusion' 카테고리의 다른 글

exploit-exercise Fusion level-02  (0) 2018.08.14
exploit-exercise Fusion level-01  (0) 2018.08.12