본문 바로가기
Web/Webhacking.kr

Webhacking.kr Challenge old-7 문제 풀이

by jh117jh 2023. 7. 10.
728x90

이번에 풀 문제는 7번!

 

소스 코드를 보면

 

2,+,-,from,=,/,*,_,공백이 필터링되어 있고

val 파라미터에 입력값이 없으면 1로 자동 입력되게 되어있다.

 

또한 1~5까지 랜덤으로 숫자를 생성하여 각 숫자마다 sql문에서 val파라미터를 입력받는 부분의 ()가 하나씩 늘어나게 되어 있다.

 

문제는 val파라미터에 2가 입력되면 풀리는거 같다.

 

여기서 우리는 rand가 1일때를 가정하여 문제를 풀 것이다. 다음에 올 수를 예측할 수 없을뿐더러 1이 나올 때까지 돌리는 게 더 빠르다.

 

일단 val파라미터에 2를 MOD(5,3)으로 우회해서 넣어보면

query error가 출력된다. 즉, 애초에 2라는 데이터 자체가 존재하지 않았다. (query error는 데이터가 존재하지 않을 시 출력된다.)

그러면 우리는 2를 추가해서 출력 해야된다.

 

61번 문제에서 ALIAS를 사용해 가상의 컬럼을 출력했던걸 떠올릴 수 있다.

 

하지만 지금 쿼리상 AS를 사용할 수는 없고 UNION을 사용하여 가상의 컬럼을 출력해야겠다.

 

UNION에 대한 내용은 https://jh-hack.tistory.com/59

 

[개념정리] UNION

UNION, UNION ALL이란? UNION은 두 개 이상의 select문을 합칠 때 사용하며 각각의 select문의 컬럼 수와 데이터 타입이 같아야 사용할 수 있다. UNION ALL도 두 SQL 문의 결과를 결합하는데 사용되는 명령이다

jh-hack.tistory.com

 

UNION을 사용해서 가상의 컬럼을 어떻게 만드느냐

 

이 테이블은 제가 만든 웹사이트의 게시판을 저장하는 테이블로, 간단한 테스트를 해보겠다.

 

여기서 쿼리문을 SELECT * FROM `topic` UNION SELECT 1,2,3,4,5;을 입력해 보자 

아래 1,2,3,4,5가 입력된 게 보이는가?

 이처럼 존재하지 않는 값을 추가해 출력할 수 있다.

 

이를 이용해서 문제를 풀어보면

 

345)UNION(select(MOD(5,3))을 입력해 보면 -> 공백이 필터링되어 있으므로 띄어쓰기를 ()로 대체했다.

 

728x90