이상한건.. 이 취약점에 대해서 언급이 전혀 되어 있질 않고 패치 파일 하나만 달랑 있는것이다..
그렇다면 무엇인 문제일까???
우선 패치된 부분을 보자.
기존 소스 (download.php)
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");패치된 소스 (download.php)
if($filenum==1) {
mysql_query("update `$t_board"."_$id` set download1=download1+1 where no='$no'");
} else {
mysql_query("update `$t_board"."_$id` set download2=download2+1 where no='$no'");
}달라진 부분은 $filenum 을 사용하는 곳인데..
이 변수를 필터링 하지 않는다는 것이다.
(zeroboard의 가장 큰 실수는 get방식을 쓰면서 필터링을 안한다는거..)
내가 사용하고 있는 php + mysql 버전에서는 쿼리를 한번에 2개 이상 날릴 수 없으므로
(기존의 php + mysql 조합에서 한번에 쿼리를 한번씩만 날릴 수 있는걸로 알고 있으며(최소한 내가 알기로는 그렇다), 실제로 시도해봐도 되지 않는다. 아니라면 리플 바람)
보면 그리 큰 문제가 될꺼 같진 않지만..
그렇다면 이제부터 간단한 공격을 시작해보자.
http://victim/zb_path/download.php?id=board_id&no=article_no&............filenum=1=99999 where no=article_no --&HTTP_REFERER=http://victim
filenum에 1또는 2, 그 뒤에 오는 99999는 download 횟수, article_no는 실제 게시물 번호.. 등등이다.
HTTP_REFERER는 zb에서 체크하기 때문에 임의대로 넣어줘야 한다.
이렇게 하면 게시물의 download 횟수가 99999로 바뀐것을 볼 수 있다.
자, 그렇다면 이게 다인가?..
조회수 올리기 위해서 이짓거리를 해야 하는가?
이런 의문이 든다면.. 지금 당장 zb설치 후 mysql에 들어가서..
describe zetyx_board_board_id;
라고 쳐보자.. 아이디어가 떠오르지 않는가..ㅋㅋ
처음에는 큰 문제가 될꺼 같지 않게 보여도 이걸 보면 많은 문제가 된다.
아마도 이런 문제들이 큰 파급효과를 일으키지 않을까 싶어서... 공개를 안한게 아닐까... 하는 생각이다.
(단순히 귀찮아서 안했을지도-_-)
Posted by 장현준


