Today I Learned …

[Lord of SQL Injection] 17번 zombie_assassin 풀이 본문

Wargame/Lord of SQL Injection

[Lord of SQL Injection] 17번 zombie_assassin 풀이

염베리 2021. 12. 10. 01:19

* 개인적인 공부 내용을 기록한 글입니다.


이전 문제

https://choco4study.tistory.com/105

 

[Lord of SQL Injection] 16번 succubus 풀이

* 개인적인 공부 내용을 기록한 글입니다. 이전 문제 https://choco4study.tistory.com/103 [Lord of SQL Injection] 15번 assassin 풀이 * 개인적인 공부 내용을 기록한 글입니다. 이전 문제 https://choco4study..

choco4study.tistory.com


17번 문제 zombie_assassin 분석 및 풀이

 

 

17번 문제는 다음과 같다.

 

 

처음 보는 함수가 나왔다.

 

strrev는 입력받은 문자열을 거꾸로 뒤집어서 반환하는 함수이다.

strrev("hello") → olleh

이런 식이다.

주의할 점은, Byte 단위로 뒤집기 때문에 2Byte 문자인 한글이 들어가면 깨지게 된다는 점이다.

 

이번 문제에서는 여러번 접했었던 addslashes를 좀 더 정확히 볼 필요가 있을 것 같다.

addslashes는 싱글쿼터, 더블쿼터, 역슬래시, Null Byte 앞에 역슬래시를 붙여주는 함수이다.

 

주어진 쿼리문을 보겠다.

$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";

쿼리문 자체는 16번 문제와 다른 점이 없다.

16번에서는 id에 역슬래시, pw에 or 1=1 %23 을 주어 문제를 풀었었다.

 

이번 문제에서 새로 고려하여야하는 점은

① 역슬래시가 이스케이핑 될 것이라는 점과

② strrev에 의해 문자열이 거꾸로 읽힐 것이라는 점이다.

 

pw의 경우는 간단하다. 그냥 문자열을 거꾸로 입력해주면 된다.

⇒ %23 1=1 ro

 

id가 이 문제의 포인트인데,

싱글쿼터, 더블쿼터, 역슬래시, Null Byte를 id의 페이로드로 주었을 때를 각각 살펴보겠다.

 

[1] 싱글쿼터 (id='&pw=%23 1=1 ro)

addslashes → \'

strrev → '\

최종 쿼리 → where id=''\' and pw='or 1=1 %23'

⇒ 잘못된 접근이다. 싱글쿼터에 의해 id의 파라미터 부분이 바로 닫혀버린 후, \'가 바깥에 남겨지므로 올바르지 않은 쿼리문이 만들어진다.

 

[2] 더블쿼터 (id="&pw=%23 1=1 ro)

addslashes → \"

strrev → "\

최종 쿼리 → where id='"\' and pw='or 1=1 %23'

⇒ 올바른 접근이다! 빨간색 부분이 통째로 id의 파라미터로 취급된다.

⇒ FALSE or TRUE 이므로 문제가 풀릴 것이다.

solve

 

[3] 역슬래시 (id=\&pw=%23 1=1 ro)

addslashes → \\

strrev → \\

최종 쿼리 → where id='\\' and pw='or 1=1 %23'

⇒ 잘못된 접근이다. \\는 일반 문자 역슬래시로 취급되므로, 빨간색 부분이 id의 파라미터가 된다.

 

[4] Null Byte (id=%00&pw=%23 1=1 ro)

addslashes → \0

strrev → 0\

최종 쿼리 → where id='0\' and pw='or 1=1 %23'

⇒ 올바른 접근이다! 빨간색 부분이 통째로 id의 파라미터로 취급된다.

⇒ FALSE or TRUE 이므로 문제가 풀릴 것이다.

solve

 

이상의 분석을 통해, 정답은 두 가지임을 확인했다.

 

id="&pw=%23 1=1 ro

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

 

둘 중 하나를 답으로 넣어보면,

 

 

17번 문제가 풀린다.

프로필사진
berry
FE Developer, loves React & better DX
Comments