一、XSS
- 反射型xss
打开dvwa的Reflected Cross Site Scripting (XSS)
(1)low等级
查看页面源码(ctrl+u)该界面有提交按钮和输入框
在输入框随便输入点字符,点击提交
可以看见输入的helloword嵌入到界面中。
View source下:
if条件从参数中拿出name的值,直接echo出来。
头部的header函数,它是向用户发送最原始请求头的。不是本文的重要内容,我举个简单的例子,感兴趣的要学会去查(包括什么是请求头,请求头的作用是什么,header具体怎么使用等等)。
输入<script>alert("jerk")</script>
查看网页源码
服务器没对我们的输入进行过滤,直接将内容传给了浏览器,浏览器将<script></script>解析成脚本标签,alert当成js脚本代码执行了。
(2)Medium等级
将low等级改为Medium等级
同样的XSS脚本
脚本没有执行,把内容显示了出来,虽然并没有标签。查看后台干了什么
过滤"<script>"。多了一句str_replace。它将内容中的“<script>”去掉了(替换为空),我们的输入从<script>alert</script>变成了alert()</script>。
</script>没有显示出来呢?因为他会被浏览器当成标签,而不是显示内容。又因为浏览器没有找到</script>的前端<script>,标签没有闭合,所以<script>标签并没有起作用。alert被当做文本显示了出来。
查看网页源码
可以看见前面的标签还在,后面的标签不见了。
解决方法:其实方法有很多,有很多很多的绕过姿势,这里举例两个最简单的。1.调整大小写,后台中过滤的是“<script>”,字符串是不可变的,可以换成<SCRIPT>。
提交
可以看见标签弹出
调整大小写的方式很多,如somethingwithouttitle:
标题式调整:SomethingWithoutTitle
完全式调整:SOMETHINGWITHOUTTITLE
神经式调整:sOmeTHinGWithOutTiTle(随机调整)。
- 复写。这个方法在sql注入中有提到,例如过滤script,就在script中间任意位置再插入一个script。
将script过滤后,我前后的内容仍旧是一个script。
构造XSS:<scr<script>ipt>alert("jerk")</script>
提交
弹出成功
(3)High等级
将等级改为High等级
发现使用不同的方法都无法弹出标签
查看后台
tr_replace换成了preg_replace。正则匹配,看正则表达式:/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i。()内部为一个整体, 其中的.*点代表任意字符,星表示将前一单位重复0或多次。最后的/i表示不区分大小写。简单说,它过滤掉了所有包含<script的数据,无论怎样复写,而且还不区分大小写。
解决方法:对于安全级别为high等级,只是对script进行限制,但未限制其他方式。
1.<img src=x οnerrοr=alert(1)>
2.<iframe οnlοad=alert(1)>
成功进行弹窗。
(4)Impossible等级
无论怎样XSS,都不会有问题
view source:
核心语句:$name = htmlspecialchars( $_GET[ 'name' ] ),htmlspecialchars这个函数,就是做实体化用的,它会将输入的数据中预留字符全部转换,从而可以直接显示到界面上。不过仅此而已,但渗透也到此而已了,因为所有的输入都没有被执行的机会了。
- 存储型xss
打开dvwa的Stored Cross Site Scripting (XSS)模块
(1)low等级
数据库里的数据显示出来。
随机输入一些信息
下方多了一条输入的数据,如果重新加载页面,仍旧有这两条数据。这就是存储型,输入数据会被存入数据库,网页每次被打开,都会从数据库里调出显示。
先点击ClearGuestbook,清空一下,在message中注入:<script>alert("This is low level")</script>。
Sign之后
内容成功显示
我们先点击一下其他页面,再点回来
成功被触发了,name和message均成功。
(2)Medium等级
设置Medium等级
对message变量的处理:
strip_tags()函数。去除标签,包括html,xml,php标签。
htmlspecialchars()函数。前面谈到过,对html中一些预定义字符进行实体化,包括&,',",<,>。,看下name参数的处理。只是对输入数据过滤了“<script>”字符串。(替换为空)
通过前面我们的绕过姿势,应该没什么问题了吧。基本的两种方法:1.调整大小写;2.复写。
(3)High等级
img注入:<img src=1 οnerrοr=alert("high") />
数据输入过程中,Name只能输入10个字符,在Name输入框旁边,右键检查。找到限制属性maxlength,直接右键Edit attribute,改成100.
继续注入,Name不再受限制了。
尝试img标签,输入<img src=x οnerrοr=alert(1)>,成功的弹窗。src属性指定了要显示的图像的路径。然后,onerror事件被绑定到了alert("high")这个Javascript函数,当图像加载失败时,会触发这个事件并执行alert函数来显示一个弹窗。
(4)impossible等级
查看源码
对name进行和message同样的处理,在update database阶段还进行了预处理,连先前high等级注入的XSS,也被实体化后显示了出来。
二、Kali Linux对DVWA的CSRF模块
1、low等级
分析
首先分析一下服务器的核心源码
GET方式得到三个参数,change、password_new、password_conf。如果password_new和password_conf相同,那么更新数据库,并没有任何防CSRF的措施。这里我们有多重攻击方式,比如直接构造链接、构造短链接和构造攻击页面。
< img src="http://192.168.241.133/DVWA/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#" border="0" style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>
当受害者正在使用自己的网站(浏览器中还保存着session值)时,访问攻击者诱惑点击的此链接:
http://www.hack.com/test.html
误认为是自己点击的是一个失效的url:
但实际上已经遭受了CSRF攻击,密码已经被修改为test。
密码修改
在修改密码时获取url链接
在url链接进行密码修改
密码修改成功
使用CSRF.html文件进行修改密码
在window10编辑html文件,并存放进php文件。
在网页打开点开编辑好的html,点击Click Me。
修改成功
2、medium等级
使用html文件进行修改
在网页打开点开编辑好的html,点击Click Me。
修改成功
使用burpsuite抓包
打开开关
抓包
手工输入Referer:
修改成功
- High等级
查看源码
可以看出请求中多了token参数。由于每次访问token均会刷新,所以请求伪造时不能将请求参数写死。
方法一:
此时,攻击者可能会从以下两步进行攻击:
(1)先想构造一个网页。这个网页能获取本地浏览器中的token信息,然后将给信息拼接到所构造请求的参数中,最后在提交完整的请求报文。假设攻击者通过文件上传等漏洞将含有恶意代码的文件存放到服务器根目录下,文件名为CSRF.php。
(2)在利用存储型XSS漏洞引诱受害者点击激活上述网页。
步骤一:XSS漏洞利用
采用逆推的思路,方便验证每一步是否成功,因此实验进行过程中应先对XSS漏洞进行实验,确保该漏洞能被成功利用,就像Medium难度一样。
利用攻击者账号登录靶场,进入存储型XSS漏洞页面,按F12修改name参数允许输入长度,然后在将name参数输入是<a href="https://192.168.241.133/CSRF.html">webanquan</a>,message输入yep,并点击Sign。
步骤二:构造网页
设攻击者通过文件上传等漏洞将含有恶意代码的文件存放到服务器根目录下,文件名为CSRF.php,文件内容如下
靶机浏览器登录管理员账户,切换到存储型漏洞环境中,可以看到有该链接可以点,受害者点击该链接,跳转界面。
密码被修改
方法二:
抓包获取信息
获取user_token
下载插件脚本
使用获取信息
修改密码并send
查看Response显示修改成功
4.impossible等级
Impossible等级是一种非常重要的安全等级评估机制,它主要用于评估给定的某种信息系统或计算机是否具备足够的保护能力去抵抗or 阻止黑客的攻击和入侵。它是一种基于信息安全等级的机制,可以用于评估一个特定的信息系统或计算机是否具备足够的安全可靠性,以抵抗攻击和入侵。它将信息安全评估动机分为5个层次,分别为Impossible、 Extremely High、High、Medium、Low。
Impossible等级的机制主要包括以下几个部分:
1、首先,要对给定的某个特定的信息系统或计算机进行安全等级评估,以便发现可能存在的形形色色的漏洞。
2、然后,要尽可能快速地修复发现的这些漏洞,以确保系统的安全性能。可以采用安全补丁、增强安全功能等方式来进行修复。
3、最后,要采取有效的防御方法,避免系统受到攻击和入侵,比如建立访问控制机制,或采用入侵检测和防御技术等。
Impossible等级机制的修复和防御方法还可以包括:
1、应用密码管理。用户应该定期更改登录和数据库系统的密码,并确保密码强度足够。
2、应用访问控制机制,以限制对系统中的数据和应用的访问,以及对系统的配置和变更。
3、应用可信的入侵检测和防御技术,实时监测系统内的活动,及时发现可疑行为并采取相应的应对措施。
4、应用安全审计等机制,及时发现系统中存在的安全漏洞,并及时采取措施进行修复。
5、对数据库系统的变更要进行严格的审核,确保安全变更后的系统功能可用性。
通过以上几项策略,可以有效地帮助信息系统管理者提升系统的安全性能,充分保障系统安全可靠性,有效地防止黑客的攻击和入侵。