보안 공부/webhacking.kr

webhacking.kr 53번 풀이

sh1256 2022. 1. 4. 11:49
728x90

첫화면 달랑 소스...

일단 소스를 살펴봅시당

먼저 소스코드를 해석해 보면,

 1. tablename.php 파일을 불러온다. 

2. 만약 answer변수가 hidden_table 변수값과 같다면 문제 해결

3. val변수값의 select, by를 필터링함(대소문자 상관 X)

4. a=val변수값에 해당하는 hidden_table 값을 가져온다. 

 

먼저 val 값이 1, 2, 3, 4일 떄를 각각 입력해 봤더니 각각 1, 2, 3, 4를 내놓는다. 

아마도 val값 입력할 때를 이용해 table이름을 알아야 할 거 같다. 

 

table 이름을 알아내는 가장 일반적인 방법은 

SELECT table_name FROM information_schema.tables;

을 사용하는 것이다. 

현재 사용하는 테이블의 이름만 알고 싶다면

WHERE table_schema = database()

를 같이 사용한다. 

 

그런데 문제는 여기서 "select" 를 필터링 한다는 것이다. 

그러면 아래 함수를 이용해 테이블명을 알아낸다. 

 procedure analyse();

이 함수는 각 칼럼들에 대한 해당 테이블을 분석한 결과를 보여준다. 

 

./?val=1%0aprocedure%20analyse();

를 입력해 보면, 

이렇게 DB명.TABLE명.FIELD명 형식으로 나타나게 된다. 

그럼 여기서 알 수 있는 TABLE명은 

chall53_755fdeb36d873dfdeb2b34487d50a805

이 되고, 

./?answer=chall53_755fdeb36d873dfdeb2b34487d50a805

를 주소창에 입력하면 문제는 풀린다.