워게임/Root Me

[Root Me] SQL injection - String - 웹해킹

SecurityMan 2022. 9. 23. 11:00

 

계속해서 이어지는 Root Me의 SQL Injection 문제

 

이번 문제의 목표 역시 취약점을 이용해

 

administrator 의 비밀번호를 빼앗는 것이다.

 

 

문제페이지에 처음 접속했을때 화면이다.

 

 

Home 의 아래에 있는 버튼이 총 5개 있는데

 

버튼을 하나씩 눌러보면

 

위처럼 뭔가 게시글같은 느낌으로 글들이 써있는게 보인다.

 

 

페이지 오른쪽 위에는 Search 와 Login 페이지로 이동할 수 있는 버튼이 있다.

 

 

SQL Injection 문제이니

 

검색창에 가장먼저 ' or 1=1-- - 라고 입력해봤다.

 

그랬더니 인젝션이 성공해서 아래쪽에 모든 게시글이 출력된 것이 보인다.

 

' or 1=1-- - 이라고 입력한다면

 

where 절이 항상 참이되기 때문에 테이블의 모든 결과가 나온것이다.

 

 

SQL 인젝션이 가능하다는 것을 알았으니

 

UNION 을 이용해봤다.

 

' union select 1,2-- - 라고 입력해주면

 

UNION 연산으로 1,2가 기존 테이블에 붙어서 같이 출력되는것을 볼 수 있다.

 

UNION 을 사용할때는 컬럼 갯수를 맞춰주는것이 중요하다.

 

 

예를들어 ' union select 1,2,3-- - 이라고 입력해

 

컬럼을 하나 더 추가해주면

 

보이는것 같이 do not have the same number 라는 에러가 나게 된다.

 

추가로 에러를 통헤 이 웹서버에서는 SQLite3 를 DBMS로 사용하고 있다는 정보를 얻을 수 있다.

 

 

SQLite3 를 사용할 경우,

 

데이터베이스의 정보를 추출하고 싶다면

 

' union select 1,sql from sqlite_master-- - 라고 입력해주면 된다.

 

그럼 users 라는 테이블에 username 과 password 라는 컬럼이 있다는것을 알 수 있다.

 

 

테이블명과 컬럼명을 알아냈으니 이제 데이터를 뽑아주면 된다.

 

' union select username,password from users-- - 라고 입력해주면

 

아래쪽에 계정명과 비밀번호가 같이 출력되는것이 보인다.

 

 

알아낸 admin 비밀번호를 이용해 로그인 하면

 

admin 으로 정상적으로 로그인 되는것을 확인할 수 있고,

 

비밀번호를 이용해 챌린지를 인증하라는 문구가 출력된다.

반응형