이번에 처치할 몬스터는 zomble assassin!
코드를 보면
저번 문제와 쿼리문 양식은 같은데 id와 pw를 받는 방법이 다른 것을 볼 수 있다.
두 개의 함수로 받고 있는데 strrev와 addslashes이다.
addslashes 함수는 데이터베이스의 질의에서 처리할 필요가 있는 문자(싱글쿼터, 더블쿼터, 역슬래쉬, Null Byte) 앞에 백슬래시(\)를 붙여 문자열로 반환한다.
예를 들어 I'm Jhon 이라는 쿼리를 전송하면 싱글쿼터가 포함되어 있어 쿼리문에 오류가 발생할 수 있다.
이를 방지하기 위해 I\'m Jhon으로 쿼리문을 바꿔준다. (백슬래쉬 뒤에 특수문자는 문자로 취급한다는 것은 이전 문제에서 다뤘다.)
strrev 함수는 받은 문자열의 순서를 반대로 바꿔준다.
예를 들어 apple을 받으면 elppa로 반환해 준다.
이전 문제에서는 ?id=\&pw= or 1=1 %23을 입력하여 문제를 풀었다. 하지만 이번 문제는
이 두개의 함수가 적용되어 있으므로 id의 입력값에 변화를 줘야 한다.(pw값은 or 1=1 %23을 반대로 적어주면 된다.)
먼저, 싱글쿼터(')를 입력했을때
addslashes에 의해 \'로 입력되고
strrev로 인해 '\로 전환되는 것을 알 수 있다.
하지만 싱글쿼터를 입력하면 id=' '\' and pw='or 1=1 %23'으로 결국 싱글쿼터로 id파라미터가 닫히므로 pw부분이 문자로 들어가게 된다.
그러므로 더블쿼터(")를 입력해 보면
id='"\' and pw='or 1=1 %23'
빨간 부분이 문자로 들어가게 되므로 pw입력값이 쿼리문으로 들어가는 걸 알 수 있다.
이를 토대로
?id=" &pw= %23 1=1 ro를 입력하면
짠~
문제가 풀리는 걸 볼 수 있다.
다음 몬스터 잡으러 가자~!
'Web > Lord of SQL Injection' 카테고리의 다른 글
Lord of SQL Injection 19단계 (xavis) (0) | 2023.03.30 |
---|---|
Lord of SQL Injection 18단계 (nightmare) (0) | 2023.03.29 |
Lord of SQL Injection 16단계 (succubus) (0) | 2023.03.28 |
Lord of SQL Injection 15단계 (assassin) (0) | 2023.03.27 |
Lord of SQL Injection 14단계 (giant) (0) | 2023.03.17 |