好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTTP代理实现请求报文的拦截与篡改实现篡改功能后的演示+源码下载

HTTP代理实现请求报文的拦截与篡改实现篡改功能后的演示+源码下载

HTTP代理实现请求报文的拦截与篡改9--实现篡改功能后的演示+源码下载

返回目录

  前面我们用了 N 多的篇幅完成了拦截部分的分析  , 今天我们就开始来进行篡改部分的分析。 和拦截部分一样,在开始前我们先看看软件在实现了篡改功能后的样子。这样有助于理解代码.    

   同样的,编译后的程序放在了附录的根目录下的 build 文件夹里,不过和前面的附录相比,这次在根目录下多出了一个 testwebsite 的文件夹 。这是个 VS2010 的 WEBSITE 工程(其它版本的 VS 运行如果出问题,请自行解决问题 : ) ),在 VS 里直接 文件 (File)--> 打开 (Open)--> 站点 (Website) ,然后选中这个文件夹就可以导入了。导入后会发现,这个项目里除了 web.config 外就只有一个  Default.aspx  以及他的 cs 文件。我们打开 Default.aspx  。

 <%  @ Page Language  =  "  C#  "   AutoEventWireup  =  "  true  "   CodeFile  =  "  Default.aspx.cs  "   Inherits  =  "  _Default  "   %> 
 <!  DOCTYPE html  > 
 <  html   xmlns  ="http://www.w3.org/1999/xhtml"  > 
 <  head   runat  ="server"  > 
   <  style  >  
    div.result   {  border  :  1px solid #ababab  ;  padding  :  6px  ;  background  :  #efefef  ;  width  :  280px  }  
      div.result span   {  color  :  red  } 
   </  style  > 
   <  title  ></  title  > 
 </  head  > 

 <  body  > 
   <  form   action  ="Default.aspx?id=1"   method  ="post"  >  
    username:  <  input   type  ="text"   name  ="username"   value  ="<%=Request.Form["  username"] %  >  " />
      <  input   type  ="submit"   value  ="submit"   /> 
   </  form  > 
   <  div   class  ="result"  >  
    id:  <  span  >  <%  =  Request.QueryString[  "  id  "  ]  %>  </  span  ><  br   />  
    username:  <  span  >  <%  =  Request.Form[  "  username  "  ]  %>  </  span  ><  br   /> 
   </  div  > 
 </  body  > 
 </  html  > 

  上面的代码非常简单,就是第一次进入后,显示如下的界面   

  然后点击 submit 按钮后,就会在灰色的那个方框架内显示出使用 GET 方法提交的 id 值 ( 从地址栏 ) 以及使用 Post 方法提交的 username 值 。 

  我们后面的拦截与篡改的演示全部是基于这个页面的,所以在演示前,各位最好导入一下这个工程,当然你们的地址可能和我后面提到的不一样 ( 这依赖于你们是如何配置的 ) ,这个问题不大,到时候你们按照你们自己的地址改就是了。反正无论如何,你们只要能把这个页面运行起来就行了。 当然你们如果嫌麻烦,也可以使用现成的网页例如  www.baidu.com  等等进行测试 。 

  好的,下面我们正式开始。先运行 build 文件夹下的程序,当然如果你打开了 source 下的源码,也可以直接在 VS 里运行 。 

  然后,切换到 testwebsite 那个工程

 

  在 Default.aspx 上右键 -->  在浏览器中查看。 

  这时候就会在浏览器中打开这个页面了。我这边打开的地址是 http://localhost:4579/testwebsite/Default.aspx  。 

  Okay  ,回到程序。

  看选中的那行, OKAY ,我们已经成功拦截到我们自己的这个页面了。

  下面我们就来篡改了。当然刚才那次请求已经没办法进行篡改了,因为没有下断点,所以并没有办法在转发到服务前进行中断。 

  那么如何下断点呢,很简单,在左边最下边的黑框里输入

 bpu localhost:4579/testwebsite/Default.aspx  

  

  这样当我们拦截到 localhost:4579/testwebsite/Default.aspx  这个网址的时候,就会在 将请求转发到服务前中断下来,这样我们就可以在这个时候更改请求报文,然后,再将这个改过的报文继续发送到服务器,这样就实现了篡改。当然现在不明白这些也没问题,先看表象是什么样的。

   输入  bpu localhost:4579/testwebsite/Default.aspx   后。回车,这时候会发现文本框清空了,这说明断点已经下完成了 。  注  bpu  是  breakpointurl  的缩写 。 

   下完断点后,我们切换到刚才的网址 (http://localhost:4579/testwebsite/Default.aspx)  。 

 

  在文本框里输入  aaa  点  submit  。  

  注 : 千万不要重新打开网址,否则在打开的时候就会被断下来了。  

  这时候我们会发现我们的程序弹到了最前面,或者在任务栏上闪动提示,这说明我们已经将 localhost:4579/testwebsite/Default.aspx   这个地址断下来了。这时候看看程序界面

   有一栏红色背景的,看一下,正是我们的页面,红色背景说明这是被断下来的页面,然后选中红色的那一行 。 

  看右边 , 文本框 

POST /testwebsite/Default.aspx? id=1  HTTP/ 1.1  
Host: localhost:  4579  
Proxy -Connection: keep- alive
Content -Length:  12  
Cache -Control: max-age= 0  
Origin: http:  //  localhost:4579 
User-Agent: Mozilla/ 5.0  (Windows NT  6.2 ; WOW64) AppleWebKit/ 537.1  (KHTML, like Gecko) Chrome/ 21.0 . 1180.89  Safari/ 537.1  
Content -Type: application/x-www-form- urlencoded
Accept: text /html,application/xhtml+xml,application/xml;q= 0.9 ,*/*;q= 0.8  
Referer: http:  //  localhost:4579/testwebsite/Default.aspx 
Accept- Encoding: gzip,deflate,sdch
Accept -Language: zh-CN,zh;q= 0.8  
Accept -Charset: GBK,utf- 8 ;q= 0.7 ,*;q= 0.3  

username=aaa 

  第一行红色的部分 ( id=1 ) ,这是 GET 提交的部分。

  再看最后一行 username=aaa  这是 POST 提交的部分。 

  OKAY ,我们把 id=1  改成  id=2 username=aaa  改成  username=bbb 

  然后点击右边的   按钮 。 如果没有断点的情况下,这个按钮是灰色的。  

  OKAY ,这时候再回到浏览器看一下我们页面执行的结果 

 

  看到什么了!!! 是的,已经篡改成功了。是不是有点小兴奋。

  下面我们再来看看有中文的情况下的篡改 

  bpu  一次后,我们并没有实现删除断点的功能,所以只要程序不关闭,每次刷新或者执行这个页面的时候,都会被断下来。所以现在我们直接打开我们的页面。 

  在文本框里输入 资本主义好  

  然后点击 submit  。 这时候就会被再次断下来了。 

   看一下断下来时的界面 

  选中红色的行。   

看右边

POST /testwebsite/Default.aspx?id= 1  HTTP/ 1.1  
Host: localhost:  4579  
Proxy -Connection: keep- alive
Content -Length:  54  
Cache -Control: max-age= 0  
Origin: http:  //  localhost:4579 
User-Agent: Mozilla/ 5.0  (Windows NT  6.2 ; WOW64) AppleWebKit/ 537.1  (KHTML, like Gecko) Chrome/ 21.0 . 1180.89  Safari/ 537.1  
Content -Type: application/x-www-form- urlencoded
Accept: text /html,application/xhtml+xml,application/xml;q= 0.9 ,*/*;q= 0.8  
Referer: http:  //  localhost:4579/testwebsite/Default.aspx?id=1 
Accept- Encoding: gzip,deflate,sdch
Accept -Language: zh-CN,zh;q= 0.8  
Accept -Charset: GBK,utf- 8 ;q= 0.7 ,*;q= 0.3  

username =%E8%B5% 84 %E6%9C%AC%E4%B8%BB%E4%B9% 89 %E5%A5%BD

  这次 ID 我们就不管了,只看最后一行  

  username=%E8%B5%84%E6%9C%AC%E4%B8%BB%E4%B9%89%E5%A5%BD

  我们输入的是 资本主义好 。这里变成了  %E8%B5%84%E6%9C%AC%E4%B8%BB%E4%B9%89%E5%A5%BD  。 这是“资本主义好”通过 urlencoder 编码后的样子, HTTP 请求报文里,涉及非英文字符时,都会通过这种编码方式进行传输。这种编码的原理其实很简单,就是用  % 十六进制 的形式依次列出某个字符通过某种字符编码 (GB2312 或者 UTF-8 等 ) 后在内存中的实际值。当然这个不明白问题不大,我们在程序里实现了一个小工具,来实现 URL 编码。

  工具-->URL 编码 

  在原文部分,输入“社会主义好” 。 

  有个选择编码的地方 ,这个要按你页面的实际进行选择。查看你的页面使用的编码格式,不同的浏览器不一样,我们这个页面使用的是 UTF-8 。

  所以我们选择 UTF-8  ,然后点击  编码  按钮      

  看密文部分, 复制。    

  然后关闭这个窗口,用刚才复制的内容替换请求报文文本框里最后一行 username= 后面的那部分,这时候报文变成了

 

  点击运行至完成。 

  这时候看页面 

  OKAY ,再一次成功篡改了。  :)      

   

  附录 (源码+程序)

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于HTTP代理实现请求报文的拦截与篡改实现篡改功能后的演示+源码下载的详细内容...

  阅读:37次

上一篇: web动态部署(热部署)

下一篇:CPU百分百