Today I Learned …
[Lord of SQL Injection] 17번 zombie_assassin 풀이 본문
[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번 문제가 풀린다.
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] 19번 xavis 풀이 (0) | 2021.12.13 |
---|---|
[Lord of SQL Injection] 18번 nightmare 풀이 (0) | 2021.12.12 |
[Lord of SQL Injection] 16번 succubus 풀이 (0) | 2021.12.09 |
[Lord of SQL Injection] 15번 assassin 풀이 (2) | 2021.12.09 |
[Lord of SQL Injection] 14번 giant 풀이 (0) | 2021.12.09 |