1. RFI(Remote File Include)
1). 객체에 대한 직접 참조가 가능
2). 외부 입력값에 대한 검증
* 객체에 대한 직접 참조가 되지 않거나 외부 입력값에 대한 검증이 있는 순간
이 공격은 할 수가 없습니다.
제로보드의 다른 php 파일에도 있는지 찾아보도록 하겠습니다
조건
include가 있는지
require가 있는지
require_once가 있는지
include_once가 있는지
변수가 변조가 가능한지
찾아봅시다
*include 찾기
*require 찾기
*include_once & require_once 찾기
*/skin/zero_vote/setup.py에 있는 <? include "$dir/value.php3";를 변조해보도록 하겠습니다
이렇게 어제만들어놓은 value.php3파일이 잘 작동하는걸 볼 수 있습니다.
1. 블랙박스 테스팅
- 소스코드가 공개되어 있지 않은 상황에서 진행
- 소스코드를 보지 않고 취약점을 검증
ex) 저번에 했던 xss 취약점 테스팅(모든 게시판에 다 소스를 적어서 테스트)
2. 화이트박스 테스팅
- 소스코드를 직접 분석하여 취약점을 검증
ex)지금 하고 있는 RIF 취약점 테스팅(모든 php소스를 보고 테스트)
1.SQL을 이용하는 취약점
- 대표적인 injection 취약점
- SQL Injection
- Blind SQL Injection
attack.txt를 누르면 Download 횟수가 한개씩 늘어나는데 여기서 취약점이 발생합니다.
2. 동작 과정
1) 링크
'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
링크가 클릭하면 download.php가 실행됩니다.
2).download.php
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");
!변수의 정의!
*프로그램 내부에서 정의
(require lib.php가 있어서 lib.php에 정의되어있는걸 알 수 있습니다)
$t_board = "zetyx_board";
*외부에서 정의 : GET
$id는 소스코드를 보면 외부에서 정의되고 있음을 볼 수 있습니다.
'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
$id=attack
$filenum=1
$no=6
쿼리문 작성 시나리오
query =update zetyx_board_attack set download1=download1+1 where no='6'
이렇게 쿼리가 실행됨을 알 수 있습니다.
실제로 이렇게 쿼리가 실행되는 지 확인 해보도록 하겠습니다
mysqld_safe --log=query.log&
우리가 예측한 쿼리문과 똑같은 걸 볼 수 있습니다.
DB에서도 명령어가 잘 작동되는걸 확인 할 수 있습니다.
3. 취약점 확인
여기서부턴 다음주에 하겠습니다.
'Security > Web' 카테고리의 다른 글
[WEB SECURITY]19. Blind SQL Injection 1 (0) | 2017.09.05 |
---|---|
[WEB SECURITY]18 .SQL INJECTION 2 (0) | 2017.09.04 |
[WEB SECURITY]16. 원격 쉘 / RIF 취약점 (0) | 2017.08.31 |
[WEB SECURITY]15. CSRF 2 / php 파일 업로드 취약점 1 (0) | 2017.08.30 |
[WEB SECURITY]14. XSS 취약점 2 / CSRF 1 (0) | 2017.08.29 |