https://jjadmin.tistory.com/24

 

XSS

※개인학습을 위해 OWASP Top 10 문서를 번역한 내용 1. XSS 공격의 개요 OWASP TOP 10에 매년 이름을 올리는 원초적이나 보안이 쉽지 않은 공격기법이다. 악의적인 사용자가 공격 대상이 되는 사이트에

jjadmin.tistory.com

https://twoicefish-secu.tistory.com/198

 

크로스사이트 스크립팅(XSS) 검증 필살기 모음

">asdfalert('xss');">alert(1);/>alert('xss');"/>prompt('test', 'test');">asdfasdf">aaaaasdfprompt()asd"+onfocus="alert(/xss/)"+autofocus=     -->

twoicefish-secu.tistory.com

https://sungpil94.tistory.com/307

 

XSS 우회

1. 세미콜론(;)이 필터링될때 -> ;대신 -로 사용 2. document.cookie에서 .가 필터링될때 -> document.cookie 대신 document[`cookie`]로 사용 3. location.href로 이동되는 값을 임의로 변조할때 -> query 파라미터 값을

sungpil94.tistory.com

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

 

Cross-Site Scripting (XSS) Cheat Sheet - 2022 Edition | Web Security Academy

Interactive cross-site scripting (XSS) cheat sheet for 2022, brought to you by PortSwigger. Actively maintained, and regularly updated with new vectors.

portswigger.net

https://itinformation.tistory.com/49

 

TRACE와 XST(Cross-site Tracing) 공격

cross site tracing (XST 공격) XST 공격이란 기본적으로 HTTP 메소드 중 하나인 TRACE메소드를 이용한 XSS기법 중 하나이다. 서버에서 TRACE 메소드를 지원하고 있을 때, 클라이언트가 서버로 TRACE 요청을 보

itinformation.tistory.com

 

'WEB > WEB Hacking' 카테고리의 다른 글

Webhacking.kr Challenge(old) 23번 풀이  (0) 2021.11.15
[Webhacking.kr] Challenge(old) 55번 풀이  (0) 2021.11.10
wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 39번 풀이  (0) 2021.06.07
[Webhacking.kr] Challenge(old) 38번 풀이  (0) 2021.06.04

문제

<script>alert(1);</script>를 넣어야 한다고 쓰여있다.

 

따라서 빈칸에 일단 <script>alert(1);</script>를 넣어주니

 

no hack

no hack이 뜬다

 

계속 입력해본 결과, 

sc, al과 같은 문자+문자. 즉, 문자열 조합은 입력 허용되지 않고

<, <>, >등 문자 하나는 입력 허용되며

</>를 입력하면 입력한 것이 사라진다.

 

 

따라서, 

<</>s</>c</>r</>i</>p</>t>a</>l</>e</>r</>t</>(1);<</>/s</>c</>r</>i</>p</>t>

입력결과

엥 이게 아닌가..?

 

ㅎㅎ 아니었다

 

 

문자 하나는 걸러내지 못하고 문자열은 걸러내는 것을 보니

문자를 구분해서 보내면서 서버에서 문자열로 취급할 수 있도록 입력을 해야하는데

찾아보니  urlencoding 방법을 사용하면 이 문제를 쉽게 풀 수 있다고 한다.

 

 

NULL은 URL인코딩 시 %00으로 

 

 

<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t%00(1);<%00/%00s%00c%00r%00i%00p%00t>

입력 시 

해결

'WEB > WEB Hacking' 카테고리의 다른 글

XSS 취약점 참고  (0) 2022.11.29
[Webhacking.kr] Challenge(old) 55번 풀이  (0) 2021.11.10
wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 39번 풀이  (0) 2021.06.07
[Webhacking.kr] Challenge(old) 38번 풀이  (0) 2021.06.04

마우스를 이동할 때마다 monster가 움직인다

 rank 링크 클릭

rank.php와 문제 해결에 도움을 줄 문구가 적혀있다.

 

score 값을 각각 다르게 넘겨주니 각각 다른 id 값이 나왔다.

 

 

and 참 구문
and 거짓 구문

참과 거짓에 따라 나오는 결과가 다르니 SQL Injection 공격을 시도할 수 있겠다.

 

 

 

 

Procedure analyse() 를 사용하여 쿼리 명령 시 DB명.테이블명.컬럼명 획득이 가능하다.

하지만, procedure analyse()라는 함수는 limit 절 뒤에 사용이 가능하다.

즉, limit 구문을 앞에 추가하여 필드를 차례로 뽑아내는 것이 가능하다는 이야기이다.

 

~ limit 0,1 procedure analyse()   // 첫째 필드

~ limit 1,1 procedure analyse()   // 둘째 필드

limit 2,1 procedure analyse()   // 셋째 필드

이를 통해 알게 된 사실?

컬럼명 : id / score / p4ssword_1123581321

 

 

p4ssword_1123581321 컬럼의 length를 알기 위해 score=1 일 때

id 값이 Piterpan 이었다는 점을 이용하여 

참 구문일 때의 length 값이 뜨도록 하였다.

 

길이는 31임이 확실해졌다!

 

 

 

이제 p4ssword_1123581321 컬럼의 문자열을 알기위해 score=1 일 때

id 값이 Piterpan 이었다는 점을 이용하여 

참 구문일 때의 문자열이 순차적으로 뜨게 하였다.

 

하지만... 기다려도 안 돼서 확인해보니까 

no hack!! 

 

이 후 알게된 것

1. ascii 함수는 막아놨다 → ord 또는 hex 이용

2. substr 함수도 막아놨다 → right, left, mid 이용

 

 

해결

'WEB > WEB Hacking' 카테고리의 다른 글

XSS 취약점 참고  (0) 2022.11.29
Webhacking.kr Challenge(old) 23번 풀이  (0) 2021.11.15
wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 39번 풀이  (0) 2021.06.07
[Webhacking.kr] Challenge(old) 38번 풀이  (0) 2021.06.04

퍼징?

- 공격대상 시스템의 보안 취약점을 탐지하기 위하여 목표 애플리케이션에 대한 다양한 입력 값을 전송하는 결함 주입에 근거. 목표 애플리케이션의 입력 값 검증을 우회하며 동시에 보안 취약점을 탐지할 수 있도록 입력 값을 변경하는 것이 중요

비정상적인 데이터를 애플리케이션에 전달하여 에러를 유도하는 방법

 

웹 퍼징?

-  웹 퍼징 기술은 SQL injection, Cross Site Scripting(XSS) 등과 같은 보안 취약점의 유형을 탐지

 

<웹 퍼징 도구 wfuzz>

- “The Web application Bruteforcer”. 무차별 공격을 위해 설계된 도구로 연결되지 않은 리소스(디렉토리, 서블릿, 스크립트 등)를 찾거나, 다양한 종류의 인젝션 공격(SQL, XSS, LDAP )을 위한 GET POST 파라미터에 무차별 대입을 하거나, Form 파라미터(User/Password) 에 무차별 대입을 하는데 사용

- 퍼징 속도가 매우 빠르며 퍼징해야 하는 부분을 세밀하게 조절 (특정 파라미터에 입력된 Value 값의 범위를 지정) 가능

- 칼리 리눅스에서는 기본적으로 제공

- Hidden 파일 뿐만 아니라 서버 Config 경로, 버전 정보등을 찾는데도 유용하게 사용 가능

 

- 칼리 리눅스는 /usr/share/wordlistswordlists들을 저장

※※ wordlists는 사전 파일로, 웹 서비스에서 계정 정보를 찾기 위한 무작위 대입 공격을 할 때, 웹 서비스의 디렉터리(링크, 관리자 페이지, 테스트 페이지)와 파일 구조를 파악할 때, FTP/SSH/Telnet 등 계정 정보에 무작위 대입 공격할 때, 압축 파일을 해제하기 위해 무작위 대입 공격을 할 때 등에 사용된다. ※※

 

$ locate wordlists 명령어 여러가지 도구에서 사용되는 wordlist 디렉토리 정보들과 이와 관련된 파일들을 볼 수 있음

 

locate wordlists 입력시 

 

+) cewl, crunch 등은 이런 사전 파일을 만들어내는 툴

 

 

 

- wfuzz 옵션

* -c : 결과물을 읽기 쉽도록 터미널 창에 색을 넣어줌

* -z 또는 -w: 퍼징을 위한 payload(가 담긴 경로) (file,/usr/share/wordlists/wfuzz/Injections/SQL.txt)

* -d : POST(혹은 GET) 방식을 통해 서버에 넘겨지는 데이터(“username=INPUT&password=INPUT”)

* -u : 대상 애플리케이션 URL 주소

* -hc, -hl, -hw, -hh 옵션 : 특정 코드, 라인, 단어, 문자 등 숨긴 후 결과 제공

* -t 옵션 : 동시 요청 수를 늘리거나 줄여서 공격이 더 빨리 혹은 더 느리게 진행되도록 함

* -s 옵션 : 다른 요청을 수행하기 전 지정된 시간() 동안 중지하도록 지시

 

예시 로그인 페이지

UserName, Password에 각각 username과 password 입력

burp suite 와 같은 툴로 서버에 넘어가는 데이터 확인(username=username&password=password)

 

$ Wfuzz -c -z file,/usr/share/wordlists/wfuzz/Injections/SQL.txt -d “username=admin&password=FUZZ” -u <TARGET_URL>

output

각 쿼리가 입력되었을 때 서버의 응답을 알 수 있다.

200 : 에러 혹은 리다이렉션 일어나지 않음(적절한 에러 핸들링이 된 것) → 공격 실패

302 : 302 Redirection(요청한 리소스가 임시적으로 새로운 URL 이동)이 일어남 (로그인의 경우, 성공적으로 인증되었다는 뜻) → 공격 성공 → 취약점이 있다고 판단

 

 

https://scottc130.medium.com/how-to-use-wfuzz-to-fuzz-web-applications-8594c11d59d1

 

How to use Wfuzz to Fuzz Web Applications

A tutorial on how to use the wfuzz command line utility to find vulnerabilities in web applications

scottc130.medium.com


<common directory(서버 및 클라이언트가 공유하는 디렉토리)를 찾아내는 wfuzz 예시>

$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

알려진 디렉터리 이름(/admin, /master, /bbs, /etc )이 노출되면 이에 접속 시도할 수 있음 → 위험하다고 판단

 

<common file을 찾아내는 wfuzz 예시>

$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ.php

 

 

1) URL 퍼징

: ? 뒤에 FUZZ 키워드 작성

‘cat’ 파라미터에 대한 입력 값 범위 지정 가능(range)

$ wfuzz -z range,0-10 --hl 97 http://testphp.vulnweb.com/listproducts.php?cat=FUZZ

 

 

2) POST Requests 퍼징

: HTML에서의 폼 형태의 데이터에 -d 옵션을 통해 퍼징

 

$ wfuzz -z file,wordlist/others/common_pass.txt -d "uname=FUZZ&pass=FUZZ"      --hc 302 http://testphp.vulnweb.com/userinfo.php

 

 

3) Cookie 퍼징

: -b 옵션을 통해 퍼징

$ wfuzz -z file,wordlist/general/common.txt -b cookie=value1 -b cookie2=value2 http://testphp.vulnweb.com/FUZZ

 

아래와 같은 HTTP 요청을 생성하게 됨

 

아래와 같은 방법으로도 가능

$ wfuzz -z file,wordlist/general/common.txt -b cookie=FUZZ http://testphp.vulnweb.com/

 

 

4) Custom headers 퍼징

: HTTP 헤더는 기본적으로 비활성화 되어있다. 따라서 이를 활성화하러면 퍼징에 포함할 헤더 목록을 지정해야 한다. -H 옵션을 이용

$ wfuzz -z file,wordlist/general/common.txt -H "myheader: headervalue" -H "myheader2: headervalue2" http://testphp.vulnweb.com/FUZZ

 

아래와 같은 HTTP 요청을 생성

 

User Agent를 지정하는 등의 기존 헤더를 수정할 시 아래와 같이 입력

$ wfuzz -z file,wordlist/general/common.txt -H "myheader: headervalue" -H "User-Agent: Googlebot-News" http://testphp.vulnweb.com/FUZZ

 

→ 아래와 같은 HTTP 요청 생성

아래와 같은 방법으로도 가능

$ wfuzz -z file,wordlist/general/common.txt -H "User-Agent: FUZZ" http://testphp.vulnweb.com/ 

 

 

 

5) HTTP Verbs(HTTP Method - GET,POST 방식) 퍼징

: -X, -X HEAD 옵션

 

$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/  

→  요청 후 전송되어 온 패킷을 분석하여 HTTP 헤더가200 OK를 포함하면 해당 메소드로 요청시 인증 우회가 가능할 것으로 판단

 

 

 

 

6) Proxies

: 프록시 사용을 원한다면 -p 옵션 사용

$ wfuzz -z file,wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ

 

아래와 같이 중복 사용도 가능

$ wfuzz -z file,wordlist/general/common.txt -p localhost:8080 -p localhost:9090 http://testphp.vulnweb.com/FUZZ

 

 

7) Authentication (인증)

: 보통 HTTPBasic 인증 방식을 사용.  –basic/ntlm/digest(각각은 인증 프로토콜) 옵션 사용

 

$ wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx 

→ 인코딩 되지 않은 문자열 "httpwatch"가 사용되었으며 HTTP 요청을 가로챌 수 있는 모든 사용자가 쉽게 사용할 수 있다 위험하다고 판단

 

 

 

8) Recursion

: -R 옵션 사용.

예를 들어 동일한 payload를 사용하여 기존 디렉토리를 검색했지만 다시 퍼징하는 경우

 

$ wfuzz -z list,"admin-CVS-cgi\-bin"   -R1 http://testphp.vulnweb.com/FUZZ

 

https://wfuzz.readthedocs.io/en/latest/ 

 

Wfuzz: The Web fuzzer — Wfuzz 2.1.4 documentation

Wfuzz: The Web fuzzer Wfuzz provides a framework to automate web applications security assessments and could help you to secure your web applications by finding and exploiting web application vulnerabilities. See Wfuzz in action Wfuzz cli: $ wfuzz -w wordl

wfuzz.readthedocs.io


<그 외 옵션> 

 

https://tools.kali.org/web-applications/wfuzz

 

Wfuzz

Wfuzz is a tool designed for bruteforcing Web Applications, it can be used for finding resources not linked (directories, servlets, scripts, etc), bruteforce GET and POST parameters for checking different kind of injections (SQL, XSS, LDAP,etc), bruteforce

tools.kali.org

Options:
    -h/--help           : This help
    --help              : Advanced help
    --version           : Wfuzz version details
    -e <type>           : List of available encoders/payloads/iterators/printers/scripts
   
    --recipe <filename>     : Reads options from a recipe
    --dump-recipe <filename>    : Prints current options as a recipe
    --oF <filename>         : Saves fuzz results to a file. These can be consumed later using the wfuzz payload.
   
    -c              : Output with colors
    -v              : Verbose information.
    -f filename,printer         : Store results in the output file using the specified printer (raw printer if omitted).
    -o printer                  : Show results using the specified printer.
    --interact          : (beta) If selected,all key presses are captured. This allows you to interact with the program.
    --dry-run           : Print the results of applying the requests without actually making any HTTP request.
    --prev              : Print the previous HTTP requests (only when using payloads generating fuzzresults)
   
    -p addr             : Use Proxy in format ip:port:type. Repeat option for using various proxies.
                      Where type could be SOCKS4,SOCKS5 or HTTP if omitted.
   
    -t N                : Specify the number of concurrent connections (10 default)
    -s N                : Specify time delay between requests (0 default)
    -R depth            : Recursive path discovery being depth the maximum recursion level.
    -L,--follow         : Follow HTTP redirections
    -Z              : Scan mode (Connection errors will be ignored).
    --req-delay N           : Sets the maximum time in seconds the request is allowed to take (CURLOPT_TIMEOUT). Default 90.
    --conn-delay N              : Sets the maximum time in seconds the connection phase to the server to take (CURLOPT_CONNECTTIMEOUT). Default 90.
   
    -A              : Alias for --script=default -v -c
    --script=           : Equivalent to --script=default
    --script=<plugins>      : Runs script's scan. <plugins> is a comma separated list of plugin-files or plugin-categories
    --script-help=<plugins>     : Show help about scripts.
    --script-args n1=v1,...     : Provide arguments to scripts. ie. --script-args grep.regex="<A href="(.*?)">"
   
    -u url                      : Specify a URL for the request.
    -m iterator         : Specify an iterator for combining payloads (product by default)
    -z payload          : Specify a payload for each FUZZ keyword used in the form of name[,parameter][,encoder].
                      A list of encoders can be used, ie. md5-sha1. Encoders can be chained, ie. md5@sha1.
                      Encoders category can be used. ie. url
                                  Use help as a payload to show payload plugin's details (you can filter using --slice)
    --zP <params>           : Arguments for the specified payload (it must be preceded by -z or -w).
    --slice <filter>        : Filter payload's elements using the specified expression. It must be preceded by -z.
    -w wordlist         : Specify a wordlist file (alias for -z file,wordlist).
    -V alltype          : All parameters bruteforcing (allvars and allpost). No need for FUZZ keyword.
    -X method           : Specify an HTTP method for the request, ie. HEAD or FUZZ
   
    -b cookie           : Specify a cookie for the requests. Repeat option for various cookies.
    -d postdata             : Use post data (ex: "id=FUZZ&catalogue=1")
    -H header           : Use header (ex:"Cookie:id=1312321&user=FUZZ"). Repeat option for various headers.
    --basic/ntlm/digest auth    : in format "user:pass" or "FUZZ:FUZZ" or "domain\FUZ2Z:FUZZ"
   
    --hc/hl/hw/hh N[,N]+        : Hide responses with the specified code/lines/words/chars (Use BBB for taking values from baseline)
    --sc/sl/sw/sh N[,N]+        : Show responses with the specified code/lines/words/chars (Use BBB for taking values from baseline)
    --ss/hs regex           : Show/hide responses with the specified regex within the content
    --filter <filter>       : Show/hide responses using the specified filter expression (Use BBB for taking values from baseline)
    --prefilter <filter>        : Filter items before fuzzing using the specified expression.

    -A              : Alias for --script=default -v -c
    --script=           : Equivalent to --script=default
    --script=<plugins>      : Runs script's scan. <plugins> is a comma separated list of plugin-files or plugin-categories
    --script-help=<plugins>     : Show help about scripts.
    --script-args n1=v1,...     : Provide arguments to scripts. ie. --script-args grep.regex="<A href="(.*?)">"
   
    -u url                      : Specify a URL for the request.
    -m iterator         : Specify an iterator for combining payloads (product by default)
    -z payload          : Specify a payload for each FUZZ keyword used in the form of name[,parameter][,encoder].
                      A list of encoders can be used, ie. md5-sha1. Encoders can be chained, ie. md5@sha1.
                      Encoders category can be used. ie. url
                                  Use help as a payload to show payload plugin's details (you can filter using --slice)
    --zP <params>           : Arguments for the specified payload (it must be preceded by -z or -w).
    --slice <filter>        : Filter payload's elements using the specified expression. It must be preceded by -z.
    -w wordlist         : Specify a wordlist file (alias for -z file,wordlist).
    -V alltype          : All parameters bruteforcing (allvars and allpost). No need for FUZZ keyword.
    -X method           : Specify an HTTP method for the request, ie. HEAD or FUZZ
   
    -b cookie           : Specify a cookie for the requests. Repeat option for various cookies.
    -d postdata             : Use post data (ex: "id=FUZZ&catalogue=1")
    -H header           : Use header (ex:"Cookie:id=1312321&user=FUZZ"). Repeat option for various headers.
    --basic/ntlm/digest auth    : in format "user:pass" or "FUZZ:FUZZ" or "domain\FUZ2Z:FUZZ"
   
    --hc/hl/hw/hh N[,N]+        : Hide responses with the specified code/lines/words/chars (Use BBB for taking values from baseline)
    --sc/sl/sw/sh N[,N]+        : Show responses with the specified code/lines/words/chars (Use BBB for taking values from baseline)
    --ss/hs regex           : Show/hide responses with the specified regex within the content
    --filter <filter>       : Show/hide responses using the specified filter expression (Use BBB for taking values from baseline)
    --prefilter <filter>        : Filter items before fuzzing using the specified expression.

 

 

문제

아무 문자를 입력해봐도 변화가 없다.

소스코드

 

이 문제에서 포인트가 되는 부분은

 

1) where 문의 뒷 부분에서 id=' 의 작은 따옴표(')가 제대로 안 닫혀있다는 점

2) 입력값에 있는 '는 str_replace을 통해 ' '로 바꾼다는 점

3) substr를 통해 입력값 중 첫 번째 문자부터 15번째 문자까지만 id에 저장한다는 점

 

이라고 생각했다.

 

 

15번째에서 잘린다면 마지막 15번째 문자열에 '를 입력해서 작은 따옴표가 2개가 되는 것을 방지할 수 있을거라 예측

(where문을 완성시키기 위해 '를 넣어야 하므로)

where 조건 중 id 값은 길이가 14를 넘어가면 안 된다는 점을 주의

 

 

따라서 아래와 같이 입력해주었다.

실제로 member 테이블에 있을 것만 같은 guest 문자열을 입력한 후 공백을 통해 14번째 자리까지 채웠고

'를 15번째에 입력해줬다.

 

 

'WEB > WEB Hacking' 카테고리의 다른 글

[Webhacking.kr] Challenge(old) 55번 풀이  (0) 2021.11.10
wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 38번 풀이  (0) 2021.06.04
[Webhacking.kr] Challenge(old) 36번 풀이  (0) 2021.06.03
[Webhacking.kr] Challenge(old) 33번 풀이  (0) 2021.06.02

문제
페이지 소스코드
admin 입력 결과

admin을 입력하니 you are not admin 이라 한다.

 

admin.php 접속

admin.php에 접속해보니 밑에는 내 PC에서 순서대로 입력했던 값이 나와있는 것을 확인했고, 위쪽에 183.98.10.141로 접속한 PC의 명령어가 그대로 나와있다. admin으로 접속하기 위한 시도인 듯 하다.

 

이 페이지에서 기록하는 Log는 IP:입력값 형태인 듯 싶다. IP:admin이면 풀리는 문제인 것 같은데 admin을 입력했을 때는 여기에 기록은 안되고 페이지에 단지 you are not admin이라는 문자열만 띄운다.

그리고 보통 개행문자를 이용해 Log Injection을 한다고 하는데 앞의 시도를 보면 이 문제에선 왜인지 그게 안통하는 듯 하다.

 

나의 시도,,,,,

 

그러다가 아예 입력을 여러 줄로 할 수 있다면? 이라는 생각이 들어 페이지 코드를 직접 수정하였다.

html 코드 수정

text 타입 대신에 여러 줄을 쓸 수 있는 textarea를 넣어 html 코드를 수정한 후 Log Injection을 시도하였다.

 

해결

'WEB > WEB Hacking' 카테고리의 다른 글

wfuzz  (0) 2021.07.10
[Webhacking.kr] Challenge(old) 39번 풀이  (0) 2021.06.07
[Webhacking.kr] Challenge(old) 36번 풀이  (0) 2021.06.03
[Webhacking.kr] Challenge(old) 33번 풀이  (0) 2021.06.02
[Webhacking.kr] Challenge(old) 27번 풀이  (0) 2021.05.30

문제

"현재 디렉토리에서 vi editor를 사용해 index.php 파일을 수정하는 동안, 정전으로 인해 소스코드가 사라지게 되었다.

복구시키는 것을 도와달라" 고 하고 있다.

 

 

vi 편집기에 대한 지식을 요구하는 문제이다. 잘 몰랐기 때문에 이 부분에 대해서 찾아보았다.

vi 편집기를 사용하다가 파일작업이 정상종료 되지 않으면 임시 스왑파일 swp이 생성된다.
vi 에디터를 정상적으로 종료하면 자동으로 제거되는 파일이지만, 이 파일이 남아있다는 것은 정상종료를 하지 않은 것이다. (참고로 파일 이름 앞에 . 이 있다는 것은 숨김파일을 의미함)

 

그러면 이 문제에서 index.php 작성 중 정상적 종료를 하지 못했으므로 .index.php.swp 파일이 생겼을 것이다.

 

URL에 입력

.index.php.swp라고 입력했더니 swp 파일이 다운로드 받아졌다.

 

열어보니 이러한 구성을 띄고 있었다. 해석할 수 없기 때문에 다른 에디터로 열어보았다.

 

$flag 값 발견

Auth 페이지에 들어가 해당 flag 값을 입력했더니 문제 풀이에 성공하였다.

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에 적어주면 될 것 같다.

ㅜㅜ 끝

문제
페이지 소스코드

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 는 자동으로 디코딩 하는 성질이 있다.

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

 

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

+ Recent posts