본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 61 :: SQL Injection (alias)


▼ Challenge 61의 소스는 다음과 같습니다.



SELECT 바로 다음에 Injection을 하여야 합니다.


괄호가 필터링 되어 있으니 함수는 사용할 수 없습니다.



그렇다면, SQL의 Alias를 이용하겠습니다.


          • Alias (as) : 테이블, 컬럼에 일시적인 이름을 부여


보통 Alias는 컬럼명을 더 가독성있게 해주거나, SELECT에서 추가적인 연산 결과를 보여주기 위해 사용합니다.



 다음의 예를 보시죠.



위의 예제를 보면 실제 컬럼은 id 밖에 없지만, ascii() 함수를 통해서 id의 첫번째 문자의 ascii 값을 만들고 


그것을 Alias(as)를 통해서 ascii_code라는 컬럼이름으로 출력하게 됩니다.



 이것을 이용하면 다음과 같은 예제를 만들 수 있습니다.



그럼으로 Alias를 출력하기 위해서는 실제 Table에 있는 값이 아니여도 됩니다.



 래 예제는 'admin'이라는 문자를 id라는 컬럼명으로 출력해라 라는 예제입니다.




이것을 응용하여 select 'admin' as id from c_61 order by id desc limit 1 라는 예제를 만들 수 있습니다.


하지만 eregi()에 의해 Quotes가 필터링 되지도 않았지만 Access Denied가 됩니다. 


magic_quotes_gpc에 의해 필터링 되는건가요? )


  • magic_quotes_gpc : 자동적으로 모든 GET, POST, COOKIE 데이터에 addslashes()를 처리

  • addslashes(): '(작은 따옴표), ""(큰 따옴표), \(백슬래시), NULL(NULL byte)를 \로 이스케이프하여 문자로 인식



작은 따옴표를 입력하지 못하니 문자열은 입력할 수 없습니다.


 그렇다면 16진수로 바꾸어서 쿼리를 보내면 됩니다. (as는 생략 가능)




 이 방법을 이용하여 다음과 같이 보내면 Success!


?id=0x61646d696e%20as%20id