-
SQL-Injection 정리(1)Web 2020. 3. 19. 19:01
기본적인 에러기반 SQL Injection --> ' or '1=1
이것을 기본으로 필터링 또는 우회해서 문제를 푼다.
ex) select id from test where id='{$_GET[id]}' and pw='{$_GET[pw]}'
현재 GET 방식으로 파라미터를 전달하고 있다.
url이 ~~.php?id=admin&&pw=admin
이라 하면 sql 구문은 select id from test where id='admin' and pw='admin' 으로 삽입이 되어진다.
여기에 아무 필터링이 없다는 가정하에
~~.php?id=admin&&pw=admin' or '1=1 을 입력하게 되면
select id from test where id='admin' and pw='admin' or '1=1' 으로 sql구문이 들어가게 된다.
pw='admin' or '1=1' 에서 결과 값이 참이 되어 admin으로 로그인이 되는것이 아니라,
id='admin' and pw='admin' 구문이 거짓으로 되고 그 뒤에 or '1=1'이 들어가 (거짓or참 = 참)이 되어서 결과값이 참이 되어 admin으로 로그인이 되는것이다.
los.rubiya.kr 1번문제 gremlin을 보면
<?php include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database! if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("gremlin"); highlight_file(__FILE__); ?>
로그인 인증 부분에서 id($result['id']) solve("gremlin");
으로 result에 id값이 존재한다면 무조건 풀리게 된다.
'Web' 카테고리의 다른 글
웹 취약점 별 어떻게 공격해야 할까? (0) 2020.12.20 SQL Injection 정리 3 (0) 2020.12.18 XSS - 정리 Reflected (1) (0) 2020.07.09 Zh3r0 CTF - WriteUp (0) 2020.06.17 SQL-Injection (2) 정리 (from_rubiya.kr) (0) 2020.03.20