Webhacking Writeup 39번 문제입니다.
사이트에 접속하니 소스코드를 제공해 줍니다.
소스코드를 먼저 열어보겠습니다.
봐야할 부분만 캡쳐해봤습니다.
해석해보자면 먼저 POST 형태로 id값을 전송받습니다.
그런데 입력한 id값의 str_replace 함수로 \ 를 사용시 없애버리고,
싱글쿼터( ' )를 사용시 싱글쿼터 두개로 치환해 버려서 열었던 싱글쿼터를 닫아버립니다.
또한 substr함수로 전달받은 id를 15개만 받고 그 이상은 입력이 되지않는것 같습니다.
다음이 제일 중요한데
"select 1 from member where length(id)<14 and id='{$_POST['id']}"
member테이블에 id길이가 14를 넘지않아야 한다고 합니다.
그런데 id='{$_POST['id']}로 싱글쿼터가 열려있습니다.
즉 우리는 값을 입력하고 싱글쿼터를 닫아줘야 합니다.
문제는 위에서 말한대로
싱글쿼터를 1개 입력시에 2개로 치환해 버려 닫을 수가 없는 것입니다.
생각난 방법은 바로 공백이였습니다.
이전 5번문제를 풀다 도움을 받았던 글
https://techblog.woowahan.com/2559/
MySQL에서 ‘a’ = ‘a ‘가 true로 평가된다? | 우아한형제들 기술블로그
{{item.name}} DB 알못의 어떤 리서치 개요 안녕하세요 기계인간 이종립입니다. FC플랫폼개발팀에서 배민찬 백엔드를 개발하고 있습니다. DB알못인 저는 업무 중에 우연히 MySQL에서 'a' = 'a '의 결과가
techblog.woowahan.com
위 내용이 생각났고 공백도한 문자로 인식되어 칸을 차지한다면
싱글쿼터를 마지막에 넣어도 substr함수가 15개로 잘라서
싱글쿼터 하나가 잘릴 것으로 예상을 했습니다.
해서 (1 ')로 입력을 했더니
문제가 해결되었습니다.
id로 1을 입력한 이유는 구문에 select 1이 있어서
id로 1이 존재하지 않을까 하는 이유였으나 풀고나서 지인에게 듣기로는
SQL구문을 잘못이해 하고 있다고 하더라구요
SQL공부가 부족하니
이부분은 좀더 공부를 해서 후에 정리해보겠습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup 4번 문제 (0) | 2022.08.15 |
---|---|
Webhacking Writeup 27번 문제 (0) | 2022.08.15 |
Webhacking Writeup 9번 문제 (0) | 2022.08.13 |
Webhacking Writeup 20번 문제 (0) | 2022.08.13 |
Webhacking Writeup 49번 문제 (0) | 2022.08.13 |