yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

HTTP 요청 메시지, Fuzzing 본문

개발/Python

HTTP 요청 메시지, Fuzzing

yehey 2020. 9. 21. 17:21

HTTP 기초 -> 2020/09/08 - [웹/웹 기초] - HTTP

 

python을 이용해서 HTTP 요청 메시지를 간단하게 보내보자.

 

1. GET 요청메시지

import requests

host = "http://192.168.56.105"
res =requests.get(host)     #응답

#응답 태그 읽기
print(res.status_code)      #200일때 잘 실행된 것
print(res.raise_for_status()) #오류일 때 오류 확인용
print(res.content)
print(res.text)

 

2. GET 요청 메시지에 파라미터를 같이 전달

import requests

host="https://www.naver.com/"
my_prams = {'id':'my_id', 'pw':'password'}
#파라미터는 URL?뒤에 있는 전달되는 데이터

response=requests.get(host,params=my_prams)

print(response.status_code) 
print(response.raise_for_status())
print(response.content)
print(response.text)

 

3. POST 요청 메시지에 데이터를 같이 전달

import requests, json

host="https://www.naver.com/"
my_data = json.dumps({'id': 'my_id', 'pw': 'password'})
res = requests.post(host, data=my_data)

print(res.status_code) #응답 코드만 전달

 

4. HTTP 요청에 헤더와 쿠키를 추가해서 전달

import requests, json

host="https://www.naver.com/"
my_data = json.dumps({'id': 'my_id', 'pw': 'password'})
res = requests.post(host, data=my_data)

print(res.status_code) #응답 코드만 전달

 

=>4가지 모두 실행시켰을 때 200이 출력되면 정상적으로 응답

(200 OK = 웹 서버의 응답 코드/텍스트)

 

 

 

BOF를 이용한 웹 서버 Fuzzing

 

Fuzzing: 비정상적인 데이터(다양하고 잠재적 위협을 가진 입력 값)를 애플리케이션에 전달, 에러를 유도해서 보안 취약점을 탐지하는 것

 

Fuzzing으로 탐지할 수 있는 보안 취약점: BOF, Integer overflow, Format string 취약점, SQL injection, XSS, File system attacks 등

 

BOF를 이용한 웹 서버 Fuzzing:  HTTP 요청의 value에 아주 큰 버퍼를 넣어서 서버가 다운되는지 확인 및 점검

 

Fuzzing을 위한 간단한 코드

import requests, copy #copy 라이브러리

host="http://xxxxxxxx" #점검할 서버 host
uri= "/xxxxxxx"	#uri

org_headers={	#전달할 헤더
    "USER-AGENT": "Mozilla/4.0",
    "HOST" : host.split("://")[1],
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language":"en-us",
    "Accept-Encoding": "gzip, deflate",
    "Referer": host,
    "Connection": "Keep-Alive"
    }

org_cookies={	#쿠키
    "SESSIONID":"6771",
    "UserID": "id",
    "PassWD": "password"
    }


payload = "A"*n #BUG가 나오는 입력 n (BOF가 나는 n을 찾아야함)  

for key in list(org_headers.keys()):
#전달할 헤더의 value에 원래 값이 아닌 A를 n개 넣어 서버가 다운되는지 확인

    print("Header",key,end=": ") #\n-->: 로 바꿈 
    try:
        headers=copy.deepcopy(org_headers)#headers copy
        headers[key]=payload
        res=requests.get(host + uri, headers=headers, cookies=org_cookies)
        print(": Good")#다운되지 않고 요청이 잘 전달되어 응답을 받았을 때
    except Exception as e:
        print(e[:10])# 서버 다운되었을 때
        

for key in list(org_cookies.keys()):
#쿠키의 value에 원래 값이 아닌 A를 n개 넣어 서버가 다운되는지 확인

    print("Header",key,end=": ") #\n-->: 
    try:
        cookies=copy.deepcopy(org_cookies)#cookies copy
        cookies[key]=payload
        res=requests.get(host + uri, headers=org_headers, cookies=cookies)
        print(": Good")#요청이 전달되어 응답을 받았을 때
    except Exception as e:
        print(e[:10])#서버 다운 되었을 때

 

Comments