
웹 애플리케이션 퍼징을 지원하는 Python3 모듈
Python3 모듈 호환
pywebfuzz를 기반으로 한 Py3webfuzz는 웹 애플리케이션, 웹 서비스의 취약점 식별을 지원하는 Python3 모듈로, 무차별 대입, 퍼징 및 분석을 통해 이루어집니다. 이 모듈은 일반적인 테스트 값, 생성기 및 웹 애플리케이션 퍼징, API 엔드포인트 및 웹 익스플로잇 개발에 유용한 기타 유틸리티를 제공합니다.
py3webfuzz는 fuzzdb 및 기타 여러 소스를 Python 클래스, 메서드 및 함수로 구현하여 사용하기 쉽게 만들었습니다. fuzzdb 프로젝트는 테스트용 값의 모음일 뿐입니다. 목적은 fuzzdb 프로젝트 및 기타 소스에서 정리된 값들을 선별하여 Python3 클래스, 메서드 및 네임스페이스를 통해 제공하는 것입니다. 이를 통해 자신의 익스플로잇과 PoC에서 이러한 값을 사용할 때 더 쉽고 편리합니다.
최신 fuzzdb 프로젝트의 폴더 및 값과 이름을 유사하게 맞추기 위해 노력했습니다. 이러한 노력으로 인해 때로는 보기 흉한 네임스페이스가 생길 수 있습니다. fuzzdb 프로젝트에 대한 친숙함이 Python 코드로 이어지도록 균형을 맞췄습니다. 예외는 하이픈을 밑줄로 대체한 부분입니다.
설치는 여러 방법으로 할 수 있습니다. 가상 환경을 사용하려면
http://pypi.python.org/pypi/setuptools
$ git clone https://github.com/jangelesg/py3webfuzz.git
$ cd py3webfuzz/
제공된 setup.py를 install 명령으로 실행할 수 있습니다.
$ python setup.py install
easy_install을 사용할 수도 있습니다. (설치된 패키지를 관리하는 방식에 따라)
$ easy_install py3webfuzz_VERSION.tar.gz
웹에 있는 tar.gz 파일의 위치를 지정할 수도 있습니다.
$ easy_install URL_package
이제 사용할 수 있습니다.
# Accessing SQLi values and encode them for further use
# Import Library
from py3webfuzz import fuzzdb
from py3webfuzz import utils, encoderFuncs
# Instantiate a Class Object that give you access to a set of SQLi values
sqli_detect_payload = fuzzdb.Attack.AttackPayloads.SQLi.Detect()
# Getting Access to those values through a list
for index, payload in enumerate(sqli_detect_payload.Generic_SQLI):
print(f"Payload: {index} Value: {payload}")
# Using encoderFuncs you can get different handy encodings to develop exploits
print(f"SQLi Char Encode: {encoderFuncs.sqlchar_encode(payload)}")
# Send HTTP request to your target
# Import Library
from py3webfuzz import utils
# Custome your target and Headers
location = "http://127.0.0.1:8080/WebGoat/start.mvc#lesson/WebGoatIntroduction.lesson"
headers = {"Host": "ssl.scroogle.org", "User-Agent": \
"Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Mac_68K)",
"Content-Type": "application/x-www-form-urlencoded"}
# at this point you have a dic object with all the elements for your pentest
# "headers": response.headers, "content": response.content, "status_code": response.status_code,
# 'json': response.json, "text": response.text, "time": f"Total in seconds: {time}"
res = utils.make_request(location, headers=headers, method="get")
# print the response
print(res)
