본문 바로가기

교육/Security

Day 77 (SQL injection)

반응형

<목차>

1. 실습 목표

2. 구성 환경

3. 실습 과정

4. 결과 분석


1. 실습 목표

SQL injection을 통해 무단으로 계정에 로그인하는 공격을 시도하고 이를 방지하기 위해 어떤 조치를 수행해야 하는지를 실습한다.

 

2. 구성 환경

  IP MAC 역할
Database_web_server 192.168.112.154 00:0c:29:1d:21:65 Database클라이언트
및 Web서버
Database_server 192.168.113.155 00:0c:29:d5:f7:18 Database서버
Attacker 192.168.111.26 00:0c:29:1c:c7:bc 공격자

 

3. 실습 과정

Database Client를 실행할 Web서버에서 Web page를 읽어오기 위해 php파일과 html파일을 생성한다.

[root@ap ~]# cat /app/apache/htdocs/conn.php
<?
  $server="oracle";
  $user_name = "php";
  $password = "php";
  $conn=oci_connect($user_name,$password,$server);
?>

접속할 Database Client의 서버 정보 및 접속 계정을 입력한다.

Database Server에서 SQL script를 실행한다.
계정에 권한이 제대로 설정되지 않는다면 계정 생성이 불가능 하다.
정상적인 계정 생성후 로그인 화면
게시물 작성 테스트 완료

 

4. 결과 분석

정상적인 로그인 화면이다.
해당 SQL injection공격에 성공하게 되면 계정만 일치하게되면 비밀번호와 관계없이 로그인이 수행되는 것을 볼수있다. 

위와 유사하게 계정과 무관하게 비밀번호만을 이용해 로그인이 수행되게 하는 것도 가능하다.

# vi view.php
...
  else {
    $sql="select id, pw from id where id = '$id' and pw = DBMS_CRYPTO.Hash(to_clob(to_char('$pw')),2)";
    // echo("sql = $sql<br>");
    $result=oci_parse($conn,$sql);
    $re=oci_execute($result);
    $row_num=oci_fetch_all($result,$row);
 ...

SQL injection공격이 가능한 코드를 보게 되면 id와 pw를 바로 sql문장에서 실행하기 때문에 id에 입력하는 텍스트로 SQL문장의 기능을 변조하는 것이다.

# vi view.php
...
else {
    $sql="select id, pw from id where id = :v_id and pw = DBMS_CRYPTO.Hash(to_clob(to_char(:v_pw)),2)";
    // echo("sql = $sql<br>");
    $result=oci_parse($conn,$sql);
    
    oci_bind_by_name($result, ":v_id", $id);
    oci_bind_by_name($result, ":v_pw", $pw);
    
    $re=oci_execute($result);
    $row_num=oci_fetch_all($result,$row);
 ...

SQL injection공격을 방지하기 위해 bind 변수를 사용하여 입력하는 텍스트가 SQL문장에서 즉시 실행되는 것이 아닌 DB안에서 정보를 확인하고 가져오는 것으로 변경한다.

bind변수를 사용하면 SQL injection에서 수행한 동일 계정으로 작성해도 접근이 허용되지 않는다.

반응형

'교육 > Security' 카테고리의 다른 글

Day 76 (Firewall)  (0) 2020.03.16
Day 74 (Web mitm)  (0) 2020.03.12
Day 74 (TCP Hijacking)  (2) 2020.03.12
Day 73 (DDoS)  (0) 2020.03.11
Day 73 (DoS Attack)  (0) 2020.03.11