티스토리 뷰

SQL injection/webhacking

Webhacking 7번

ys.k 2022. 3. 13. 09:48

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

7번 웹페이지다.

단순하다.

소스코드를 보자.

val로 파라미터를 받으며 비어있으면 1로 고정시켜준다.

또한 2, -, +, from, _, =, \s, *, / 가 필터링되어있다.

그리고 쿼리 결과가 2가 되면 문제가 풀린다.

숫자 우회 문제이다.

바로 풀어보자.

val파라미터로 받은 값이 $go 부분에 삽입된다.

하지만 이번엔 2도 필터링되어있기 때문에 url인코딩을 사용할 때도 해당 문자가 포함된 건 사용할 수 없다.

조건에 부합하게 쿼리를 작성해보자.

쿼리 : ?val=5%3

분명히 5%3은 2가 나오는데 쿼리 에러가 뜬다... 

무슨 문제인지 찾아보니 테이블에 2에 해당하는 값이 없기 때문이란다.

그리고 union을 사용하여 외부 테이블을 조인시켜 2를 불러와야 한단다.

쿼리를 작성해보자.

val값이 1이면 안되는데, 그 이유는 1에서는 불러오는 데이터가 있기에 비어있는 값이랑 조인을 시키기 위해서 이다.

val=5 출력

쿼리 : ?val=5)union(select(5%3)

20 퍼의 확률로 문제를 해결할 수 있다.

그 이유는 rand() 부분에서 5가지의 쿼리 경우의 수가 있다.

우리가 작성한 쿼리의 문법은 rand(1) 일 때 일치하기에 rand(1)이 실행될 때까지 새로고침 해주면 된다.

문제 해결

시행착오

1. select x에서 x값이 없으면 불러올 수 없기에 union을 사용해야 한다.

2. 공백 우회 시 select x 소괄호 공백 처리는 select(x) -> x , (select(x)) -> o  으로 작성해줘야 문법이 맞다.

'SQL injection > webhacking' 카테고리의 다른 글

Webhacking 9번  (0) 2022.03.18
Webhacking 8번  (0) 2022.03.14
Webhacking 6번  (0) 2022.03.12
Webhacking 5번  (0) 2022.03.09
webhacking 4번  (0) 2022.03.08
댓글