33번 문제는 ,, 10문제다.... 쿨럭 

 

33-1

33-1 문제
view-source
Next

문제가 이런식으로 계속 이어져 있다.


33-2

33-2 문제
소스코드

POST 방식으로 넘겨주는 값이 있어야 할 것 같다.

하지만 문제에선 POST 방식으로 보낼 수 있는 text 상자가 없기 때문에 직접 페이지코드를 수정하였다.

코드 수정
수정 후 post 방식으로 해당 값 전송
Next


33-3

33-3 문제
소스코드

'$_SERVER["REMOTE_ADDR"] : 웹서버에 접속한 접속자의 IP정보' 이기 때문에 나의 IP주소를 적어주었다.

 

Next


33-4

33-4 문제
소스코드

※ md5() : 문자열에서 md5 해시값을 생성하는 함수

 time() : 1970년 1월 1일 0시 0분 0초부터 지금까지 지나온 초를 정수형태로 리턴해주는 함수

 

GET 방식으로 전달된 password 값이 time()을 md5 방식으로 암호화한 값이라면 문제가 풀리는 것 같다.

하지만 이 time() 값은 현재 시간을 나타내는 것이어서 1초마다 바뀐다.

 

 

따라서 현재 시간에서 약 15초 정도 뒤의 time값을 md5 방식으로 암호화시킨 후,

15초 뒤에 URL에 ?password=15초 뒤 time값을 암호화한 값을 전달해주었다.

Next


33-5

33-5 문제
소스코드

이번에는 GET 방식으로 imget, POST 방식으로 impost를 넘기고, 쿠키 값을 imcookie로 설정하면 풀릴 것 같다.

 

소스코드 수정

get과 post 방식으로 데이터를 한 번에 전송하기 위해서 

form의 action 주소를 md555.php?imget=imget 으로 설정하였고(이러면 GET 방식으로도 전달되므로)

post 방식으로 impost를 넘겨주었다.

쿠키 값도 imcookie로 설정

쿠키 값도 imcookie로 설정한 후의 화면이다.

Next


33-6

33-6 문제
소스코드

① 이름이 test인 쿠키를 만들어 33-3에 사용됐던 IP주소를 MD5로 암호화한 값을 넣어주고

② post 방식으로 문제 화면에 나와있는 값을 MD5로 암호화한 뒤 kk라는 이름으로 넘겨주면 될 것 같다.

 

name이 kk인 post 방식 form 생성, test 쿠키 생성
Next


33-7

33-7 문제
소스코드

33-3번 문제에서 쓰였던 내 IP 주소를 활용하는 문제이다.

 

str_replace 함수를 사용하여 이 IP 문자열에 있는 모든 .없애고

$_SERVER['REMOTE_ADDR']에 다시 저장하고 있다.

 

주의할 점은 GET으로 넘겨지는 값(인자값)변수(인자)도 이와 똑같다는 것!

따라서 .을 없앤 IP주소를 GET 방식으로 전달했다.

Next


33-8

33-8 문제
소스코드

※ extract 함수 : $_GET을 인자로 넣으면 ($_POST도 가능) GET으로 넘기는 파라미터와 값을 변수와 그 초기값으로 설정
extract 함수의 기능을 이용하여 넘기는 파라미터 addr의 값을 127.0.0.1로 설정하면 풀릴 것 같다.

 

Next

 


33-9

33-9 문제
소스코드

※ chr : 아스키코드 번호를 받아 해당하는 문자열을 리턴해주는 함수

+) ord : 문자열의 첫번째 문자에 해당하는 아스키도르를 리턴해주는 함수

 

아스키코드 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121에 해당하는 문자열이 $answer에 연속적으로 추가된다.

따라서 이를 GET 방식으로 ans 파라미터에 넣어서 문제를 풀면 될 것 같다.

 

Next


33-10

33-10 문제
소스코드

이리저리 변경된 나의 IP주소를 $answer과 $ip 변수에 넣고 문제 풀이를 유도하고 있다.

 

php 코드를 실행

실행 결과 $ip 변수와 $answer 변수의 값을 알아냈다.

그리고 fopen시 사용하는 디렉토리를 그냥 URL에 적어주면 될 것 같다.

ㅜㅜ 끝

 

thresholding은 임계점, 한계점, 문턱이라는 뜻. 반올림과 비슷한 느낌

사용자가 특정 수치값을 정해놓으면 그 기준값을 통해 값을 도출함

임계처리

- 임계처리(thresholding)는 이미지 행렬에서 하나의 픽셀값을 사용자가 지정한 기준값(threshold)를 사용하여 이진화(binarization)하는 가장 단순한 필터

 

- 이진화 처리란 영상을 흑/백으로 분류하여 처리하는 것

이때 기준이 되는 임계값을 어떻게 결정할 것인지가 중요한 문제

임계값보다 크면 백, 작으면 흑이 됨

기본 임계처리는 사용자가 고정된 임계값을 결정하고 그 결과를 보여주는 단순한 형태

 

OpenCV에서는 threshold라는 함수로 구현되어 있고 인수는 아래와 같다.

  • threshold(src, thresh, maxval, type)
    • src : 그레이스케일 이미지
    • thresh : 기준값
    • maxval : 기준값을 넘었을 때 적용할 최대값
    • type : 임계처리 유형
      • THRESH_BINARY : 기준값을 넘으면 최대값 아니면 0
      • THRESH_BINARY_INV : 기준값을 넘으면 0 아니면 최대값
      • THRESH_TRUNC : 기준값을 넘으면 기준값 아니면 최대값
      • THRESH_TOZERO : 기준값을 넘으면 원래값 아니면 0
      • THRESH_TOZERO_INV : 기준값을 넘으면 0 아니면 원래값

각 임계유형의 결과를 시각화해본다.

BINARY의 경우는 이미지 픽셀값이 다 255값을 가지게 되고, BINARY_INV의 경우는 그의 반대..

이런식으로 임계값을 이용하여 이미지 또는 영상을 처리할 수 있다.

 

적응임계처리

위의 결과를 보면 한가지 문제점이 있다. 임계값을 이미지 전체에 적용하여 처리하기 때문에 하나의 이미지에 음영이 다르면 일부 영역이 모두 흰색 또는 검정색으로 보여지게 되는 것이다.

 

이런 문제를 해결하기 위해서 이미지의 작은 영역별로 thresholding을 하면 된다.

OpenCV에서는 adaptiveThreshold 함수로 구현되어 있다.

 

  • adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
    • src : 그레이스케일 이미지
    • maxValue – 기준값을 넘었을 때 적용할 값
    • adaptiveMethod : 영역 내에서 기준값을 계산하는 방법
      • ADAPTIVE_THRESH_MEAN_C: 영역 내의 평균값에 C를 뺀 값을 기준값으로 사용
      • ADAPTIVE_THRESH_GAUSSIAN_C: 영역에 추후 설명할 가우시안 블러를 적용한 후 C를 뺀 값을 기준값으로 사용
    • thresholdType : 임계처리 유형
      • THRESH_BINARY
      • THRESH_BINARY_INV
    • blockSize : 임계처리를 적용할 영역의 크기
    • C : 평균이나 가중평균에서 차감할 값

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 필터링  (2) 2021.06.03
이미지 처리  (0) 2021.06.01

 

이미지 데이터를 표현하는 방식과 이미지 데이터를 처리하기 위한 파이썬 패키지 Pillow, Scikit-Image, OpenCV 패키지에 대해 알아본다.

 

픽셀

이미지 데이터는 픽셀(pixel)이라고 하는 작은 이미지를 직사각형 형태로 모은 것. 각 픽셀은 단색의 직사각형. 젠체 이미지의 크기를 표현할 때는 (세로픽셀수 x 가로픽셀수) 형식으로 표현

 

이미지 데이터를 저장할 때는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다.

-> 파이썬에서는 NumPy의 ndarray 클래스 배열로 표현한다.

 

 

색공간

픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)이라고 한다. 

대표적인 색공간 : 그레이스케일(gray scale), RGB(Red-Green-Blue), HSV(Hue-Saturation-Value)

 

그레이스케일

- 그레이스케일에서는 모든 색이 흑백.

- 각 픽셀은 명도를 나타내는 숫자로 표현된다.

- 0은 검은색을 나타내고 숫자가 커질수록 명도가 증가하여 하얀색이 된다.

- 숫자는 보통 0~255의 8비트 부호없는 정수로 저장된다.

 

SciPy 패키지의 misc 서브 패키지의 face 명령은 이미지 처리용 샘플 이미지를 제공한다.

인수로 gray=True를 입력하면 그레이스케일 이미지를 반환한다. 이미지의 크기는 배열의 shape 속성으로 볼 수 있다.

 

이 이미지 데이터는 768x1024 크기의 unit8 자료형 2차원 배열이다. 좌측 상단의 225개(15x15) 픽셀의 데이터를 보기 위해 아래와 같은 코드를 실행한다.

 

RGB

RGB 색공간에서 색은 적(Red), 녹(Green), 청(Blue)의 3가지 색의 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현됨

8비트 부호없는 정수를 사용하는 경우 (255,0,0)은 빨간색, (0,255,0)은 녹색, (0.0.255)는 파란색

 

픽셀 데이터가 스칼라가 아닌 벡터이므로 이미지 데이터를 (세로픽셀수 x 가로픽셀수) 형태의 2차원 배열로 표현하지 못하고 (세로픽셀수 x 가로픽셀수 x 색채널) 형태의 3차원 배열로 저장 (세 번째 축을 색채널(channel)이라고 부름)

 

 

이미지 파일 형식

.bmp 확장자를 가지는 비트맵(bitmap) 파일은 지금까지 설명한 다차원 배열정보를 그대로 담고 있다.

하지만 비트맵 파일은 파일 용량이 크기 때문에 압축을 통해 용량을 줄인 JPG, GIF, PNG 등의 압축 파일 형식을 많이 사용한다.

 

- JPEG : Joint Picture Experts Group의 약자. 웹상 및 멀티미디어 환경에서 가장 널리 사용되고 있는 포맷. 

JPG라는 확장자도 같이 사용됨

 

- GIF : Graphics Interchange Format. 하나의 파일에 여러 비트맵을 저장하여 다중 프레임 애니메이션 구현

 

- PNG : Portable Network Graphics. GIF 포맷을 대체하기 위해 개발된 파일 포맷

문자 혹은 날카로운 경계가 있는 이미지인 경우 JPG보다 PNG가 효과적

 

 

Pillow를 이용한 이미지 처리

- Pillow는 이전에 사용되던 PIL(Python Imaging Library)패키지를 대체하기 위한 것.

- JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉬움

- PIL 패키지의 대체이므로 임포트의 이름이 PIL 패키지와 같다는 점 주의

 

이미지 읽고 쓰기

 

Scikit-Image 

이 패키지도 이미지 처리에 많이 사용됨

 

OpenCV

- OpenCV(Open Source Computer Vision)은 이미지 처리, 컴퓨터 비전을 위한 라이브러리

- Windows, Linux, Mac OS, iOS, Android 등 다양한 플랫폼을 지원

- 실시간 이미지 프로세싱에 중점을 둔 라이브러리

 

- 2,500개가 넘는 알고리즘으로 구성되어 있음

 1. 영상 처리, 컴퓨터 비전, 기계 합습과 관려된 전통적인 알고리즘

 2. 얼굴 검출과 인식, 객체 인식, 객체 3D 모델 추출, 스테레오 카메라에서 3D 좌표 생성

 3. 고해상도 영상 생성을 위한 이미지 스티칭, 영상 검색, 적목 현상 제거, 안구 운동추적

 

 

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 필터링  (2) 2021.06.03
이미지 임계처리  (0) 2021.06.02

문제
페이지 소스코드

1) 입력한 값(no)은 GET 방식으로 전달된다.

2) no 에 # , select , ( , 공백 , limit , = , 0x 가 있으면 필터링된다.

3) 입력한 값은 select id from chall27 where id='guest' and no=           ←여기에 들어간다.

4) SQL Injection을 통해서 id가 'admin'일 때의 결과가 나오게 하면된다

 

1 입력
결과

no에 1을 입력하니 위와 같은 결과가 나왔다.

 

 

문제를 해결하기 위해 우리는 2) or no=2-- 에 해당하는 값을 입력해야 한다.

 

URL 필터링을 우회+문제 풀이를 위해 아래와 같이 작성했다.

 

  • 첫 번째 시도 : no=2%29%09or%09no%09%3D2--
  • 두 번째 시도 : no=2%29%09or%09no%09like%092--
  • 세 번째 시도 : no=2%29%09or%09no%09like%092--%09

 

=를 우회하기 위해 %3D를 입력했는데 계속해서 no hack이 떠서

like를 이용했다. 그치만 query error가 계속 떠서

혹시나 하는 마음에 맨 뒤에 공백을 하나 더 넣었더니 풀렸다.

 

성공

문제 화면

 

페이지 소스코드

preg_match
첫 번째 인수 : 정규식 표현 작성
두 번째 인수 : 검색 대상 문자열
세 번째 인수 : 배열 변수 반환. 패턴 매치에서 매칭된 값을 배열로 저장
반환값 : 매칭에 성공하면 1, 실패하면 0이 반환

 

id의 값에 admin 문자열이 포함되면 no!를 출력하고

id에 admin을 입력했을 때

 

id에 admin이 직접적으로 포함되지 않았을 때, urldecode()를 통해 디코딩하고 있다.

그리고 나서 id의 값이 "admin"이면 풀리는 문제!

 

 

그러면 우리는 id에 url방식으로 encoding된 admin의 값을 넣어주면 되겠다.

입력

이렇게 입력해줬더니 id에 그냥 admin을 입력했을 때와 같은 결과가 나왔다.

 

 

왜일까?

웹 서버와 브라우저 사이에서 데이터를 교환할때

브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값으로 보내고 php 는 자동으로 디코딩 하는 성질이 있다.

따라서 입력 값에 대한 디코딩을 두번하게 되는 것이므로 우리도 인코딩을 두번 해주면 된다.

 

이 값을 입력해주면 되겠다.
성공

처음 화면

URL을 자세히 보면 file 변수 값이 GET 방식으로 넘어간다는 것을 알 수 있고 file이라는 이름으로 전달된 파라미터 뒤에 .php가 자동으로 붙어 해당 내용을 회색 박스 내에 출력하고 있다.

 

file=index

 

file=flag

file에 flag를 넘겼을 때, FLAG is in the code라는 문자열이 보인다. code를 분석해야 한다.

파일 경로 취약점을 알아보기 위해서 ?file=../../../../../../etc/passwd 와 같이 입력해주었으나(LFI 공격)

이 ../ 명령어가 필터링이 되어 file=etc/passwd로 인식되어 해당 공격이 실패한다는 것을 알았다. 

 

 

이 이후로는 더 이상 해결방법을 모르겠어서 검색을 통해 이 문제에선 PHP wrapper를 이용한다는 정보를 알아냈다.

+) php가 버전 5 이상이 되면서 path 중간에 널바이트가 오면 주소를 더 이상 읽지 않는 취약점이 사라졌기 때문에 php wrapper를 사용하여 lfi 공격을 수행해야 하는 것이다.

 

◎ wrapper : 래퍼

래퍼는, 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램이다.

php://filter wrapper
:: 다양한 I/O스트림을 다루는데 사용하는 wrapper 이다.
:: 사용자 입력과 같은 안전하지 않은 소스로부터의 데이타를 유효성 검사하여 필터링하는데 사용되는 방식이다.
이 wrapper를 사용할 때 우리는 encode/decode 옵션을 사용하여 서버 안에 존재하는 문서들을 열람할 수 있다.
ex) www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
처럼 활용할 수 있다.
위의 방식으로 공격을 진행하게 되면 우리는 base64 방식으로 인코딩 된 etc/passwd의 값을 얻을 수 있다.

출처 : https://opentutorials.org/module/4291/26819
참고 : https://www.php.net/manual/en/wrappers.php.php

 

http://webhacking.kr:10001/?file=flag

→ http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag

 

 

디코딩 결과

문제
페이지 소스코html드

 

 

extract() : 배열의 값을 알아내 그에 해당하는 이름으로 일반변수를 만들어 줌

htmlspecialchars() : HTML의 코드로 인식될 수 있는 문자열의 일부내용을 특수문자(HTML entities)형태로 변환하여 출력

& &
" "
' '
< &lt;
> &gt;

str_replace(치환 전 문자열, 치환 후 문자열, 문자열) : 문자열 치환

 

$REMOTE_ADDR : 접속한 클라이언트 IP주소

$HTTP_USER_AGENT : 접속한 클라이언트의 접속 환경

 


먼저 $_SERVER의 배열과 $_COOKIE의 배열에 있는 값들을 일반 변수로 바꿔 저장한다.

SERVER 혹은 COOKIE의 REMOTE_ADDR이라는 값을 $ip 에 넣고, $HTTP_USER_AGENT라는 값을 $agent 에 넣는다.

만약 $REMOTE_ADDR이  .. / 12 / 7. / 0. 을 포함하면 각각 . / null / null / null로 바꾼 후 $ip 에 저장하고,

$HTTP_USER_AGENT가 있다면 HTML 코드를 특수문자로 변경한 뒤 $agent 에 넣어준다.

 

이 $ip 가 127.0.0.1이 된다면 해결되는 문제이다.

 

$_SERVER[REMOTE_ADDR]는 접속하는 IP 헤더에 설정된 src 주소로 설정된다. 따라서, localhost인 127.0.0.1로 설정할 수 없다. 따라서 COOKIE의 REMOTE_ADDR필드에 127.0.0.1을 넣어야 한다.

 

REMOTE_ADDR 쿠키에 127.0.0.1 넣음

REMOTE_ADDR 컬럼에 127.0.0.1이라는 값을 넣어주니 예상대로 필터링 되어 1만 남는다.

따라서 str_replace() 의 결점을 악용하여 회피를 시도할 것이다.

 

112277...00...00...1 

 

REMOTE_ADDR에 이렇게 입력한다면 파란부분(""), 노란부분(.)은 필터링이 될 것이고, 빨간색만 남을 것이다.

 

 

문제
페이지 소스코드

ck() 함수에서

세 개의 칸 모두 빈칸이면 안되며(20-22번째 코드) ,

23번째 줄에 나와있는 조건처럼 마지막 칸은 보이는 식별 문자와 같게 입력해야 한다.

 

 

빈 칸 입력
결과

너무 느리다고 한다...

저 time limit 2 second가 빈칸 입력 제한 시간을 나타낸 것 같다.

그럼 뭐 어떻게 입력하라는 ㄱ...

 

 

자바스크립트의 함수를 사용하는 페이지이므로 Console 창을 이용하면 될 것 같다.

 

처음 시도

처음엔 이런식으로 새로고침한 페이지에 나온 식별문자를 직접 입력해줬는데, 

계속해서 Too Slow... 페이지가 보였다. 

 

따라서 코드에 나와있는 대로 콘솔 창에 입력해보았다.

 

이렇게 아예 처음부터 입력받는 값과 나와있는 값을 같게 설정한다면?!

 

해결~

문제
페이지 소스코드

평범한 코드이다.

제출 클릭 시

you are not admin이라는 문자열이 뜨고 몇 초 후에 다시 메인 페이지로 돌아간다.

 

guest로 제출

guest를 입력해줬더니 hello guest라는 문자열이 보인다.

 

1234로 제출

 

제출한 값 그대로 나온다.

admin을 제외하고는 모두 이렇게 뜨는 것 같다.

 

하지만, logout을 눌러도 페이지에 변화가 없고,, 주소창도 그대로여서 쿠키를 확인해봤다. 

일반적으로 사용하는 PHPSESSID 말고 userid라는 쿠키가 있다.

 

들어있는 값을 URL 디코더로 돌린 후 %3D=를 의미한다는 것을 알았다.

어떠한 난독화된 값이 =로 끝난다면 이는 base64 로 인코딩된 것일 확률이 높다고 한다.

 

따라서 이것을 base64 방식으로 디코딩하려 했으나 오류만 나고,, 알 수 없는 문자열이 가득.. 

그래서 다시 처음부터 시작

 


 

id에 0을 입력

0을 입력했을 때는 URL 주소가 정상적으로 나타나지만 메인 페이지에 머물러 있다.

따라서 1을 입력해봤다.

 

id에 1을 입력
쿠키값 확인

비교적 짧은 쿠키값이 나왔다. 

이 또한 %3D로 끝난다. base64 방식으로 인코딩 된 것 같아서 base64 방식으로 디코딩해보았다.

 

base64로 디코딩

 

암호 알고리즘 별 해쉬값의 길이를 보니 (https://m.blog.naver.com/PostView.naver?blogId=thescream&logNo=220210025548&proxyReferer=https:%2F%2Fwww.google.com%2F)

 

32자리라면 MD5 해시값이라고 한다.

 

따라서 1을 MD5로 암호화해줬더니 

1을 MD5 방식으로 암호화한 결과

 


 

id에 11을 입력했을 떄의 쿠키값
이 쿠키값을 base64 방식으로 디코딩 한 결과

디코딩 한 결과, 앞서 봤던 1의 결과가 두번 연속으로 나타나는 것을 알 수 있다.

 

 

따라서 이 문제에선 입력한 문자열을 각각 MD5방식으로 암호화한 후, 

전체적으로 base64방식으로 또 한번 암호화하고 있다는 것을 알게되었다.

 

따라서 문제를 해결하려면

① admin 각 문자열에 대해 MD5로 암호화

② 합쳐서 base64로 암호화

③ 쿠키값에 이를 입력

하는 것이 좋겠다.

 

a → 0cc175b9c0f1b6a831c399e269772661

d → 8277e0910d750195b448797616e091ad 

m → 6f8f57715090da2632453988d9a1501b

i → 865c0c0b4ab0e063e5caa3387c1a8741

n →7b8b965ad4bca0e41ab51de7b31363a1

 

base64로 인코딩한 결과

 

이를 쿠키값에 입력할 때 주의할 점!
마지막 =는 %3D로 적어줄 것!!

 

해결~

 

문제
페이지 소스코드

소스코드를 간단히 요약하면

 

1. 우리가 입력하는 값은 'no'라는 이름으로 index.php에 GET 방식으로 넘겨진다.

2. 입력 시 공백  /   (   )   |    &   select   from   0x 문자열은 모두 걸러진다.

3. 우리가 입력하면 select id from chall18 where id='guest' and no=$_GET[no] 이 문장에 들어가게 된다.

 

1을 입력

1을 입력하니 hi guest 문자열이 뜬다.

우리는 admin의 no는 2라는 것을 알고 있다.

따라서 우리는 id가 admin이고 no=2일 때의 result가 나오게 하면 된다.

 

SQL 인젝션 공격으로 문제를 해결해보겠다.

 

where id='guest' and no=입력값

 

where 절에서 true와 false의 경우로 생각해보자.

 

TRUE and TRUE -> TRUE

TRUE and FALSE -> FALSE

TRUE or FALSE -> TRUE

(TRUE and FALSE) or TRUE -> TRUE

 

그러면 우리는 FALSE가 되게 하는 값을 입력해주고 or 로 TRUE 문을 연결해주면 되겠다.

 

입력 : 0 or no=2

 

하지만 이 문제에선 입력할 때 GET 방식으로 요청을 처리하고, 공백을 필터링 해주고 있으므로

URL 창에 입력 & 공백 자리는 URL 인코딩 방식으로 적어준다.

 

 

URL 인코딩 표 참고https://0x3700.tistory.com/entry/SQL-%EC%9D%B8%EC%A0%9D%EC%85%98-%EA%B3%B5%EB%B0%B1-%EC%9A%B0%ED%9A%8C-URL-Encode

:: 공백 문자 필터링 우회 시 %09를 사용한다.

 

 

+ Recent posts