본문 바로가기
카테고리 없음

LOS(Load of SQL Injection) 4번 문제 풀이

by Ate1es 2020. 4. 30.

소스코드를 살펴보면, 이번 문제는 우회해서 뚫는게 아닌 pw 값 자체를 알아내야한다.

 

우선 length() 함수를 이용해서 pw 의 길이를 알아내보려고 한다.

 

select id from prob_orc where id='admin' and pw='' or id='admin' and length(pw)=8 --

 

뒤쪽에 쿼리를 삽입해 참, 거짓으로 pw 의 길이와 값을 알아낼 것이다.

 

select id from prob_orc where id='admin' and pw='' or id='admin' and length(pw)=8 --

 

앞쪽의 빨간색 조건은 무조건 거짓이다 [ pw 불일치] 뒤쪽이 참이되려면 pw 길이가 8이어야 한다.

 

조건이 참이 되면 첫번째 if 문에 의해 Hello admin 이 출력 될 것이다.

 

 

이렇게 pw 길이가 8자리 인것을 알아냈다. (1부터 다해보았다)

 

그 다음, substr() 함수를 이용해서 첫글자부터 아스키값을 비교해가며 pw를 찾아낸다.

 

ex) substr(pw,1,1) > '0'  --> pw 의 첫번째 글자의 아스키코드 값이 0보다 큰가 ? 

ex) substr(pw,3,1) < '5'  --> pw 의 세번째 글자의 아스키코드 값이 5보다 작은가 ?

 

select id from prob_orc where id='admin' and pw='' or id='admin' and substr(pw,1,1) > '0' -- 

 

이렇게 한글자 한글자 삽질(?)을 열심히 하면 어느새 8자리 비밀번호를 다 알수 있다.

 

pw=295d5844 이다.

 

클리ㅇㅓ~~

 

ps. 더 길어지면 코딩을 해서 풀어야 할 것 같다.