이번에 풀 문제는 39번!
들어가면 간단한 입력칸이 보이고 소스코드 버튼이 있다.
소스코드를 보면 str_replace로 \\ -> 공백 , ' -> '' 로 치환되는것을 볼 수 있다.
이걸로 보아 이번 문제는 \\ 또는 '를 이용하여 푸는걸 알 수 있다.
또한 id값을 받아 substr로 15번째 자리까지 자르는것으로 보인다.
쿼리문을 보면 member테이블에 id의 길이가 14미만인 값이 있으면 1을 반환한다. 그리고 result[0]이 1이면 풀리는걸로 보아
그냥 길이가 14미만인 id를 입력하면 된다. 순간 이게 무슨 문제지? 라는 생각과 당연하게 있을법한 id인 admin과 guest를 입력했는데
아무런 일도 일어나지 않았다.
처음에는 id값이 db에 없나 했는데 쿼리문을 자세히 보니까 id값을 넣는부분에 싱글쿼터(')가 빠져 있는것이다.
심지어 싱글쿼터는 위에서 말했듯이 싱글쿼터 두개로 치환되어 나타난다.
괜히 substr로 15번째 자리까지 자르는게 아닌이상
14자리의 id를 입력하고 15번째에 싱글쿼터를 입력하여 두개로 치환되어도 substr로 인해 하나만 들어가게 만들어야 되는것이다.
여기서 문제는...
14자리의 id값을 나는 모른다는 것이다....
id값을 새로 알아내는 문제인가 하며 검색하던 결과
https://techblog.woowahan.com/2559/
MySQL에서 ‘a’ = ‘a ‘가 true로 평가된다? | 우아한형제들 기술블로그
{{item.name}} DB 알못의 어떤 리서치 개요 안녕하세요 기계인간 이종립입니다. FC플랫폼개발팀에서 배민찬 백엔드를 개발하고 있습니다. DB알못인 저는 업무 중에 우연히 MySQL에서 'a' = 'a '의 결과가
techblog.woowahan.com
흥미로운 정보를 얻었다.
요약하자면
SQL표준에 따르면 'a' = 'a '를 같다고 본다. 즉, 뒤에 공백이 들어가도 상관이 없다는 뜻이다.
이유는 두 문자열을 비교할때 길이가 다르다면 짧은 문자열 뒤에 공백으로 채워넣어 같은 길이로 만든 다음 비교하는 특성(PAD)때문에 그렇다.
그럼 admin 또는 guest 뒤에 공백으로 채운뒤 15번째 자리에만 '을 입력하면 될것이다.
정상적으로 문제가 풀리는것을 알 수 있다.
'Web > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr Challenge old-27 문제 풀이 (0) | 2023.06.22 |
---|---|
Webhacking.kr Challenge old-33 문제 풀이 (0) | 2023.06.21 |
Webhacking.kr Challenge old-58 문제 풀이 (0) | 2023.06.19 |
Webhacking.kr Challenge old-19 문제 풀이 (0) | 2023.06.19 |
Webhacking.kr Challenge old-06 문제 풀이 (0) | 2022.11.19 |