Everything is hacked.

There is no 100 % security.

API/Python

Python Requests Library - JSON List Parsing

Kai_HT 2022. 12. 28. 15:47

개요

실무 프로젝트 진행하던 와중 특정 파라미터 값에 의하여 서버 내 데이터 정보가 노출되는 취약점을 찾았다. 파라미터에 임의 값을 입력하여 요청하는 경우 서버 내 정보를 비롯하여 서버 OSINT 정보, 고객사 내 자산정보 등 노출되어 Burpsuite 기능 내 Intruducer 을 이용, 데이터를 뽑던 와중 번거러운 작업이라 아예 파싱 코드를 작성하고자 하였다.

Python 의 request 라이브러리로 일반적인 파라미터 요청만 되는줄 알았으나, json도 지원하는 것을 확인하였다.

참고하기 : https://kaisec.tistory.com/entry/Python-Requests-Library

 

Python Requests Library

개요 실무 모의해킹 컨설팅이나 CTF 대회, 버그바운티를 진행하다보면 패킷 내 데이터를 지정하여 요청 / 응답 값을 판단해야하는 경우가 생긴다. 예시들로 CTF 에서는 반복되는 URL 에 접근하여 Fl

kaisec.tistory.com

 


JSON Requests

'json은 지원하지 않을 것으로 판단되는데 어떻게 사용할까' 라는 의문을 가지고 있다가 해답은 구글링이라는 생각이 들어 requests library 확인 결과, json으로 데이터 요청 및 수신 사실을 확인하였다. json 형식으로 요청하는 구문도 어려운 것은 아니였다.

https://requests.readthedocs.io/en/latest/user/quickstart/#json-response-content

 

Quickstart — Requests 2.28.1 documentation

Eager to get started? This page gives a good introduction in how to get started with Requests. Let’s get started with some simple examples. Passing Parameters In URLs You often want to send some sort of data in the URL’s query string. If you were const

requests.readthedocs.io


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