※ SQL Injection
사용자가 입력한 값을 검증하지 않고 데이터베이스 쿼리 일부분으로 포함될 때 발생하는 취약점이다.
쿼리문을 참을 만드는 SQL Injection을 시도하면 데이터가 출력되게 된다.
※ Union SQL Injection
2개 이상의 쿼리를 요청하여 결과를 얻는 UNION 이라는 SQL 연산자를 이용한 SQL Injection 공격을 말하며 이 연산자를 이용하여 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 얻어낸다.
단, union를 사용할 때에는 컬럼의 갯수가 같아야 하고 데이터 형식도 같아야 한다.
Union select을 이용하여 DB명과 버전 등을 알아낼 수 있다. 관련 시스템 변수 및 함수는 아래와 같다.
database() : DB명을 알려주는 함수
user() : 현재 사용자의 아이디
system_user() : 최고 권한 사용자의 아이디
@@version : DB 서버의 버전
@@datadir : DB 서버가 존재하는 디렉터리
0' union select all 1,@@version,database(),user(),@@datadir,6,7#
이번에는 information_schema를 조회해보자.
0' union select all 1,table_name,3,4,5,6,7 from information_schema.tables#
이번에는 사용자의 민감 정보들을 가져와보자.
0' union select all 1,concat(id,login,password),3,4,concat(email,secret),6,7 from users#
여기서 concat함수는 여러 문자열을 하나로 합쳐주는 역할을 한다.
※ SQL Injection 대응방안
mysql_real_escape_string 함수를 사용하여 입력한 데이터를 필터링(특수문제들에 백슬래시를 붙여 SQL 문법으로 인식되지 않게 한다)
'모의해킹 > 웹해킹' 카테고리의 다른 글
[Web Hacking] bWAPP(비박스) iframe, OS Command, PHP Code, SSI(Server Side Includes) Injection (0) | 2020.03.25 |
---|---|
[Web Hacking] bWAPP(비박스) HTML Injection (0) | 2020.03.25 |
[Web Hacking] WebGoat Blind XXE 개념 (0) | 2020.03.23 |
[Web Hacking] WebGoat XXE Modern REST framework 문제풀이 (0) | 2020.03.23 |
[Web Hacking] WebGoat XXE 문제풀이 (2) | 2020.03.23 |