▼ 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
'WarGame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] Challenge 12 :: Javascript (0) | 2015.11.23 |
---|---|
[webhacking.kr] Challenge 10 :: CSS (0) | 2015.11.22 |
[webhacking.kr] Challenge 59 :: SQL Injection (reverse함수) (0) | 2015.11.21 |
[webhacking.kr] Challenge 42 :: ZIP Cracking (0) | 2015.11.20 |
[webhacking.kr] Challenge 36 :: swp 파일 (0) | 2015.11.20 |