SQL injection/webhacking

webhacking 46번

ys.k 2022. 8. 9. 01:11

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

이전 문제를 풀고 자려했는데, 다음 문제는 뭘까 궁금해하다가 풀어버려서 포스팅한다.

46번 문제이다.

sql injection 문제이다.

역시 반갑다.

항상 sql injection은 나에게 문제를 풀 힘을 보충해준다.

일단 소스코드부터 보자.

복잡해서 내일로 미룰뻔했지만 자세히 보니 별거 아니다.

lv의 값을 get방식 파라미터로 입력받는다.

공백, /, *, %을 제거하며, select, 0x, limit, cash 등을 대소문자 구분하지 않고 필터링시킨다.

id가 admin인 정보를 조회하면 문제는 풀린다.

풀어보자.

일단 1을 입력해보자.

id값과 cash값이 출력되었다.

이런 방식이구나 알아두고 id가 admin인 정보를 조회해보자.

0x가 필터링 되었으니 이번엔 0b를 사용할 것이다.

https://www.convertbinary.com/text-to-binary/

 

Convert Text to Binary code!

Text to Binary Converter ✓ Step-by-step video and written tutorials ✓ Text to Binary Code conversion table.

www.convertbinary.com

admin의 2진수 값은 0110000101100100011011010110100101101110이다.

정확하게 조회하기 위해선 admin의 정보만 조회할 수 있도록 lv값이 비어있는 값을 찾아야 하거나, and연산자를 통해 찾아야 한다.

두 가지 방법 다 알아보자.

테스트 결과 lv의 값은 1~4까지 존재한다.

쿼리 1 : 5||id=0b0110000101100100011011010110100101101110

쿼리 2 : 1%09and%09id=0b110000101100100011011010110100101101110

문제 해결

시행착오

1. 0x가 필터링되었으면 0b(2진수), 0o(8진수) 등을 통해 우회할 수 있다.