网站首页 > 知识剖析 正文
文章来源:知了汇智冯老师
我们还是先回顾一下上节课的内容
知了堂:知了汇智《XSS攻击-DVWA练习实战 》课程文档讲解(上)?zhuanlan.zhihu.com
接上文:
2 DVWA之Stored XSS(存储型XSS)
Low
源代码:
trim(string,charlist) : 移除string字符两侧的预定义字符,预定义字符包括\t 、 \n 、\x0B 、\r以及空格,可选参数charlist支持添加额外需要删除的字符
stripslashes(string): 去除掉string字符的反斜杠\
mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
$GLOBALS :引用全局作用域中可用的全部变量。$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
可以看出,low级别的代码对我们输入的message和name并没有进行XSS过滤,而且数据存储在数据库中,存在比较明显的存储型XSS漏洞
我们输入 1 和 <script>alert('hack')</script> ,可以看到,我们的js代码立即就执行了
查看数据库,可以看到我们的js代表插入进去了
查看源代码,可以看到,Message位置显示的是我们的js代码,因为这里显示的数据是调用数据库里的数据
Medium
源代码:
addslashes(string) :函数返回在预定义字符之前添加反斜杠的字符串,预定义字符 ' 、" 、\ 、NULL
strip_tags(string) :函数剥去string字符串中的 HTML、XML 以及 PHP 的标签
htmlspecialchars(string): 把预定义的字符 "<" (小于)、 ">" (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素
当我们再次输入1 和 <script>alert('hack')</script> ,strip_tags函数把<script>标签给剥除了,addslashes函数把 ' 转义成了 \'
虽然 Message 参数把所有的XSS都给过滤了,但是name参数只是过滤了<script>标签而已,我们依然可以在name参数进行注入
可是发现name参数对长度有限制,最大长度是10
所以我们想到了抓包,然后进行篡改,我们输入如下的,然后抓包
如下框中的数据就是 <script>al 经过URL编码后的数据
我们需要将其修改为 <SCRIPT>alert('hack')</SCRIPT> 经过URL编码后的数据
提交后,就可以看到弹出此框了,说明我们的js代码执行了
查看数据库,可以看到我们的代码插入进数据库了。
查看页面源代码,可以看到name位置插入了我们的js代码
High
源代码:
可以看到,high级别只是在medium级别上,name参数用了正则表达式进行过滤而已,我们仍然可以在name参数做手脚,抓包,然后改包,只不过这次改成 <img src=1 οnerrοr=alert('hack')>
我们输入如下的。
然后将<img src=1 onerror=alert('hack')> 进行URL编码
可以看到,我们的js代码执行了
查看数据库,我们的代码被插入进数据库了
查看源代码,可以看到name位置插入了我们的img标签
Impossible
源代码:
可以看到,这次impossible在high级别的基础上对name参数也进行了更严格的过滤,导致name参数也无法进行XSS攻击。而且使用了Anti-CSRF token防止CSRF攻击,完全杜绝了XSS漏洞和CSRF漏洞。
3 DVWA之DOM XSS(DOM型跨站脚本攻击)
Low
源代码:
从源代码可以看出,这里low级别的代码没有任何的保护性措施!
页面本意是叫我们选择默认的语言,但是对default参数没有进行任何的过滤
所以我们可以构造XSS代码,访问链接:
http://127.0.0.1/vulnerabilities/xss_d/?default=<script>alert('hack')</script>
可以看到,我们的script脚本成功执行了
我们查看源代码,可以看到,我们的脚本插入到代码中,所以执行了
Medium
源代码:
可以看到,medium级别的代码先检查了default参数是否为空,如果不为空则将default等于获取到的default值。这里还使用了stripos 用于检测default值中是否有 <script ,如果有的话,则将 default=English 。
很明显,这里过滤了 <script (不区分大小写),那么我们可以使用<img src=1 οnerrοr=('hack')>
但是当我们访问URL:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<img src=1 οnerrοr=alert('hack')>
此时并没有弹出任何页面
我们查看网页源代码,发现我们的语句被插入到了value值中,但是并没有插入到option标签的值中,所以img标签并没有发起任何作用。
所以我们得先闭合前面的标签,我们构造语句闭合option标签:
<option value=' " + lang + " '> " + decodeURI(lang) + " </option>
所以,我们构造该链接:
http://127.0.0.1/vulnerabilities/xss_d/?default=></option><img src=1 οnerrοr=alert('hack')>
但是我们的语句并没有执行,于是我们查看源代码,发现我们的语句中只有 > 被插入到了option标签的值中,因为</option>闭合了option标签,所以img标签并没有插入
于是我们继续构造语句去闭合select标签,这下我们的img标签就是独立的一条语句了
我们构造该链接:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default= ></option></select><img src=1 οnerrοr=alert('hack')>
我们查看源代码,可以看到,我们的语句已经插入到页面中了
今天的课程也结束啦,明天我们再见哦。今天也做做手部运动,给我们点个赞吧!
猜你喜欢
- 2024-11-11 详解如何防止SQL注入:应对方案与优缺点分析
- 2024-11-11 XSS注入我也不怕不怕啦--PHP从框架层面屏蔽XSS的思考和实践
- 2024-11-11 挖0day漏洞原来如此简单,我的黑客朋友手把手教你
- 2024-11-11 php用soap调用接口实例,返回值没有见到xml
- 2024-11-11 备战金九银十,2020最新大厂PHP面试题(附答案)
- 2024-11-11 dede后台发布文章的时候显示标题不能为空?
- 2024-11-11 PHP漏洞之-Session劫持 php session机制
- 2024-11-11 php特殊字符处理 php 特殊字符自动转义
- 2024-11-11 Java面试260题(2020年版,3-5年面试题重点突破)(二)
- 2024-11-11 2020最新大厂PHP面试题(附答案) php面试官应该问些什么
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)