SQL injection/webhacking

webhacking 59번

ys.k 2022. 8. 23. 19:07

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

59번 문제이다.

회원가입과 로그인을 할 수 있어 보인다.

소스코드를 보자.

post방식으로 값을 넘긴다.

join을 먼저 보자.

id와 phone 둘 다 값이 있어야 작동하며, 각 addslashes가 적용되어있다.

lv의 값이 admin이면 문제가 풀린다.

 

login을 보자

역시 id와 phone 둘 다 값이 존재해야 작동하며, phone의 길이가 20이 넘으면 접근이 거부된다.

id에서 admin을 대소문자 구분하지 않고 필터링하며, phone은 admin, 0x, #, hex, char, asciil, ord, select 등을 대소문자 구분 없이 필터링한다.

insert 구문을 보니 3번째 칼럼의 위치에선 guest가 무조건 들어가게 되어있다.

아마 이 부분에 admin이 들어가게 쿼리를 만들어야 하는 것 같다.

사실 여기서 내가 아는 어떤 방법이든 동원해봤지만 풀 수 없었다.

1. 0x필터링 이므로 0b

2. admin의 문자열의 분리

등등 

그렇게 검색을 하던 중 하나의 함수를 발견할 수 있었다.

reverse() // 입력된 값을 뒤집어서 나열함 ex) id= admin , reverse(id) -> nimda

이 함수를 이용하여 문제를 풀 수 있다.

한번 풀어보자.

우리는 id 칼럼에 값을 줄 수 있다.

따라서 id에 admin의 뒤집은 값인 nimda를 넣어주고 reverse로 이를 뒤집어 주면 admin을 정상적으로 주입할 수 있게 된다.

한번 입력 후 검증해보자.

문제 해결

시행착오

1. get방식을 통한 url형식의 쿼리 주입이 아니기 때문에 --를 통한 주석 처리 시 뒤에 +가 아닌 공백을 넣어줘야 정상적으로 작동한다.

2. reverse() 함수에 대해서 새로 배우게 되었다.