- 메인페이지

검정 화면에 Admin page제목, auth 버튼, view-source 링크가 전부이다
일단 소스코드를 확인해 무슨 페이지인지 알아보자
- 소스코드

php를 잘 모르지만 얼추 해석해보자면
val값을 받아서 $go에 저장한후 preg_match함수로 2, -, +, *, /, \s, from, _, = 등을 필터링하고 sql문을 만들어서
db 조회값을 $data로 저장해 $data값이 2이면 solve()를 동작시키는걸 알 수 있다
* 중간에 rand를 통한 시도횟수 늘리기? 는 왜있는 것인지 모르겠다.(아마 확실한 답을 여러번 시도하라는 뜻이려나..)
참고로 val값에 입력은 메인페이지 주소창을 확인하면 get 방식으로 입력가능 하다
즉, db 결과값이 2가 나와야 문제를 풀 수 있는데 주어진 문제의 sql 필터중 숫자2와 사칙연산자들을 입력하지 못하게 되어있다 하지만 기본 사칙연산이 아니더라도 숫자 2를 만들 방법은 많기에 시프트 연산자를 통해 4를 2로 바꿔보겠다!
val=4>>1 를 입력해보자
- 풀이과정
# val=4>>1 입력 결과값

입력후 결과를 확인해보면 query error이다...
다시 소스코드로 돌아가서 query error가 출력되는 부분을 보면

$data 값이 없을때 출력되는 결과이다
즉, 소스코드상에 쿼리문인 select lv from chall7 where lv=(2)가 동작하면 db 결과값이 아무것도 없다는 뜻이 된다
즉 lv=2라는 값이 없다는 뜻이다 하지만 그럼에도불구하고 우리는 결과값으로 2를 리턴받아 $data에 저장해야 하므로union select를 이용해 없는 db에 없는 값을 리턴 받아보겠다기본적인 형태는 아무값 union select 2 가 되지만 현재 우리는 소스코드당 필터링부분에 \s(띄어쓰기)가 필터링 되므로띄어쓰기 없이 쿼리를 짜야한다따라서 입력값은 아무값)union(select(4>>1)가 되겠다입력후 db에 입력되는 쿼리문 :
select lv from chall7 where lv=(아무값)union(select(4>>1) )
입력해보자
# 789)union(select(4>>1) 입력 결과값

-완-
'CTF > webhacking.kr' 카테고리의 다른 글
| challenge 46 (0) | 2025.09.16 |
|---|---|
| challenge 51 (0) | 2025.09.15 |
| chellenge 49 (0) | 2025.09.15 |