Webhacking Writeup 45번 문제입니다.
문제사이트에 접속하면 guest가 id pw에 기본입력되어있고 소스코드를 제공해줍니다.
소스코드를 먼저 살펴보면
id와 pw에 add슬래시로 싱글쿼터, 더블쿼터, 백슬래시, NULL인경우 역슬래시를 추가해주고 있습니다.
다음으로 처음보는 함수인 mb_convert_encoding() 함수인데 찾아보니
첫번째 인수 입력된 값을
두번째 인수 utf-8 형식으로 바꾼다.
세번째 인수 현재 인코딩 형식인 euc-kr
즉 입력한 id값은 euc-kr 방식으로 입력받아 utf-8방식으로 바꿔서 아래 result 부분에 삽입되는것을
알게되었습니다.
문제코드에서는 result의 id가 admin이기만 하면 solve(45)가 실행된다고 하니
pw까지 맞춰야 하는 블라인드 sql은 아닌것으로 예상됩니다.
함수는 알았으나 어떻게 공격을 해야할지 몰라 공격법을 검색해보았는데
https://blog.naver.com/skinfosec2000/220535626029
PHP addslashes(), magic_quotes_gpc 우회를 통한 SQL Injection 공격
addslashes(), magic_quotes_gpc 우회를 통한 SQL 인젝션 공격 가능 일부 웹 사이트에서 데이터베이스 ...
blog.naver.com
인코딩함수를 사용할경우 앞에 %aa를 붙히면 add슬래시 함수의 싱글쿼터를 우회하는것이 가능하다고 합니다.
싱글쿼터가 우회가 된다면 id='' or id='admin' 방식으로 문제해결이 가능해집니다.
다만 필터링을 살펴보면 admin select limit pw = < > 등이 막혀있습니다.
싱글쿼터가 우회된다는 가정하에 사용할 우회방법은
admin 은 ADMIN 혹은 16진수로 우회하고
= 은 like로 우회한다면 문제 해결이 가능합니다.
삽입코드를 작성해보면
select id from chall45 where id='' or id='admin'&pw=guest
select id from chall45 where id='%aa' or id like(0x61646d696e)#&pw=guest
select id from chall45 where id='%aa%27 or id like(0x61646d696e)%23&pw=guest
첫 코드는 공격코드를 삽입했을때 쿼리에서 실행되는 결과
두번째 코드는 필터링을 우회하기 위해 %aa를 추가하고 admin을 16진수로 우회한 코드
세번째 코드는 GET방식으로 값을 받기에 URL 인코딩을 거쳐 실제로 삽입할 코드입니다.
세번째 URL인코딩을 거친 코드를 문제사이트의 url에 전송해보면
공백도 자동으로 URL 인코딩되어 %20으로 바뀌면서
첫번째 코드대로 값이 쿼리에 삽입되고 결과가 admin이 되면서 문제가 해결되었습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup CHILD 문제 (0) | 2022.09.04 |
---|---|
Webhacking Writeup 50번 문제 (0) | 2022.09.01 |
Webhacking Writeup 51번 문제 (0) | 2022.08.20 |
Webhacking Writeup 34번 문제 (0) | 2022.08.19 |
Webhacking Writeup 21번 문제 (0) | 2022.08.16 |