본문 바로가기
워게임/LOS

[**] nightmare (묵시적 형변환)

by meanjung 2021. 10. 4.

pw -> prob _ . () # - 필터링

pw 길이는 6보다 크면 안된다.


묵시적 형변환이란?

조건절에 있는 데이터 타입이 다르면 '우선 순위가 높은 쪽'으로 내부적으로 형변환이 발생한다.

- 문자는 0으로 취급된다.

- 우선순위 : 정수형 > 문자열 - 문자가 정수로 형변환된다.

 

[**] 정수 컬럼을 문자열로 검색

<1>

j : integer column

s : varchar column

 

select * from table where j = '1234' -> j=1234인 열이 검색된다.

 

<2>

idx : integer column

select * from table where idx='a'

  1. 'a'가 0으로 변환된다.
  2. idx 컬럼이 0으로 셋팅된 데이터들만 반환된다.

 

[**] 문자열 컬럼을 숫자로 검색

id : varchar column

id = id1 / id2 / 1id / 2id / 0 / 1 / 0id / id0 이 존재한다고 가정

 

<1>

select * from table where id = 0 -> id1, id2, 0, 0id, id0

  1. 컬럼의 첫 문자가 '문자'이면 숫자와 비교하기 위해 0으로 변환한다.
  2. 0과 0이 같으므로 id1, id2, id0가 결과로 출력되었다.

------------------------------------------------------------

  1. 컬럼의 첫 문자가 0(숫자)이므로 숫자로 변경한다.
  2. 0과 0은 같으므로 0, 0id가 결과로 출력되었다.

<2>

select * from table where id=1 -> 1id, 1

  1. 컬럼의 첫 문자가 문자 1이므로 숫자로 변경한다.
  2. 1과 1은 같으므로 1id, 1이 결과로 출력되었다.

풀이

?pw=')=0;%00

 

- ;%00은 MySQL에서 쿼리의 마지막으로 인식되어 뒤를 읽지 않는다.

- pw=('')는 묵시적 형변환으로 인해 0이 리턴된다.

 

 

'워게임 > LOS' 카테고리의 다른 글

dragon  (0) 2021.10.04
[**] xavis  (0) 2021.10.04
zombie_assassin  (0) 2021.10.03
succubus  (0) 2021.10.03
assassin  (0) 2021.10.02

댓글