SQL Injection에 대한 설명은 앞선 페이지에서 했기 때문에 생략하기로 하고 바로 실습으로 넘어가도록 하겠다.
실습하기
bWAPP에서 SQL Injection(GET/Select) 버튼을 누른다. 그러면
다음과 같은 화면이 나온다.
이 페이지는 GET 메소드를 사용하기 때문에 URL 상에 변수가 보이는 화면이다.
이제 URL에서 movie 부분을 이용하여 SQL Injection을 시행하면 된다.
SQL Injection에 대한 자세한 방식은 https://tkdrms568.tistory.com/138
을 보면 된다.
먼저 MYSQL 버전등 기본정보부터 알아보자 movie= 뒤에 다음과 같이 입력하면 된다.
-> 0 UNION SELECT ALL null,database,@@version,@@datadir,null,null,null
입력하면 다음과 같이 출력된다.
database명과 version, mysql 디렉터리 위치까지 알 수가 있다.
이제 테이블 명을 알아보자
다음과 같이 입력하면 된다.
-> 0 UNION SELECT null, table_name, null, null,null,null,null from information_schema.tables
다음과 같이 입력하면
다음과 같이 테이블명이 나오는데 테이블명이 하나밖에 나오지 않는다. 이유는 이 페이지의 출력 값이 한줄만 나오는 페이지라서 데이터 베이스의 첫번째 테이블만 출력하기 때문이다.
이제 MYSQL DB의 기본테이블인 'MYSQL'과 'information_schema'에 포함되지 않는 테이블 스키마, 테이블명, 컬럼명을 알아보자
검색창에 다음과 같이 입력하자
0 UNION SELECT null,table_schema, table_name,column_name,null,null,null from information_schema.columns where table_shcema!= 'mysql' and table_schema!= 'information_schema'
입력하면
table name = blog, column name = id 인것을 알 수 있다.
난이도 - (medium, high)
medium, high 단계는 먼저 이 페이지가 어떻게 짜여졌는지부터 확인하면 된다.
var/www/bWAPP에 가서 sqli_2.php 파일을 확인해보면
다음과 같이 나오는데 난이도 (중)인 case "1" 경우 sqli_check_2 함수가 적용되어 있고
난이도 (상)의 경우 sqli_2-ps.php에 힌트가 있는 것 같다.
먼저 난이도 (중)은 functions_external.php에서 무슨 함수가 적용되어 있는지 확인이 가능한데 들어가서 확인해보면
mysql_real_escape_string 함수가 적용되어 있다. 이 함수는 SQL 명령문에서 사용되는 문자열에서 특수문자를 회피하는 함수이다. 쉽게 말해 특수문자 안먹히는 함수이다.
다음으로 (상)이 적용되어 있는 sqli_2-ps.php 함수에 들어가보면
다음과 같이 입력되어 있는데 특별한 우회 함수를 사용하지 않고 SQL 쿼리문을 호출하는 것이다.
sql_2-ps.php 페이지는 DB서 컬럼을 개별로 호출하고 연결하는 방식을 사용하여 SQL Injection을 대응한다.
솔직히 PHP를 공부해보지 않아서 코드가 잘 이해가 가지 않는다.
어쨌든 그렇기에 (중), (상) 단계에서는 SQL Injection 공격이 수행되지 않는다.
'웹해킹 > bee-box' 카테고리의 다른 글
SQL Injection(AJAX/JSON/JQuery) (0) | 2019.08.03 |
---|---|
SQL-Injection(POST/Select) (0) | 2019.08.02 |
SSI Injection (2) | 2019.08.01 |
OS Command Injection (0) | 2019.07.31 |
SQL Injection(Post/Search) (0) | 2019.07.30 |