SQL Injection
SQL Injection은 1998년에 phrack에 기법이 소개된 이후로 언제나 owasp 상위권을 차지하고 있으며, 수 많은 웹 사이트에서 수많은 개인정보를 유출하는데 사용된, 또는 사용되고 있는 기법이며, 웹 어플리케이션에서 일어나는 취약점 중 가장 강력한 취약점 중 하나이다.
PHP, JSP등의 웹 프로그램에서 DB서버로 전달되는 Query를 특수문자(싱글쿼터, 백슬래쉬 등)을 이용해 공격하는 것을 말한다.
php 소스를 확인해 보니 가장먼저 10번째 줄의 소스가 눈에 띈다.
if($result['id']) solve("gramlin");
php 소스에 대해 자세히는 모르지만, 대충 추론해보자면, "Id의 결과가 있으면 gremlin 문제는 해결된다"라는 의미인 것 같다.
그러면 Id만 맞으면 풀리는 것인가? 라는 생각이 들때쯤, 7번째 줄이 눈에 들어왔다.
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
쿼리문을 확인해보면, "입력한 id와 pw가 참이여야 한다."
따라서 id만 입력한다고 되는 것이 아니라 그에 따른 패스워드도 맞아야 한다는 것이다.
이제 Id와 pw에 아무런 값이나 삽입해보자.
id와 pw 모두 1을 넣었다. 당연히 맞을리가 없다..
id='1' and pw='1'부분을 보면, id='1'이 참이고, pw='1'이 참이어야 한다.
그렇다면, pw를 모르는 상태에서 pw를 참을 만들어야 된다는 말인 것이다.
이 때 sql의 가장 기본적인 구문이 생각이 났다.
pw='1' or '1'='1'
이렇게 삽입해주면 pw는 '1'이 거나 '1'='1'이라는 말이된다.
pw가 '1'가 아니라는 것은 알고 있다. 하지만, or를 통해 뒷부분 '1'='1' 부분이 무조건 참으로 떨어지기 때문에 결과는 참이 된다.
따라서 pw를 모르더라도 로그인이 가능해지는 것이다.
해당 값을 삽입해보자.
GREMLIN Clear!라는 문구가 출력되는 것을 확인할 수 있다.
지금 사용한 sql쿼리문은 sql injection의 가장 기본이 되는 내용이다.
실제 모의해킹을 할 때 sql injection이 적용되는가 테스트할 때 1' 개 '1'='1를 입력해 확인하기도 한다.
또 다른 방법으로는,
소스코드를 좀 더 자세히 살펴보면, config.php를 include하는 것을 확인할 수 있다.
느낌적으로 config.php안에 login_chk()함수와 dbconnect()함수가 포함되어 있을 것 같다는 것을 느꼈다.
또한 preg_match()함수도 포함되어 있을 것 같다. greg_match()함수는 문자열을 입력하면 검사해 1또는 0을 반환한다.
처음으로 풀은 방법에서도 말했듯이 "id의 결과가 있으면 Gremlin이 풀리게 된다"
따라서 id 값만 넣고, pw값을 넣지 않아도 결과를 가져올 수 있도록 우회할 수 있을 것이다.
기초적으로 url인코딩을 알고 있어야 한다.
싱글쿼터(')는 %27, 공백은 %20, #은 %23dlek.
또, 오라클기반의 주석처리방법은 '#', Mysql기반의 주석처리방법은 '--'이다.
id값은 기본적으로 많이 사용하는 계정인 admin을 사용해보자 pw값은 주석처리를 해보겠다.
(보통 admin, administrator, master, webmaster 등 계정으로 공격을 시도한다)
id값에 admin%27--%20만 삽입했다.
id를 모른다고 해도 첫번째 풀이에서 pw 값을 무조건 참으로 만든 것처럼 id값을 무조건 참으로 만들어도 풀 수 있다.
id 값 : %27or%20%271%27=%271%27--%20('or '1'='1'--)
'Webhacking' 카테고리의 다른 글
[LOS] Level 6 darkelf 문제풀이 (0) | 2019.05.31 |
---|---|
[LOS] Level 5 wolfman 문제풀이 (0) | 2019.05.31 |
[LOS] Level 4 Orc 문제풀이 (0) | 2019.05.31 |
[LOS] Level 3 goblin 문제풀이 (0) | 2019.05.24 |
[LOS] Level 2 Cobolt 문제풀이 (0) | 2019.05.24 |