개요
실무 프로젝트 진행하던 와중 특정 파라미터 값에 의하여 서버 내 데이터 정보가 노출되는 취약점을 찾았다. 파라미터에 임의 값을 입력하여 요청하는 경우 서버 내 정보를 비롯하여 서버 OSINT 정보, 고객사 내 자산정보 등 노출되어 Burpsuite 기능 내 Intruducer 을 이용, 데이터를 뽑던 와중 번거러운 작업이라 아예 파싱 코드를 작성하고자 하였다.
Python 의 request 라이브러리로 일반적인 파라미터 요청만 되는줄 알았으나, json도 지원하는 것을 확인하였다.
참고하기 : https://kaisec.tistory.com/entry/Python-Requests-Library
JSON Requests
'json은 지원하지 않을 것으로 판단되는데 어떻게 사용할까' 라는 의문을 가지고 있다가 해답은 구글링이라는 생각이 들어 requests library 확인 결과, json으로 데이터 요청 및 수신 사실을 확인하였다. json 형식으로 요청하는 구문도 어려운 것은 아니였다.
https://requests.readthedocs.io/en/latest/user/quickstart/#json-response-content
JSON List Parsing
import requests
# url 정보는 각 대상에 맞도록 수정이 필요
url = 'https://kaisec.tistory.com/EXAMPLE/example_extention.json'
# 총 갯수 변수 선언
DataNumber = 0
for i in range(100):
# data가 아닌 json 사용
r = requests.post(url, json={
# 데이터가 숫자형일 경우
"data1":format(i)
# 데이터가 특정 문자열일 경우
"data2":"DATA_STRING"
})
# json 형식 (리스트) 데이터 저장
a_data = r.json()
# 데이터 없을 경우 예외처리
if '"DATA":null' in r.text :
print("Data is Null")
else :
# 찾은 데이터 갯수 증감
DataNumber += 1
# 데이터가 JSON 형식으로 {} 두번 묶어져 있으며,
# 원하는 데이터가 list ['name'] 형식으로 각각 ItemName, ItemData 일 경우
all_data = a_data.get('CATA1').get('CATE2')
for item in all_data:
# 요청 파라미터 확인
print("Data Num:", format(i))
# 리스트 아이템 확인
print("Name :", item['ItemName'])
print("Data :", item['ItemData'])
print('')
# 총 데이터 갯수
print(DataNumber)
해당 결과에 대한 파일저장의 경우 필자 본인은 batch 문법을 사용하였다.
'API > Python' 카테고리의 다른 글
Python Requests Library (0) | 2022.06.13 |
---|