메인화면입니다.

join과 login 입력창이 있네요

소스보기입니다.

[소스해석]

Login 부분

1. lid, lphone은 싱글쿼터,더블쿼터 등 필터링

2. lid, lphone을 입력받아 id, lv을 추출

3. lv가 'admin'이면 성공

Join 부분

4. id, phone은 싱글쿼터,더블쿼터 등 필터링

5. id에 'admin'이 입력될 경우 필터링

6. phone에 'admin', '0x', '#', 'hex', 'char', 'ascii', 'ord', 'select' 필터링

7. phone 길이가 20을 초과할 경우 Deny

먼저 회원가입하고 로그인을 해보겠습니다.

id와 lv 값이 찍힙니다.

id에 인젝션을 시도하려 했으나 싱글쿼터(')가 필터링 되기 때문에 불가능했습니다.

그래서 phone 부분에 인젝션 시도를 해보았습니다.

결과는 아래와 같습니다.

인젝션이 먹히네요 ~

다만 여기서 제일 중요한 부분은 주석(--) 뒤에 꼭 공백이 있어야 합니다.

이유는 아래 링크에서 확인해보면 됩니다.

https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-comments.html

이제 이를 이용하여 lv값을 'admin'으로 바꾸어주면 되는데 인젝션이 먹히지 않습니다.

lv 값에 문자 자체가 먹히지 않습니다.

그럼 함수를 이용하여 admin을 만들어 주는 방법이 있습니다.

reverse()라는 함수는 문자열을 역으로 출력해주는 역할을 합니다.

아래와 같이 사용할 수 있습니다.

reverse()의 인자로 컬럼명을 줄 수도 있습니다.

그리하여 최종 쿼리를 만들면! 'admin'을 거꾸로 만들어 id값으로 입력후 이를 거꾸로 만들어 lv에 값에 대입해줄 수 있겠습니다.

[최종쿼리]

nimda / 1,reverse(id))--

챌린지 59 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level61 (old)  (2) 2020.04.28
[webhacking.kr] Level60 (old)  (2) 2020.04.28
[webhacking.kr] Level58 (old)  (2) 2020.04.28
[webhacking.kr] Level57 (old)  (2) 2020.04.28
[webhacking.kr] Level56 (old)  (7) 2020.04.28

+ Recent posts