Web/Lord of Sql injection

zombie_assasin 문제 풀이

Namchun 2023. 9. 11. 23:57

코드 분석

id와 pw를 받아서 모두 addslashes() 함수에 전달하고, 그 반환값으로 strrev() 함수에 전달하여 그 결과값을 저장한다.

 

addslashes() 함수는 ' (싱글 쿼터), " (더블 쿼터), \ (백슬래시), NULL 문자가 있다면 바로 앞에 \ (백슬래시)를 붙여주어 sql injection 방지를 도와주는 함수 중 하나이다.

 

또한 strrev() 함수는 문자열로 받은 인자를 뒤집어서 반환하는 함수이다.

공격 기법

우선 id 입력값으로 escape를 시도하기 위해 ' (싱글 쿼터)를 입력해보면

' -> addslashes() = \' -> strrev() = '\ 가 되어

이런 쿼리가 완성되어 escape가 되지 않는다.

 

여기서 위의 addslashes() 함수의 설명을 다시 보면,

싱글 쿼터, 더블 쿼터, 백슬래시 이외에도 NULL 문자가 있다면 앞에 백슬래시를 붙여준다.

 

그렇다면 id 값으로 NULL 문자를 넣게되면 무슨 일이 생기는가?

NULL -> addslashes() = \ -> strrev() = \ 가 되어

지난 succubus 문제와 같은 공격 기법을 사용할 수 있다.

 

(자세한 설명은 아래의 링크 참고)

https://namchun.tistory.com/56

 

succubus 문제 풀이

코드 분석 id와 pw 두 문자열 모두 따옴표가 있는지 체크한다. 공격 기법 따옴표가 필터링되어 있어 escape가 불가능해 보이지만, '\' (역슬래시)를 이용하면 뒤에 오는 따옴표를 문자로 처리할 수

namchun.tistory.com

 

따라서 succubus 문제와 같은 방식의 공격 기법을 사용하되, strrev() 함수를 고려하여 문자열을 거꾸로 삽입해주면

?id=%00&pw=%23 1 ro

이런 전달값이 최종적으로는

이러한 쿼리가 완성되어 solve가 된다.

 

'Web > Lord of Sql injection' 카테고리의 다른 글

xavis 문제 풀이  (3) 2023.09.13
nightmare 문제 풀이  (0) 2023.09.12
succubus 문제 풀이  (0) 2023.09.10
assasin 문제 풀이  (0) 2023.09.10
giant 문제 풀이  (0) 2023.09.10