이번 포스트에서는 Lord of SQLInjection의 nightmare문제에 대해 다루겠다.
문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.
## 문제 해석 :
해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), #, -를 필터링하고 있으며, pw의 길이가 6보다 크면 안된다는 것도 알 수 있다.
또한 id값이 존재할 때만 문제를 해결할 수 있는 것으로 보인다.
## 문제 풀이 :
해당 쿼리를 항상 True를 반환할 수 있게끔 하면 되는데, 총 입력 가능 글자수가 6글자인 것을 고려해야한다.
먼저 해당 쿼리를 항상 True로 반환하는 공격문을 시도해보겠다.
### 사용할 공격문 : pw=')||1;%00
### 실행 결과 :
";%00"은 주석을 우회하는 구문이고 방금 시도한 길이가 7이어서 "No Hack"라는 구문이 뜬 것을 알 수 있다.
그럼 다르게 한 번 생각해보면, 우리는 pw의 값을 모르기 때문에 "입력된 pw의 값이 False다"라는 구문의 최종 결과가 True인 것을 활용하여 공격해보겠다.
### 사용할 공격문 : pw=')=0;%00
### 실행 결과 :
## 추가 해석 :
쿼리문 : pw=('')=0;%00
"pw=('')"라는 쿼리문이 False이기 때문에 뒤에 다가 False를 뜻하는 0과 등호(=)를 활용하면 된다. 즉 "pw=('')[False] = 0[False]" = True이라는 원리를 활용한다는 것이다.
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection (20. dragon) (0) | 2022.06.09 |
---|---|
Lord of SQLInjection (19. xavis) (0) | 2022.06.06 |
Lord of SQLInjection (17. zombie_assassin) (0) | 2022.06.03 |
Lord of SQLInjection (16. succubus) (0) | 2022.06.02 |
Lord of SQLInjection (15. assassin) (0) | 2022.06.01 |