20211914涂可新 2021-2022-2 《网络攻防实践》实践十报告

20211914涂可新 2021-2022-2 《网络攻防实践》实践十报告

1.实践内容

SQL注入

Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

XSS攻击

XSS攻击指的是:
通过利用网页开发时留下的漏洞,恶意攻击者往Web页面里插入恶意 Script代码,当用户浏览时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS全称是:跨站脚本攻击(cross site script)。按照国际惯例,命名应该以 CSS 命名,但是CSS与大家熟知的 层叠样式表(Cascading Style Sheets)重名了,因此取名为XSS。而实际上,就连“跨站脚本攻击”这个名字本身也另有来历,在这种行为最初出现之时,所有的演示案例全是跨域行为,所以叫做 "跨站脚本" 。时至今日,随着Web 端功能的复杂化,应用化,是否跨站已经不重要了,但 XSS 这个名字却一直保留下来。由于现代浏览器的“同源策略”已经让运行在浏览器中的javascript代码很难对外站进行访问了,所以, 这个漏洞的名称可能存在一定的误导性,让很多初学者看了很多次都不能理解这个漏洞的原理。随着 Web 发展迅速发展,JavaScript 通吃前后端,甚至还可以开发APP,所以在产生的应用场景越来越多,越来越复杂的情况下, XSS 愈来愈难统一针对,现在业内达成的共识就是,针对不同的场景而产生的不同 XSS需要区分对待。 可即便如此,复杂应用仍然是 XSS 滋生的温床,尤其是很多企业实行迅捷开发,一周一版本,两周一大版本的情况下,忽略了安全这一重要属性,一旦遭到攻击,后果将不堪设想。

2.实践过程

2.1SEED SQL注入攻击与防御实验

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

2.1.1熟悉SQL语句

  • 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
    step1
    本次实验使用的虚拟机是久违的seedUbuntu,打开终端输入指令:sudo su提升至root(seedUbuntu不允许直接root登录)。
    接下来,输入指令:service apache2 status,查看apache服务是否处于活跃状态,如图可知开启了apache服务(未开启的话输入指令:service apache2 start即可)。

    step2
    输入指令:mysql -u root -p,登录mysql数据库(这里知道密码是:seedubuntu)。

    step3
    输入指令:show databases;,查看mysql数据库中所有的库。
    由下图查询结果,推测包含员工个人信息的creditential表在Users这个库中。

    step4
    输入指令:use Users;,进入这个名为Users的数据库。再输入指令:show tables;,便可查看Users数据库中所有的表。

    step5
    输入指令:select * from credential;,查询Users数据库中名为creditential的表中存储的内容。
    由下图的查询结果可知,creditential表存储了每个员工的个人信息(eid,密码,薪水,ssn等)。

    想要指定获取员工的某项信息的话(以姓名和昵称为例)。
    输入指令:select Name from creditential;查看此表中存储的员工姓名(这个存了)。
    输入指令:select NickName from creditential;查看此表中存储的员工昵称(这个没存)。

2.1.2对SELECT语句的SQL注入攻击

  • 上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
    step1
    登陆www.SEEDLabSQLInjection.com,用户名测试输入:admin,密码测试输入:1234567890。

    step2
    在登录界面键入F12,然后点击Login,即可捕获刚才登录操作的数据。
    这时登录界面提示输入的账户不存在,且通过捕获的数据发现该Web应用程序将输入的用户名和密码发送至unsafe_home.php校验。

    step3
    由step2可知unsafe_home.php是用于校验用户名和密码的,故unsafe_home.php的源代码值得细致分析。
    输入:/var/www/SQLInjection/unsafe_home.php,在Text Editor中打开www.SEEDLabSQLInjection.com存储动态信息文件var中的unsafe_home.php,即可查询到源代码。

    step4
    分析unsafe_home.php源代码➡信息点1:SQL语句中WHERE name= '\(input_uname' and Password='\)hashed_pwd'将键入的用户名注入至\(input_uname,将键入的密码注入至\)hashed_pwd。

    分析unsafe_home.php源代码➡信息点2:该Web应用通过用户名Admin区分管理员和员工。管理员(用户名Admin)可select所有员工的个人信息。


    step5
    根据step4的信息点,可设计出攻击方案:登陆时键入用户名Admin'#,口令空着。
    方案分析:键入用户名Admin'#且不输入口令后,WHERE name= '\(input_uname' and Password='\)hashed_pwd'变为WHERE name= 'Admin'#' and Password='$hashed_pwd'。如此一来,#后的代码就成了注释语句,不参与程序运行,并且用户名还是Admin,这样做的结果是在不输入口令的情况下便能以管理员角色登陆系统。
    成功以管理员角色登入系统,完成对SELECT语句的SQL注入攻击:

2.1.3对UPDATE语句的SQL注入攻击

  • 通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
    step1
    根据2.1.2对SELECT语句的SQL注入攻击结果,用户名输入Boby'#,口令空,以员工Boby的角色登录系统。
    点击Edit Profile编辑前端文件(在页面中找不到此选项的话,按住ctrl+鼠标滑轮缩小页面比例)。

    将Boby的昵称取为Bob,在登录界面键入F12,点击Save,即可捕获刚才编辑操作的数据。
    由捕获数据可知unsafe_edit_backend.php是用于保存编辑的,故unsafe_edit_backend.php的源代码值得细致分析。

    step2
    输入:/var/www/SQLInjection/unsafe_edit_backend.php,在Text Editor中打开www.SEEDLabSQLInjection.com存储动态信息文件var中的/var/www/SQLInjection/unsafe_edit_backend.php,即可查询到源代码。

    update更新语句如下:
    \(sql = "UPDATE credential SET nickname='\)input_nickname',email='\(input_email',address='\)input_address',Password='\(hashed_pwd',PhoneNumber='\)input_phonenumber' where ID=\(id;"; 正常情况下只能编辑用户昵称、邮箱、地址、口令、电话号码。 ![](https://img2022.cnblogs.com/blog/2781896/202205/2781896-20220522204227062-704224066.png) step3 根据step2的update更新语句,假若想编辑其它用户信息(以Boby的薪水为例),可设计出攻击方案:进入编辑界面后,在NickName空白处键入', salary='20211914';#。 方案分析:在NickName空白处键入', salary='20211914';#后,\)sql = "UPDATE credential SET nickname='', salary='20211914';#',email='\(input_email',address='\)input_address',Password='\(hashed_pwd',PhoneNumber='\)input_phonenumber' where ID=\(id;"; 此时,#后的代码就成了注释语句,不参与程序运行,相当于只有\)sql = "UPDATE credential SET nickname='', salary='20211914';这样做的结果是编辑昵称为空,编辑薪水为20211914。
    在NickName空白处键入', salary='20211914';#

    成功将Boby的薪水改为20211914,对UPDATE语句的SQL注入攻击。

2.1.4SQL对抗

  • 修复上述SQL注入攻击漏洞。
    2.1.2对SELECT语句的SQL注入攻击与2.1.3对UPDATE语句的SQL注入攻击能成功的根本原因是这个Web应用程序无法区分输入字符和可执行代码。
    修复上述SQL注入攻击漏洞就是要使这个Web应用程序能区分输入字符和可执行代码,以免混用。
    对于2.1.2对SELECT语句的SQL注入攻击将SELECT语句修改为$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);
    现在注入攻击失败。

对于2.1.3对UPDATE语句的SQL注入攻击将update更新语句修改为$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);
现在注入攻击失败。

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

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

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

  • 在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
    step1
    打开浏览器中访问http://www.xsslabelgg.com,登录Alice账户。

    step2
    点击Alice头像进入主页。

    step3
    点击Edit profile,在Brief description中输入恶意消息(XSS攻击代码)。


    step4
    点击save保存后,该Web应用程序立即显示警报窗口。

2.2.2弹窗显示cookie信息

  • 将cookie信息显示。
    step1
    同样是在Alice主页中点击Edit profile,在Brief description中输入。

    step2。
    点击save保存后,Web应用程序立即弹窗显示cookie信息。

2.2.3窃取受害者的cookies

  • 将cookie发送给攻击者。
    同样是在Alice主页中点击Edit profile,在Brief description中输入。其中192.168.19.159为Ubuntu的IP地址,2813为任一可用端口。

2.2.4成为受害者的朋友

  • 使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
    step1
    登录Alice账户后,访问http://www.xsslabelgg.com/profile/boby进入Boby的主页。
    键入ctrl+shift+E进入开发者模式,点击Network,准备捕获添加好友操作的数据,点击Add friend,添加Boby为好友。

    step2
    由捕获结果可知,Web应用程序发送的请求为:
    其中friend、__elgg_token、__elgg_ts这三个参数是添加好友操作的重要参数。

    step3
    由step2的分析,编写出如下脚本以自动成为受害者boby的朋友,将其键入Alice主页的About me中(Edit HTML)。

    step4
    登录Boby的账号,访问Alice的主页。


    再查看Latest activity,发现Alice成为受害者boby的朋友了。

2.2.5修改受害者的信息

  • 使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
    step1
    登录Alice账户后,将Alice的About me修改为20211914。
    键入ctrl+shift+E进入开发者模式,点击Network,准备捕获添加修改操作的数据,点击save保存修改。

    step2
    由捕获结果可知,Web应用程序发送的请求为:



    step3
    由step2的分析,编写出如下脚本以修改受害者boby的信息,将其键入Alice主页的About me中(Edit HTML)。

    点击save保存后会弹窗。

    step4
    登录boby账户后,点击Alice的个人简介会弹窗。

    再查看boby的个人简介,发现boby的个人简介信息被修改了。

2.2.6编写XSS蠕虫

将编写好的攻击脚本键入Alice主页的About me中(Edit HTML)。

点击save保存后,发现boby已被感染。

现在admin没有被感染。

登录账户admin访问boby的主页,而后发现admin也被感染。

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

4.实践总结

本次实践是网络攻防实践的第十次实践,主要是动手实操了SQL注入攻击与XSS攻击,并作出防御。这对保障Web应用程序的安全有很大帮助。

参考资料

posted @ 2022-05-22 23:06  20211914涂可新  阅读(16)  评论(0编辑  收藏  举报