20211903 2021-2022-2 《网络攻防实践》实践十报告
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注入攻击漏洞。
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
弹窗显示cookie信息:将cookie信息显示。
窃取受害者的cookies:将cookie发送给攻击者。
成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
编写XSS蠕虫。
对抗XSS攻击。
2.实践过程
一、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注入攻击漏洞。
首先使用命令mysql -u root -pseedubuntu打开seed虚拟机中的MySQL数据库,使用use Users命令进入自带的Users数据库,并通过show tables;语句查看库中的表。
通过select语句select * from credential;查询credential表中所有信息。
在虚拟机中的火狐浏览器进入www.SEEDLabSQLInjection.com网站,如下界面。
随意输入账号和密码,不出所料为错误的,打开火狐浏览器中的开发者工具,发现输入框中的用户名和密码是提交给网站下的unsafe_home.php这个网页。
在终端中使用vim /var/www/SQLInjection/unsafe_home.php指令打开该网页的代码,并且找到用户登陆的sql语句,发现可以直接使用' #将后面的验证密码条件直接注释掉,只要用户名输入正确就可以登录成功,在前面发现有一个用户名为admin,所以只需要在用户名栏输入admin '#即可登录成功,不需要输入密码。
在用户名框中输入admin '#后即可进入网站,SELECT语句渗透成功。
在登录界面打开Edit_Profile网页并查看其源代码,发现在点击save后向unsafe_edit_backend.php文件发送了一个表单,便通过vim /var/www/SQLInjection/unsafe_edit_backend.php语句,查看其源代码。
在UPUATE语句中,我们也发现语句并没有修改SALARY,但我们只需要输入指令语句 ', Salary='1' where name='Admin'; # 就可以修改admin的工资,UPDATE注入也就成功了。
若想要修复上述SQL注入攻击漏洞,我们可以讲代码和数据更好地分离,使用预处理语句,形成SQL语句模板。
原SELECT语句为
$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
FROM credential
WHERE name= '$input_uname' and Password='$hashed_pwd'";
可修改为
$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?");
$sql->bind_param("ss", $input_uname, $hashed_pwd);
原UPDATE语句为
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;";
可修改为
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
弹窗显示cookie信息:将cookie信息显示。
窃取受害者的cookies:将cookie发送给攻击者。
成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
编写XSS蠕虫。
对抗XSS攻击。
首先进入http://www.xsslabelgg.com/网站,并用用户名Alice和密码seedalice登录。
登陆成功后点击头像进入主页,并点击进入Edit profile,后在中Brief description填入恶意脚本代码。
点击save保存后提示XSS,此后每次刷新页面都会弹出相应提示。
当我们使用Bob的帐号访问Alice的主页也会提示XSS。
当把Brief description的内容改为,提示的内容则改变为页面的cookie值。
刚刚已经获取到cookie信息,若需窃取需要再将cookie信息发送给攻击者。因本机IP地址为172.16.69.152,所以将代码 复制到Brief description中。
重新在网页中登录boby的账号,并通过此账号访问Alice主页。并在终端中输入指令nc -l 2892 -v来监听该端口信息,boby访问后,则停止监听,并显示以下信息,信息中即有受害者的cookie值。
重新登陆Alice用户,然后访问boby的主页,在打开开发者工具的基础上,点击Add Friend,将boby加为好友并且在network中弹出一条请求信息。
可看到这条请求有三个参数,第一个为friend,第二个为&__elgg_ts,第三个为&__elgg_token,分别为添加好友id,添加时间和身份认证。
在Alice的主页中的About me中粘贴以下代码:
此时Boby访问Alice的主页后,就加载了About me中的payload,再返回Boby主页,即与Alice添加好友成功。
在Alice的主页的About me中将信息修改为以下代码:
但Boby重新登陆后访问有刚才About me恶意代码的Alice主页,再回到Boby自己的主页,发现自己的About me已经被修改,攻击成功。
为了实现编写XSS蠕虫,使用DOM API的方法,让刚才的XSS恶意代码更具有传播性。原理就是通过把每个受害人的About me全部修改成和自己的一样,树状的感染更多用户。实现代码如下:
如刚刚的传播一样,只需要使用Boby用户访问Alice主页,再回到Boby主页,可发现自己已被蠕虫感染,即为XSS蠕虫实现。
若想要对抗防御XSS攻击,可以登录Admin账号,打开Account->administration->plugins路径,在下面找到HTMLawed插件,单击Activate,启用此插件。再次实验刚刚的XSS攻击,发现此时刚才的XSS攻击已失效。
3.学习中遇到的问题及解决
- 问题1:原来的SeedUbuntu虚拟机没有User表;
- 问题1解决方案:重新下载新版SeedUbuntu虚拟机并安装。
- 问题2:实验二攻击不成功,Boby的About me信息没有被修改;
- 问题2解决方案:恶意代码没有在Edit HTML模式下编辑,修改后即可完成攻击。
4.实践总结
在这次的实验过程中实验一难度并不大,主要是一些基础的SQL语句注入攻击,通过在已知数据库的情况下,来通过系统漏洞,数据和代码的不够分离,来对某些SQL语句进行注释和添加信息。但对于之前没有相应项目开发经验的人可以帮我们了解以下数据绑定,数据和代码分离的重要性。而在第二个实验,就相对难度较大,此个实验主要了解了XSS注入攻击的基本流程,就是通过一定的恶意代码来修改访问者的个人信息,还有通过蠕虫实现相互感染。但可能这次的实验也比较处于了解的作用,现在较为完善的商业网站几乎没有这种低级漏洞,但是也对我们对这两种攻击方式的理解起到很大作用。