ctf 제출문제 해설 |
알수없는 영어 문자와 로그인창이 뜬다. id와 pw를 입력하고 로그인하는거 같다.
여기 이 문자가 암호화 된 문자라는 것을 알아내는것이 첫번째 문제이다. 각 단어를 구글링해보면 nqzva가 admin의 ROT13암호화 된 문자열이라는 것을 금방 알아차릴 수 있다.
root, user, guest 같은 흔한 입력을 넣어보면 모두 존재하지 않는 아이디라는 문구가 뜬다.
테이블에 admin 계정만 존재하기때문에 문제를 접근할때 암호화된 문구는 쉽게 눈치챌수있을거같다.
즉 이 문제는 admin 계정으로 로그인하는 것인데, id에 admin으로 로그인하면 여전히 존재하지 않는다는 경고 메시지가 뜬다. admin의 ROT13 암호화 문자열인 nqzva로 두고 임의로 비밀번호를 입력하면
이제 올바르지 않은 비밀번호라고 경고문구가 바뀐다. 즉 관리자계정 아이디는 nqzva이고
비밀번호를 알아내야한다.
다양한 입력을 해도 다 올바르지 않은 비밀번호라고 뜬다.
id?=nqzva&pw?=' or 1=1# |
위와 같이 시도해도 실패!. 이때 생각할 수 있는 것은 id도 admin을 ROT13의 암호화된 문자열
이기때문에 pw도 str_rot13 함수가 걸려있지않을까? 생각해보는 것이다.
id?=nqzva&pw?=' be 1=1# |
위의 입력을 주고 로그인을 누르면
다음과 같이 쿼리문이 출력된다. 예상한대로 id와 pw는 rot13으로 암호화되어 출력되고 있고, rot13에 맞춰서 입력을 주면 쿼리가 참이 되었을때, 그 쿼리가 출력이 된다.
이것을 힌트 삼아서 이제 sql injection 공격을 시행한다.
select pw from member where id='admin' and pw=' 'or if(length(pw)>5,(select 1 union select 2),1)%23 |
나는 위와 같은 error based sql injection 공격을 시도하기 위해, 위의 payload를 rot13으로 변환한다.
id='nqzva' and pw=' 'be vs(yratgu(cj)>5,(fryrpg 1 havba fryrpg 2),1=1)# |
즉 admin 계정의 password의 길이가 5보다 크다면, union select 함수때문에 error가 반환될 것이고, 5보다 작다면 1=1이 수행되어 true가 될 것이다.
5보다 클때, 1=1이 수행되어 참이 됐기때문에 쿼리가 출력된 모습. 즉 pw의 길이는 5보다 작다
id='nqzva' and pw=' 'be vs(yratgu(cj)>3,(fryrpg 1 havba fryrpg 2),1=1)# |
숫자를 바꾸어 3으로 시도했을때, 에러가 반환된다. 따라서 비밀번호의 길이는 4이다.(현재 임의로 설정된 비밀번호)
bruteforcing을 통해서도 구할 수 있다.
마찬가지 방법으로 brute forcing을 통해서 4자리의 비밀번호 한글자씩 유추해나가면 된다.
임의로 설정한 비밀번호는 현재 1234이다.
id= nqzva, pw=1234 를 통해 로그인하면 게시판으로 이동한다.
여기 게시판에 플래그를 올려둘 것이고, 혹시나 다르게 접속하는 경우를 방지하기 위해 게시글에 비밀번호를 관리자 계정 비밀번호인 '1234'로 설정해 둘 것이다.
++++++++++++++++++++++++++++++++++++++++++++++++++++++
문제를 제출 할 때에 db에 설정된 id와 pw는
admin // s2j0ngl0v2이다.
따라서 rot13 암호화에 맞게 수정해주면
id는 nqzva , pw는 f2w0aty0i2를 입력하면 문제를 해결할수있다.
'개인 공부 > WEB' 카테고리의 다른 글
[웹해킹] dreamhack php-1 (0) | 2021.07.26 |
---|---|
[웹해킹] dreamhack cookie (1) | 2021.07.26 |
[웹해킹] XSS GAME - LEVEL 6 (0) | 2021.07.13 |
[웹해킹] XSS GAME - LEVEL 5 (0) | 2021.07.13 |
[웹해킹] XSS GAME -LEVEL 4 (0) | 2021.07.13 |
댓글