Featured image of post HTTP Request(ZAP, Burp) Parsing on Ruby code

HTTP Request(ZAP, Burp) Parsing on Ruby code

XSpear 관련해서 이런 건의사항이 하나 있었습니다. Burp, ZAP 등에서 사용하는 패킷 데이터를 파일로 저장한 후 옵션을 주어 읽으면 자동으로 URL, Header 등을 파싱해서 사용하는 형태를 말씀하신 것 같습니다.(마치 sqlmap의 그것 처럼)

간단하게 처리를 위한 로직 작성해서 블로그 글로 남겨둡니다. 실제로 XSpear에 적용하기까진 각종 방어코드도 들어갈 것 같기 떄문에 오늘은 어렵겠네요 😵‍💫

Algorithm

  1. 개행문자 단위로 잘라냄
  2. 맨 첫줄은 메소드와 URL가 담김
  • 첫줄에선 공백으로 한번 더 잘라서 메소드, Path, HTTP/1.1로 구별
  1. 다음줄부터 헤더 영역으로 ‘: ' 단위로 잘라냄
  2. 잘라낸 데이터의 맨 앞은 헤더이름, 뒤엔 헤더 값이 됨
  3. 헤더 값 중 ‘: ' 이 포함될 수 있으니 처음 잘린 값만 인지

in the Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
r = "GET https://www.hahwul.com/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Connection: keep-alive
Cookie: _ga=GA1.2.1102548207.1555467144; _gid=GA1.2.1362788908.1563875038
Upgrade-Insecure-Requests: 1
Host: www.hahwul.com"

method = ""
path = ""
headers = {}
switch = true

r.each_line do |line|
  if switch
    temp = line.split(" ")
    method = temp[0]
    path = temp[1]
    switch = false
  else
    temp = line.split(": ")
    hn = temp[0]
    hd = line.sub(hn+": ", "")
    headers[hn] = hd
  end
end

# Burp or ZAP
# http, https로 시작하면 zap 아니면 burp 포맷
url = 0 != (path.index('http://').to_i | path.index('https://').to_i) ? path : headers['Host']+path

puts "URL: "+headers['Host']+path
puts "\n"
puts "Method: "+method
puts "\n"
puts "Path: "+path
puts "\n"
puts "Headers\n"+headers.to_s

Test!

1
ruby test.rb
1
2
3
4
5
6
7
8
URL: www.hahwul.comhttps://www.hahwul.com/

Method: GET

Path: https://www.hahwul.com/

Headers
{"User-Agent"=>"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0\n", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n", "Accept-Language"=>"ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3\n", "Connection"=>"keep-alive\n", "Cookie"=>"_ga=GA1.2.1102548207.1555467144; _gid=GA1.2.1362788908.1563875038\n", "Upgrade-Insecure-Requests"=>"1\n", "Host"=>"www.hahwul.com"}
Licensed under CC BY-NC-SA 4.0
Last updated on Apr 24, 2022 23:18 +0900