Today I Learned …

[Lord of SQL Injection] 5번 wolfman 풀이 본문

Wargame/Lord of SQL Injection

[Lord of SQL Injection] 5번 wolfman 풀이

염베리 2021. 12. 6. 03:42

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


사담

오늘도 워게임!

 

이전 문제

https://choco4study.tistory.com/92

 

[Lord of SQL Injection] 4번 orc 풀이 + Blind SQLi 자동화 Python 코드

* 개인적인 공부 내용을 기록한 글입니다. 설명 음... 갑자기 꽂혀서 처음으로 Blind SQLi 코드를 짜봤다... 아직 2진탐색을 적용하지 않아 속도가 느리다. 벌써 동트기 직전이라 오늘은 여기까지만

choco4study.tistory.com


5번 문제 wolfman 분석 및 풀이

 

 

5번 문제는 다음과 같다.

 

 

preg_match로 공백 문자를 필터링하고 있음을 알 수 있다.

쿼리문 삽입 시 공백을 적절한 문자로 대체해주어야 한다.

 

먼저, solve 조건은 다음과 같다.

if($result['id'] == 'admin') solve("wolfman");

fetch된 레코드의 id가 admin일 시 문제가 풀리게 됨을 알 수 있다.

 

다음은 쿼리문을 보겠다.

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

admin을 fetch 해주려면

id='guest' and pw='' 로 첫번째 조건을 닫아준 후,

or id='admin' 으로 id가 admin인 레코드를 뽑아주면 된다.

 

즉, 주입해야할 쿼리문은

 

' or id='admin

 

이다.

 

그런데 이 문제에서는 파라미터에 공백이 포함되어있을 시 접근을 제한하고 있기 때문에,

앞서 인지했던 것처럼 공백을 다른 문자로 대체해주어야 한다.

 

공백 필터링 우회를 위한 적절한 대체 문자의 예시는 다음과 같다.

 

① Tab : %09

② \n : %0a

③ \r : %0d

④ 주석 : /**/

⑤ 그 외

 

이 중 Tab을 선택해 최종 주입할 쿼리문을 정했다.

 

'%09or%09id='admin

 

엔터를 쳐보면!

 

 

다섯번째 문제가 풀렸다!

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