이번 포스트에서는 Lord of SQLInjection의 zombie_assassin문제에 대해 다루겠다.
문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.
## 문제 해석 :
해당 문제는 preg_match() 함수를 통해 prob, _, ., (, )를 필터링하고 있으며, addslashes() 함수를 통해 특수문자에 역슬래시(\)를 붙여주는 것과 strrev() 함수를 통해 우리가 입력한 값을 거꾸로 출력하게 만든 것을 알 수 있다.
또한 id값이 존재할 때만 문제를 해결할 수 있는 것으로 보인다.
## 문제 풀이 :
먼저 해당 문제가 어떻게 동작하는지를 눈으로 확인하기 위해 아무 값을 넣어서 공격해보겠다.
### 사용할 공격문 : id='&pw=hello
### 실행 결과 :
예상했던 대로 '를 입력했더니 뒤에 \(역슬래시)가 붙고, pw에 "hello"를 입력했지만 "olleh"라는 거꾸로 된 문자열이 출력된 것을 확인할 수 있다.
특수문자를 입력할 때마다 역슬래시가 붙는 것을 활용하여 &pw=까지 id값으로 바꿔서 공격을 해보겠다.
### 사용할 공격문 : id="&pw=%23 1 ro
### 실행 결과 :
## 추가 해석 :
쿼리문 : id="&pw=%23 1 ro
해당 쿼리문을 역슬래시(\)를 이용하여 뒤에 오는 '(싱글 쿼터)를 문자로 만들었다. 즉 id의 값이 ""\' and pw="이다. 이렇게 만든 다음에 "or 1 #"을 추가함으로 해당 쿼리를 항상 True를 반환할 수 있게끔 만들면 공격에 성공할 수 있다.
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection (19. xavis) (0) | 2022.06.06 |
---|---|
Lord of SQLInjection (18. nightmare) (0) | 2022.06.05 |
Lord of SQLInjection (16. succubus) (0) | 2022.06.02 |
Lord of SQLInjection (15. assassin) (0) | 2022.06.01 |
Lord of SQLInjection (14. giant) (0) | 2022.05.31 |