반응형

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&

로그보기

/var/lib/mysql/ 에 있는 query.log에 로그들이 기록된다

#>tail -f query.log


우리가 예측한 쿼리문과 똑같은 걸 볼 수 있습니다.



DB에서도 명령어가 잘 작동되는걸 확인 할 수 있습니다.




웹 페이지에서도 잘 작동 된걸 볼 수 있습니다


3. 취약점 확인


여기서부턴 다음주에 하겠습니다.

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