bWAPP A1 SQL Injection (SQLite)

2020. 10. 28. 23:23
728x90
728x90
728x90
 

itsecgames.com

 

www.itsecgames.com

[사진 1]
[사진 2]

mysql이 아닌 SQLite DB를 사용하는 게시판 SQL Injection 문제이다. 공격 방법은 아래 포스트와 같다. 사용되는 명령어만 SQLite에 맞게 수정하면 된다.

 

* bWAPP A1 SQL Injection (GET/Search) Write-up

 

bWAPP A1 SQL Injection (GET/Search)

itsecgames.com www.itsecgames.com SQL Injection 문제이다. GET Method로 파라미터를 전달한다. 위와 같이 Title을 검색하여 해당 타이틀과 일치하는 영화 정보를 출력할 수 있다. low single quote를 입력하..

0xe82de.tistory.com

 

low

[사진 3]

low 레벨이다. single quote를 입력하면 에러가 발생하는 것을 확인할 수 있다. mysql처럼 sql 구문을 출력해주지는 않지만 single quote로 인해 오류가 발생했음을 추측할 수 있다.

 

[사진 3]

SQLite의 주석인 "--"을 입력하여 모든 영화 정보를 출력할 수 있다.

 

[사진 4]

이전 문제들과 마찬가지로 UNION SELECT 명령어로 테이블의 컬럼 개수와 테이블에서 사용되는 컬럼 개수를 확인할 수 있다. 테이블 상의 컬럼 개수는 6개이며, 게시판에서 사용하는 컬럼은 총 4개이다. 2~5번 컬럼이 사용된다.

 

[사진 5]

mysql db에서는 "@@version" 명령을 통해 db 버전을 확인했었다. SQLite에서는 sqlite_version() 함수 호출을 통해 db 버전을 확인할 수 있다.

query : 0' UNION SELECT 1, sqlite_version, 3, 4, 5, 6--

 

[사진 6]

mysql의 information_schema 스키마와 tables 테이블과 다르게 SQLite에서는 sqlite_master라는 테이블에 테이블과 컬럼 정보가 포함되어 있으며 tbl_name 컬럼에 DB에 존재하는 테이블의 이름이 저장된다 위와 같이 "blog", "heroes", "movies", "users" 테이블명을 확인할 수 있다.

query : 0' UNION SELECT 1, tbl_name, 3, 4, 5, 6 from sqlite_master--

 

[사진 7]

또한, sqlite_master 테이블의 sql 컬럼은 DB에 존재하는 테이블의 컬럼 정보를 포함한다. 위와 같이 "heroes" 테이블의 컬럼명과 데이터 타입을 확인할 수 있다.

query : 0' UNION SELECT 1, sql, 3, 4, 5, 6 from sqlite_master where tbl_name="heroes"--

 

[사진 8]

위와 같이 "heroes" 테이블의 login, password 컬럼 정보를 출력할 수 있다.

query : 0' UNION SELECT 1, login, password, 4, 5, 6 from heroes--

 

medium

[사진 9]

medium 레벨이다. medium 레벨의 경우 single quote 에러 출력이 되지 않는다.

 

[사진 10]
[사진 11]

php 코드(sqli_11.php, functions_external.php)를 보면 medium, high 레벨의 경우 str_replace() 함수로 인해 1개의 single quote가 2개의 single quote로 변환된다.

 

[사진 12]

SQL 구문은 위와 같다. medium, high 레벨에서 single quote를 입력하면 아래와 같이 변환된다. single quote 우회가 어렵기 때문에 medium, high 레벨에서는 SQL Injection 공격이 어렵겠다. 다른 방법이 있는지 찾아봐야 한다.

before replace : SELECT * FROM movies WHERE title LIKE '%' or 1--%'
after replace : SELECT * FROM movies WHERE title LIKE '%'' or 1--%'

 

high

medium 레벨과 같다.

728x90
728x90

'Wargame > bWAPP' 카테고리의 다른 글

bWAPP A1 SQL injection - Stored (Blog)  (0) 2020.10.28
bWAPP A1 SQL Injection (Drupal)  (0) 2020.10.28
bWAPP A1 SQL Injection (Login Form/User)  (0) 2020.10.28
bWAPP A1 SQL Injection (Login Form/Hero)  (0) 2020.10.28
bWAPP A1 SQL Injection (CAPTCHA)  (0) 2020.10.28

+ Recent posts