目录
起因
编写规则的时候,离不开数据包,但是很多时候,漏洞是不好复现的,甚至是需要在真实的网络环境中复现漏洞才能获取相关数据包,为了避免这种尴尬问题的发生,可以试着制造我们需要的数据包。
制造请求包
如果只是制造请求包,那么使用BurpSuite截包时,改一下内容,随便对着谁发一下就行了
制造请求-响应包⭐
使用phpstudy搭建一个web环境,然后自定义要访问的文件路径,写一个html或者php文本啥的,然后通过web访问一下,可以拿到响应码200的包
优点:制造的更真实(响应码正确)
缺点:每次都需要人工编写web页面
效果:
这里其实是有一个小问题的,如果是这种信息泄露的漏洞,我直接创建路径、创建文件就行了,但如果是命令执行、sql注入、xss呢?又该如何构造数据包呢?举个例子:
假设在网上找到如下请求、响应的流量,你该如何造包呢?
GET /php/ssh_form.php?hostname=%3C/title%3E%3Cscript%3Ealert(1)%3C/script%3E%3Ctitle%3E HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Date: Fri, 05 Mar 2021 15:39:09 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.5
X-Powered-By: PHP/5.3.5
Content-Length: 1455
Connection: close
Content-Type: text/html; charset=utf-8
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="TODO - info">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<title>SSH Session </title><script>alert(1)</script>
这里,就要求懂一点php了:
- 在指定路径中写入一个php文件
2. 直接访问
http://192.168.239.132/php/ssh_form.php?hostname=%3C/title%3E%3Cscript%3Ealert(1)%3C/script%3E%3Ctitle%3E
- 抓包效果符合期望
所用核心代码:
<?php
$hostname = $_GET['hostname'];
if(isset($hostname)){
$str = <<<EOD
字符串
EOD;
echo $str;
}
?>
所用代码:
<?php
$hostname = $_GET['hostname'];
if(isset($hostname)){
$str = <<<EOD
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="TODO - info">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<title>Ping |dir</title>
<link rel='stylesheet' href='css/style.css' type='text/css'>
<link rel='stylesheet' href='css/wait_indicator.css' type='text/css'>
<script src="js/wait_indicator.js" type="text/javascript"></script>
</head>
<body οnlοad="ind_off()" class="new_window">
<!-- dialog -->
<div class="wait_dialog" id="wait_table" style="visibility: visible">
</div>
<table width="530px">
<tr>
<th>Ping</th>
</tr>
<tr>
<td>
<table width="100%">
<tr>
<td>
<pre>
Volume in drive C has no label.
Volume Serial Number is B67A-CF0F
Directory of C:\R-SeeNet\htdocs\php
03/05/2021 06:02 PM <DIR> .
03/05/2021 06:02 PM <DIR> ..
03/03/2017 06:07 PM 6,231 about_form.php
06/25/2013 03:48 PM 3,460 add_company_form.php
10/05/2014 01:20 PM 15,483 add_device_form.php
03/08/2017 01:18 PM 8,186 add_group_form.php
09/09/2014 04:41 PM 12,156 add_user_form.php
06/25/2013 03:48 PM 8,266 appearance_opt.php
03/06/2012 02:18 PM 482 bottom.php
10/17/2016 01:36 PM 4,626 cfg.php
06/07/2012 07:39 AM 1,538 check_user.php
06/25/2013 03:48 PM 6,603 company_change.php
09/10/2020 09:10 AM 14,792 company_list.php
03/04/2021 04:43 PM 657 csv_export.php
05/04/2012 06:26 AM 4,999 daily_report.php
EOD;
echo $str;
// echo "<h1>hello wl</h1>";
// echo "<br />";
// echo "<h2>hello wl</h2>";
}
?>
制造请求-响应包【自定义响应码】⭐⭐
在上文提到,可以通过构造文件来制作数据包,但是,上面的方法还是不尽完美,因为上面只能实现200响应码,不能实现别的响应码。即:我现在的需求是我不仅要自定义响应的内容,还要自定义响应码。
先来看一下上文提到的核心代码:
<?php
$hostname = $_GET['hostname'];
if(isset($hostname)){
$str = <<<EOD
字符串
EOD;
echo $str;
}
?>
我们只需要在这段代码里指定响应码即可:
新的核心代码:
<?php
$hostname = $_GET['hostname'];
$http = array (
100 => "HTTP/1.1 100 Continue",
101 => "HTTP/1.1 101 Switching Protocols",
200 => "HTTP/1.1 200 OK",
201 => "HTTP/1.1 201 Created",
202 => "HTTP/1.1 202 Accepted",
203 => "HTTP/1.1 203 Non-Authoritative Information",
204 => "HTTP/1.1 204 No Content",
205 => "HTTP/1.1 205 Reset Content",
206 => "HTTP/1.1 206 Partial Content",
300 => "HTTP/1.1 300 Multiple Choices",
301 => "HTTP/1.1 301 Moved Permanently",
302 => "HTTP/1.1 302 Found",
303 => "HTTP/1.1 303 See Other",
304 => "HTTP/1.1 304 Not Modified",
305 => "HTTP/1.1 305 Use Proxy",
307 => "HTTP/1.1 307 Temporary Redirect",
400 => "HTTP/1.1 400 Bad Request",
401 => "HTTP/1.1 401 Unauthorized",
402 => "HTTP/1.1 402 Payment Required",
403 => "HTTP/1.1 403 Forbidden",
404 => "HTTP/1.1 404 Not Found",
405 => "HTTP/1.1 405 Method Not Allowed",
406 => "HTTP/1.1 406 Not Acceptable",
407 => "HTTP/1.1 407 Proxy Authentication Required",
408 => "HTTP/1.1 408 Request Time-out",
409 => "HTTP/1.1 409 Conflict",
410 => "HTTP/1.1 410 Gone",
411 => "HTTP/1.1 411 Length Required",
412 => "HTTP/1.1 412 Precondition Failed",
413 => "HTTP/1.1 413 Request Entity Too Large",
414 => "HTTP/1.1 414 Request-URI Too Large",
415 => "HTTP/1.1 415 Unsupported Media Type",
416 => "HTTP/1.1 416 Requested range not satisfiable",
417 => "HTTP/1.1 417 Expectation Failed",
500 => "HTTP/1.1 500 Internal Server Error",
501 => "HTTP/1.1 501 Not Implemented",
502 => "HTTP/1.1 502 Bad Gateway",
503 => "HTTP/1.1 503 Service Unavailable",
504 => "HTTP/1.1 504 Gateway Time-out"
);
header($http[403]);
if(isset($hostname)){
$str = <<<EOD
字符串
EOD;
echo $str;
}
?>
举例如下:
制造请求-响应【通用型】⭐⭐⭐
开启404跳转,不管访问的结果怎么样,都可以访问到指定的文件。
优点:通用
缺点:响应码是404
修改httpd.conf
- 让apache支持.htaccess
概述来说,htaccess文件是Apache服务器中的一个配置文件(是apache才有的),它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。常用于实现伪静态
文件位置(Everything搜一下也行,只有一个结果):
打开文件之后,搜索“AllowOverride none”(搜索结果只有一个),把none
修改为all
- 修改httpd.conf里404页面文件名及路径
搜索“ErrorDocument 404 /missing.html”(搜索结果只有一个)
取消注释,这部主要是关闭默认的404提示页面。然后再重新指定自定义的404页面。
- 重新定义404页面的位置
(1)在网站的根目录下面添加.htaccess
文件
(2)打开.htaccess文件,写入代码:ErrorDocument 404 /missing.html
(3)将404页面missing.html放在网站根目录下面,重新启动apache就可以了。
成品展示
网页有点乱码,这个是因为我html写的非常不规范导致的,但是,抓包没问题就OK了
一点优化
抓包结果,可以看到ip地址,可以通过配置静态IP的方式,假装是真实网络环境抓包😁
制造请求-响应【终极版】⭐⭐⭐⭐
今天在Talos上发现一款神器Re2Pcap
简单来说,这款工具可以让你手动输入http的请求和响应的报文,它会根据你输入的报文内容生成数据包,可谓是办公神器!
官方提供的使用动态图如下:
目前网络上仅在油管搜到一个相关视频,是他们官方的,但是对于萌新还是略显不大友好,我这里就详细记录一下使用过程。
系统使用kali,由于该工具依赖docker,先装dockr,网上装docker的教程一大堆,我这里按照vulhub的教程来:https://vulhub.org/#/docs/install-docker-compose/
1. 更新包
2. 安装docker
apt install docker.io
3. 下载Re2Pcap
git clone https://github.com/Cisco-Talos/Re2Pcap.git
cd Re2Pcap/
4. 启动Re2Pcap
执行如下命令后,首先会下载镜像,下载完毕之后,就会启动Re2Pcap
docker run --rm --cap-add NET_ADMIN -p 5000:5000 --name re2pcap amitraut/re2pcap
5. 浏览器访问
浏览器访问,果然看到了期待中的页面
写点东西进入试试
生成数据包,然后看看,符合预期
最最让人惊喜的是,生成数据包的这个过程,不用联网!!!
我关了wifi(右下角qq已下线,出现地球图标),依然可以生成数据包,Re2Pcap真是办公神器!!!
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134315.html