WEB/webhacking.kr (old)

webhacking.kr 39번

hongjw 2020. 2. 12. 23:57

challenge 39 첫화면

view-source 클릭 !

php 코드

$_POST['id'] = POST방식으로 전달되는 id

id에 "\\"가 포함되어있으면 공백으로 대체되고, " ' "는 " ' ' "로 대체된다.

그 후, id값 중 0~15번째 문자만 추출해서 저장한다.

추출된 문자열은 select문에 쓰이게 되고, select문이 성립하면 문제가 해결된다.

 

여기서 알아야 할 점 !

mySQL에서 'a' = 'a '의 결과는 1(TRUE)이다.

-> char에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. 공백 채우기 비교에서는 우선 짧은 쪽의 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되도록 한다. 그리고 앞에서부터 한 문자씩 비교한다. 그렇기 떄문에 끝의 공백만 다른 문자열은 같다고 판단된다.

-> 그에 반해 VARCHAR 유형에서는 맨 처음부터 한 문자씩 배교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단한다.

추가로, mySQL에서는 대소문자도 구별하지 않아 'a' = 'A'의 결과도 1(TRUE)이다.

( 나도 문제풀면서 이번에 처음알게된 사실.., ଘ(੭*ˊᵕˋ)੭ )

 

문제를 해결하기 위해 우리는 select문을 TRUE로 만들어줘야한다.

select문을 보면, $_POST['id'] 앞에 '가 붙어있는 것을 볼 수 있다. 그러므로 우리는 $_POST['id'] 입력 마지막에 '를 붙여줘야한다.

또한 substr함수를 통해 $_POST['id'] 중 0~15번째 문자만 추출하는데, select문의 length(id)<14를 만족해야하므로 $_POST['id']를 공백으로 채워줘야한다. 

 

그러므로 aaa           ' 를 입력하면 !

문제 해결 ㅎㅅㅎ

마지막에 쓴 '는 ' '로 대체되어도 15번째 문자까지만 추출하기 때문에 마지막 '는 사라지게 된다.

 

 

참고

>> https://woowabros.github.io/study/2018/02/26/mysql-char-comparison.html

'WEB > webhacking.kr (old)' 카테고리의 다른 글

webhacking.kr 41번  (0) 2020.02.13
webhacking.kr 37번  (0) 2020.02.13
webhacking.kr 38번  (0) 2020.02.12
webhacking.kr 36번  (0) 2020.02.11
webhacking.kr 32번  (0) 2020.02.11