728x90
Lord of sql injection - Nightmare 풀이 |
los 18번 Nightmare에 대한 풀이 포스팅입니다.
문제 접근
where 뒤에 오는 pw의 입력값을 조절하여 id를 획득하면 문제를 해결할 수 있습니다.
필터링 조건은 다음과 같고, 입력값이 6자리 이상이면 안된다는 추가적인 조건도 있습니다.
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~"); if(strlen($_GET[pw])>6) exit("No Hack ~_~"); |
여러 시도를 해보아도 접근 방법이 잘 안떠올라서 힌트를 찾아 본 결과 자동 형 변환이라는 키워드가 나왔습니다.
Auto type cast란 Mysql은 비교나 검색을 수행할 때 데이터의 타입이 서로 다른 경우, 내부적으로 타입이 같아지도록 자동으로 형변환 처리를 합니다. 즉 서로 다른 데이터형의 값을 비교해도 이 auto type cast가 실행되어 문제가 발생하지않는다는 것입니다 이것을 sql injection에 적용해서, 변수에 숫자를 사용할 수 없는 경우에는 아래와 같이 자동형변환을 우회법으로 사용할 수 있습니다. false = 0 true = 1 true+true = 2 floor(version() ) = 5 |
자동 형 변환에 의해서 문자열이나 ''가 숫자 0으로 반환되기때문에 이것을 이용합니다.
그리고 뒤의 and 부터 구문은 주석처리해야하는데
주석 처리하는 다음 4가지 방법 중 필터링 하지 않는 방법을 사용합니다.
1. --%20 2. %23 3. /**/ 4. ;%00 |
따라서 형변환과 4번방식의 주석처리를 사용하여 다음과 같이 작성합니다.
?pw=')=0;%00 |
그 결과
query : select id from prob_nightmare where pw=('')=0;') and id!='admin' |
뒤의 구문이 주석처리되고, 앞의 ('')은 0으로 반환되면서 항상 참이 되어 반환됩니다.
728x90
'개인 공부 > WEB' 카테고리의 다른 글
[웹해킹] LOS 20 - (Dragon) (0) | 2021.06.19 |
---|---|
[웹해킹] LOS 19 - (Xavis) (0) | 2021.06.19 |
[웹해킹] LOS 17 - (Zombie Assassin) (0) | 2021.06.19 |
[웹해킹] LOS 16 - (Succubus) (0) | 2021.06.19 |
[웹해킹] LOS 15 - (Assassin) (1) | 2021.06.19 |
댓글