-
Challenge 27웹해킹/Webhacking.kr 2023. 3. 27. 22:35
sql 인젝션 문제 admin으로 쿼리를 성공시키면된다
맨 첫번째 부터 #, select, 괄호(, limit, 공백, 0x 를 필터링 한다(맞는지는 나도 모름)
밑에는 쿼리를 해주는데 주의할점은 입력창에 쓴값은 id가 아니라 뒤에 no값으로 들어간다는 점 앞의 쿼리가 실패하면 뒤의 쿼리 에러문이 출력된다
admin의 no는 2라고 알려줌
1을쳐봣더니
guest 가 나왔다
그럼 이제 admin으로 쿼리를 성공시켜야하는데
쿼리문이
select id from chall27 where id='guest' and select id from chall27 where id='guest' and no=({$_GET['no']})
이렇게 있다. 자세히보면 no를 넣는 부분을보면 괄호로 쌓여있다
예를들어서 no에 1을 넣으면 no=(1) 이렇게 값이 들어간다는 것이다
그럼 우리가 admin의 id가 조회되도록 하는 방법은 뭘까 우린 이미 admin 의 no를 알고있다
no가 2인 id를 조회하게하면 된다는 것이다
where id='guest' and no=({$_GET['no']}) 에서 no값을 넣는 부분에
아무값) or no = 2-- 이렇게 값을 넣어주면
select id from chall27 where id='guest' and no=(2) or no = 2-- 이런식으로 된다
이렇게되면 앞의 게스트(no=1)를 찾는 조건이 거짓이여도 or 뒤의 no=2를찾는 조건이 참이 되어 쿼리가 수행된다
그런데 위에 필터링을 보면 공백과 =를 필터링 한다고했다
) <<- 이건필터링안함
공백필터링 국룰 %09 와 = 필터링 like를 써주면
2)%09or%09no%09like%092--%09 이런식으로 된다 맨앞의 2에는 아무런값이나 넣어도된다 주의할 점으로는 -- 뒤에는 공백이있어야 정상적으로 주석이 처리된다 그냥 --만 넣으면 원래쿼리문에 있던 )때문에 주석처리가안된다
정리: 처음에 유니온도 찾아보고 select limit의 여러 필터링 우회 방법을 찾았었는데 그게아니었다 ㅅㅂ
'웹해킹 > Webhacking.kr' 카테고리의 다른 글
Challenge 58 (0) 2023.04.06 Challenge 32 (0) 2023.04.06 Challenge 11 (0) 2023.04.05 Challenge 23 (0) 2023.04.03 Challenge 5 (0) 2023.03.31