Today I Learned …
[Lord of SQL Injection] 3번 goblin 풀이 본문
* 워게임 풀이 과정을 기록합니다.
사담
오늘은 간단히 워게임!
이전 문제
https://choco4study.tistory.com/50?category=1057097
[Lord of SQL Injection] 2번 cobolt 풀이
* 워게임 풀이 과정을 기록합니다. 사담 백신 2차 때문인지... 너무 피곤하다... 보고서도 써야하는데 큰일...ㅠ 오늘은 정말 간단히!! 2번 문제 cobolt를 다뤄볼까 한다. 이전 문제 https://choco4study.tist
choco4study.tistory.com
3번 문제 goblin 분석
3번 문제는 다음과 같다.
preg_match를 살펴보면, 쿼터를 필터링해주고 있음을 알 수 있다.
sql 삽입 시 쿼터를 사용하지 않는 우회 방법을 택해주어야 한다.
쿼리문을 보겠다.
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"
id가 guest인 동시에 no 조건을 충족하는 레코드를 뽑아옴을 알 수 있다.
no의 정체를 알기 위해 no=1을 시도해봤다.
아래처럼 guest 레코드가 정상 fetch된다.
다음으로는 no=2를 시도해봤다.
아래처럼 아무 결과도 뜨지 않는다.
guest 레코드의 no는 1임을 짐작할 수 있다.
3번 문제 goblin 풀이
이 문제를 풀기 위해서는, 논리연산자의 특성을 이용하여 조건절 실행의 우선순위를 조정해주어야한다.
즉, 다음과 같은 형태의 쿼리문을 만들어줄 것이다.
$query = "select id from prob_goblin where (id='guest' and no=2) or id='admin'"
where 조건절을 살펴보면,
① id='guest' and no=2
⇒ FALSE
② id='admin'
⇒ id가 admin인 레코드
① or ② 의 결과, id가 admin인 레코드를 뽑아오게 된다.
이 때,
해당 문제에서는 쿼터가 필터링되고 있으므로 이를 우회하는 방식으로 sql을 삽입해주어야한다.
필터링 우회를 위해 char()을 이용하여 파라미터를 ASCII코드로 전달해준다.
admin은 ASCII코드로 다음과 같이 나타낼 수 있다.
char(97,100,109,105,110)
따라서,
최종 주입할 쿼리문은
no=2 or id=char(97,100,109,105,110)
엔터를 쳐보면!
세번째 문제가 풀렸다!
'Wargame > Lord of SQL Injection' 카테고리의 다른 글
[Lord of SQL Injection] 6번 darkelf 풀이 (0) | 2021.12.07 |
---|---|
[Lord of SQL Injection] 5번 wolfman 풀이 (0) | 2021.12.06 |
[Lord of SQL Injection] 4번 orc 풀이 + Blind SQLi 자동화 Python 코드 (0) | 2021.12.05 |
[Lord of SQL Injection] 2번 cobolt 풀이 (0) | 2021.10.31 |
[Lord of SQL Injection] 1번 gremlin 풀이 (0) | 2021.10.29 |