sort 버튼을 통해 정렬을 오름차순, 내림순으로 바꿀 수 있는데 패킷 바디를 보면 asc 혹은 desc를 보내는 것을 확인할 수 있다.

또, 소스코드를 제공하고 있는데, 코드는 다음과 같다.

// 일부 추출
if(isset($_POST['sort'])){
 $sort=$_POST['sort'];
}else{
 $sort="asc";
}

mysql_query("update authkey set authkey='".auth_code('lonely guys')."'");
$sort = mysql_real_escape_string($sort);
$result=mysql_query("select * from guys_tbl order by reg_date $sort");
while($row=mysql_fetch_array($result)){
  echo "<tr><td>$row[1]</td><td>$row[2]</td></tr>";
}

문제는 order by 아래에서 blind sql injection을 수행할 수 있냐는 것인데 검색 결과 꽤 흥미로운 기법들을 찾을 수 있었다.

우선 sql injection에서 order by를 사용하는 경우는 일반적으로 컬럼의 개수를 확인할 때이다.

select * from TABLE where 1=1 order by 1,2,3 #

위와 같이 입력했을 때 에러가 발생하지 않는다면 열의 개수가 3개 이상이라고 알 수 있는 것이다.

order by는 원래 열의 이름과 함께 사용되는 것으로 일반적인 사용 방법은 다음과 같다.

select no, id from TABLE where 1=1 order by no asc, id desc;
+----+-----+
| no | id  |
+----+-----+
|  1 | 3   |
|  2 | 123 |
|  3 | 8   |
+----+-----+

그런데 위에서 order by 1,2,3과 같이 사용하는 것은 1,2,3이 각각 첫번째 열, 두번째 열, 세번째 열을 자동으로 지칭하기 때문이다.