안녕하세요??
자운대 고라니입니다.
오늘은 wargame.kr old-18번 문제를 풀어보겠습니다.
문제에 들어가보시면 대놓고 SQL INJECTION이라고 나와있군요.
일단 아래쪽 view-source를 활용하여 php소스코드를 확인하겠습니다.
이렇게 나와있는데 여기서 쿼리문을 먼저 분석해볼게요.
select id from chall18 where id='guest' and no=$_GET[no] // admin's no = 2
($_GET[no]는 우리가 입력할 text이다.)
옆에 주석처리를 확인하면 알 수 있듯이 no라는 데이터가 2일때 정답이 admin으로 로그인이 되면서 문제를 풀 수 있네요.
일단 no에 1을 넣어보니까 guest가 로그인 되더라구요.
그렇다면 대충 테이블의 형태를 추측할 수 있죠
id no
guest 1
admin 2
그렇다면 어떤 데이터를 넘겨서 sql injection을 성공할 수 있을까요?
3 or no=2이라는 값을 넣었다고 가정할게요.
select id from chall18 where id='guest' and no=3 or no=2// admin's no = 2
and 연산은 or연산보다 우선순위가 높아요(and 후 or 연산이 적용됨)
그래서
id='guest' and no=3 (FALSE)
no=2 (TRUE)
이기때문에 no=2라는 'admin'의 계정으로 로그인이 가능하게되요.
그래서 3 or no=2 라는 데이터를 넣어봤어요.
preg_match 함수에 의해서 걸려서 injection이 불가능하다.
그렇다면 이를 우회하는 방법을 찾아보자.
3 or no=2 중 공백부분이 굳이 띄어쓰기가 아니어도 된다는 점을 활용해야한다.
이를 활용하여 url encoding을 통해서 우회해보자.
1. TAB을 뜻하는 %09
2. \n을 뜻하는%0a
두가지 값으로 답을 구할 수 있다.
나는 첫번째 방법을 사용해보았다.
그림에 나와있듯이 대입하고, 엔터를 눌러보면
답이 나온다.
'category > 웹해킹(webhacking.kr)' 카테고리의 다른 글
웹해킹(webhacking.kr) - 20번 (0) | 2020.11.17 |
---|---|
웹해킹(webhacking.kr) - 19번 (0) | 2020.11.17 |
웹해킹(webhacking.kr) - 14번 (0) | 2020.11.16 |
웹해킹(webhacking.kr) - 17번 (0) | 2020.11.16 |
웹해킹(webhacking.kr) - 10번 (0) | 2020.11.15 |
웹해킹(webhacking.kr) - 7번 (0) | 2020.11.14 |
웹해킹(webhacking.kr) - 6번 (0) | 2020.11.14 |
웹해킹(webhacking.kr) - 1번 (0) | 2020.11.12 |
댓글