zoukankan      html  css  js  c++  java
  • HTTP代理实现请求报文的拦截与篡改实现篡改功能后的演示+源码下载

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

    返回目录

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

      同样的,编译后的程序放在了附录的根目录下的build文件夹里,不过和前面的附录相比,这次在根目录下多出了一个testwebsite的文件夹 。这是个VS2010WEBSITE工程(其它版本的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,再一次成功篡改了。 :)      

      

     附录(源码+程序)

  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2980679.html
Copyright © 2011-2022 走看看