기초적인 SQLi(SQL Injection) 공격 실습이다.
해결 방법으로는 인증우회 ,그리고 Blind SQLi 를 이용한 패스워드 획득 후 정상 로그인. 두가지 방법이 있다.
해당 문제의 메인페이지이다.
심플하게 Login 페이지만 존재한다.
Login페이지이다.
해당 문제 DB엔 guest, admin 계정이 있는데
admin계정으로 로그인에 성공하면 FLAG를 획득할 수 있다.
우회 구문은
=======================================================
userid : admin" --
password : 아무거나
userid : admin" or "1
password : 아무거나
=======================================================
등등이 존재한다. 우회구문은 다양하게 존재할 수 있다.
로그인 폼에 적용되어있는 SQL쿼리문은 아래와 같다.
=======================================================
SELECT * FROM users WHERE userid="{userid}" AND userpassword="{userpassword}";
=======================================================
우리가 입력한 값은 각각 {userid} , {userpassword} 부분에 들어가게 된다.
만약 첫번째 우회 구문을 입력하면 쿼리는
SELECT * FROM users WHERE userid="admin" --" AND userpassword="아무거나";
이렇게 되며, --(주석) 이후값은 없는 값 처리되어, userid="admin" 값만을 만족하는 결과를 불러오게 되어
admin 계정으로 로그인에 성공할 수 있다.
인증우회에 성공하여 admin 계정으로 로그인되었다.
따라서 FLAG가 출력된 모습이다.
Blind SQL Injection 방식으로, 쿼리에 대한 참/거짓반응을 보고 패스워드를 알아내는 방법도 있다.
다만 그 방법은,
패스워드의 첫글자가 a 인가? -> 예/아니오
이런 식의 쿼리를 매우 많이 반복해서 얻는 노가다 작업이기 때문에 자동화된 스크립트를 사용하는게 바람직하다.
'Hacking > [Web]DreamHack' 카테고리의 다른 글
DreamHack [CSRF-2] (0) | 2023.03.07 |
---|---|
DreamHack [xss-2] (0) | 2022.09.05 |
DreamHack [xss-1] (0) | 2022.08.04 |