2021. 1. 14. 14:12ㆍ정보보안/웹 해킹
최근 BOB 3차경연이 너무 바빠 블로그에 아무것도 게시를 하지 못했는데
바쁘다고 아무것도 안올리면 안될것 같아
저번에 끝까지 풀었던 The Lord of the SQLI 문제에 대한 문제 풀이를 기록하며 다시풀어
SQL Injection 공격에 대한 내용을 다시 복기해보려고 한다 !!
우선 이 LOS 문제를 처음 접해본 사람을 위해 문제를 푸는 방법을 적어보자면
기본적으로 위 그림과 같이 URL에 파라미터를 입력해
.php 뒤에 ? 문자를 입력해 파라미터 값을 입력할 수 있다.
예를들어 php?id='X'& pw='Y'를 url에 넣으면 id, pw 파라미터에 입력이 가능하다.
Query를 확인해 보면 id와 pw가 각각 X, Y로 들어가는것을 확인할 수 있다.
우선 코드를 간단히 분석해봤을때, 눈에 가장 먼저 띄는건 preg_match 함수이다.
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
preg_match 함수는 php 에서 정규표현식을 이용할해 문자열을 찾는데 사용되는 함수로
preg_match(인자1, 인자2) 방식으로 사용할 때는 인자 2를 인자 1과 매치하고 매칭에 성공하면
1을 반환, 실패하면 0을 반환 합니다.
$_GET[id], $_GET[pw]를 통해 id파라미터와 pw파라미터를 가져와
/prob|_|\.|\(\)/i와 매칭시켰을때 존재할경우 exit함수를 통해 종료시키는 부분이다.
즉, 문제에서 입력값에 대한 필터링을 수행하고 있는 부분인데
현재 이 문제에서는 파라미터에 prob, _(언더바), .(점)이 있는경우 종료된다.
Query문은 $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 인데,
여기에서 $_GET[id], $_GET[pw]는 GET 메소드 방식으로 파라미터를 가져온다는 의미이며
이를 통해 prob_gremlin이라는 테이블에서 id, pw가 각각의 파라미터 입력값과 맞는 데이터가 있는 경우를
찾고있다.
만들어진 쿼리를 $result = @mysqli_fetch_array(mysqli_query($db, $query));를 통해 데이터베이스로
쿼리를 전송한 후 반환값을 $reslut에 저장하는데, mysqli_fetch_array를 사용하는 것으로 보아,
DBMS는 mysql을 사용하고 있는것을 확인할 수 있다.
마지막으로 문제를 해결하기 위해서는 if($result['id'])가 참 일 경우, 즉 $result['id']에 값이 들어 있을 경우
solve("gremlin"); 로 문제를 해결할 수 있다.
여기까지가 간단한 문제 소개였으며, 문제를 풀어보면
1번 문제는 위에서 살펴봤듯이, $result['id']에 값이 들어있는 경우 문제를 해결할 수 있다.
나는 id 파라미터값에 id=' or 1=1 %23을 입력해 문제를 해결했는데,
파라미터를 입력할 경우 쿼리문을 다음과 같다.
select id from prob_gremlin where id=' ' or 1=1 #' and pw=' '
보이는것처럼 주석 때문에 뒤의 패스워드를 확인할 필요가 없고,
1=1는 참이기 때문에 or 연산자를 통해 id=' ' or 1=1 가 참이 되며 select문이 수행될 것이고 $result 변수에
id값이 들어가게 되어 문제가 해결된다.
아마 내가 적은 답 말고도 정말 많은 답이 존재할텐데 내가 가장 먼저 떠올린 방법은 저 방법이다.
'정보보안 > 웹 해킹' 카테고리의 다른 글
LOS(The Lord of the SQLI) 4 - ORC (0) | 2021.01.14 |
---|---|
LOS(The Lord of the SQLI) 3 - GOBLIN (0) | 2021.01.14 |
SQLMAP (0) | 2021.01.04 |
Arachni(무료 웹 취약점 진단 툴) (0) | 2020.12.29 |
WPScan(Wordpress 취약점 진단 도구) (0) | 2020.12.28 |