Exp9 Web安全基础
实验内容
webgoat安装
下载webgoat-container-7.0.1-war-exec.jar
7.0.1版本需要jdk8,kali自带的是jdk11,需要重新配置,使用命令运行webgoat。
java -jar webgoat-container-7.0.1-war-exec.jar
在主机浏览器中输入
http://192.168.28.134(kali的IP):8080/WebGoat/attack
输入用户名和密码就可以登录了(初始用户名和密码均为guest)
1.SQL注入攻击
命令注入
技术主题
命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响。但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
在正常的参数提交过程中,添加恶意的代码,往往能够得到以外的收获。
目标
在目标主机上执行任何系统命令。
操作方法
1.在课程页面的下拉列表中任意选择一个页面。
2.在输入框中的网页后加上
"& netstat -an & ipconfig"。
3.点击view后返回页面,在这个页面中能看到网络端口使用情况和 IP 地址。
2.数字型SQL注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
在 station 字段中注入特征字符,能组合成新的 SQL 语句。
目标
通过注入 SQL 字符串的方式查看所有的天气数据。
操作方法
1.选择 Numeric SQL Injection 页面。
2.在输入框的城市的value值加上or 1=1
。
3.点击go即可查看所有城市天气情况。
3.日志欺骗
技术主题
日志欺骗类似于障眼法。
技术原理
这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹。
目标
使用户名为“admin” 的用户在日志中显示“成功登录”。
操作方法
1.选择 Log Spoofing 页面。
2.在用户名中输入
smith Login Succeeded for username admin
,可以看到用户名信息显示在同一行。
3.在用户名注入回车(0D%)和换行符(%0A),输入
Smith%0d%0aLogin Succeeded for username: admin
,可以看到用户名信息在新的一行显示。
4.字符串型注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
应用程序会将您的输入带入后台的 SQL 查询语句。
目标
使用 SQL 注入绕过认证
操作步骤
1.打开Stage 1: String SQL Injection页面。
2.修改password输入长度为20。
3.用户选择 Neville,密码框输入
smith' OR '1' = '1
,即可登录成功,查看所有成员列表。
5.数字型 SQL 注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
应用程序会将您的输入带入后台的 SQL 查询语句
目标
执行 SQL 注入绕过认证;
通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户,浏览其 BOSS 的账户信息。
操作步骤
1.打开Stage 3: Numeric SQL Injection页面。
2.首先用 Larry,密码 larry 登录,浏览员工信息的按钮是“ViewProfile”,我们将option的value值换成其他,如 102,返回的依然是 Larry 的信息。推测这个地方数据库应该是以员工 ID 作为索引,返回的是每次查询到的第一条数据。
3.依据社会工程学猜测,老板应该是工资高的,所以为了把老板排到第一个 SQL 注入排序,将option的calue改为101 or 1=1 order by salary desc
,这样第一条数据就是Boss的数据。
6.字符串型注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
基于以下查询语句构造自己的 SQL 注入字符串。
SELECT * FROM user_data WHERE last_name = '?'
目标
通过 SQL 注入将所有信用卡信息显示出来。尝试的用户名是“Smith”。
操作步骤
1.打开String SQL Injection页面。
2.在输入框中输入
’ or 1=1 – 或者 Smith' or 1=1 --
,即可看到用户的所用信息。
7.数字型盲注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻 击者必须充分利用查询语句,构造子查询语句。
目标
找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交。
操作步骤
1.打开页面Blind Numeric SQL Injection。
2.输入命令101 AND 1=1 和 101 AND 1=2
,可以发现当两个条件都成立,页面返回帐号有效。否则返回帐号无效。
3。命令可以测试PIN 数值是否大于 10000。
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
4.如果页面提示帐号有效,说明 PIN>10000 否则 PIN<=10000。不断调整数值,可以缩小判断范围,并终判断出 PIN 数值的大小。终如下语句返回帐号有效:
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
8.存储型XSS攻击
技术概念
过滤所有用户输入是一个不错的做法,特别是那些后期会被用作 OS、脚本或数据库查询参数的输入。尤其是那些将要长期存储的内容。用户不能创建非法的消息内容,例如:可 以导致其他用户访问时载入非预期的页面或内容。
目标
创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
操作步骤
1.打开页面Stored XSS Attacks。
2.在 title 中任意输入字符。在内容中输入以下代码:
<script>alert('xss')</script> 或者<script language="javascript" type="text/javascript">alert("Ha Ha Ha");</script>
3.提交后,在下方会出现链接,可以点击浏览,然后会弹出一个对话框, 证明 XSS 攻击成功。
问题回答
1.SQL注入攻击原理,如何防御?
答:原理:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
防御:1.利用正则表达式过滤输入。2.增加对于特殊字符串的检查,即检查非法字符串的输入。
2.XSS攻击的原理,如何防御?
答:原理:XSS即跨站脚本攻击,它允许恶意使用者将程序代码注入到网页上,其他使用者在浏览网页时就会受到不同程度的影响。这类攻击一般包含了HTML语言以及目标主机使用的脚本语言。
防御:1.在表单提交或者url参数传递前,对需要的参数进行过滤。2.检查用户输入的内容中是否有非法内容。
3.CSRF攻击原理,如何防御?
答:原理:CSRF(Cross site request forgery),即跨站请求伪造。我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
防御:1.使用验证码,每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。2.使用token,每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。