当前位置:网站首页>xss靶机训练【实现弹窗即成功】
xss靶机训练【实现弹窗即成功】
2022-07-31 00:00:00 【Miracle_ze】
一、xss 跨站脚本攻击(Cross Site Script Attack)
1.1 xss介绍
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
1.2 xss漏洞
1.2.1 漏洞的位置
数据交互与输出的地方
1.2.2 产生条件
漏洞产生的两个条件:
1.用户可以控制的输入点。
2.输入能返回到前端的页面上被浏览器当成脚本语言解析执行。
1.2.3 漏洞的危害
整体来说危害有:获取用户cookie、键盘记录、xss gets hell、刷流量,执行弹窗广告、传播蠕虫病毒。
细说危害:
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件(钓鱼)
6、网站挂马:会自动下载
7、控制受害者机器(肉鸡)向其它网站发起攻击
1.2.3.1 Cookie是什么
COOKIE:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
客户端将用户名密码等信息给服务器,服务器返回用户身份对应的cookie给客户端,
之后两人的身份认定,就靠cookie来进行。
1.3 xss的分类
1.反射性xss:它是非持久型,参数型的跨站脚本。
2.存储型xss:它是将脚本代码写进数据库可以永久保存数据,危害最大。
3.DOM型xss:与反射性相似,但是DOM是树形结构,利用DOM标签。
二、xss靶机训练绕过
第一关:语句插入
代码
由上图代码中我们发现它并没有对我们进行限制,同时我们将输入值在h2标签中。
所有直接使用<script>alert(1)</script>
语句即可。
上图代码可以发现text后面接keword=“内容”
在url地址上输入?keword="<script>alert(1)</script>
第二关:闭合标签
代码
方法一:使用<script>alert(1) </script>
代码中我们发现输入的内容在value属性的双引号里面了,为此我们需要闭合引号再把标签也补全了。进行弹窗。
在输入框中输入
1" /> <script>alert(1) </script>
方法二
使用οnclick=“alert(1)” 弹窗
该方法同方法一,不同只处在于onclick为属性,可以不补全input标签直接内部输入就可以。
输入1" onclick="alert(1)
第三关:htmlspecialchars() 函数,单引号包双引号
代码
在代码中我们输入内容在value中,但是这使用了PHP的htmlspecialchars() 函数。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
htmlspecialchars(string,flags,character-set,double_encode)
预定义的字符是:& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为 ’
< (小于)成为 <>
(大于)成为 >
提示:如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。
由官方文档得知我们发现value='".htmlspecialchars($str)."'
它是单引号包住双引号。
而由于没有添加第二个参数那么函数默认:仅编码双引号
单引号并没有生效编码,只有添加了第二个参数引号类型单引号才进行编码了。
在这即闭合了单引号,才会使用内部的双引号。即‘“内容”’,当我们输入内容为:内容’ 就如同 ‘“内容” ’ ,最后一个的 ’则是我们输入的’
例如:
即当我们输入1" aaa
时,没有跳出单引号无法执行第二个参数。
’ " 1"aaa " ’
为此先将单引号闭合使其第一个参数生效在,输入第二个。输入aaa'aaa
’ " aaa ’ aaa " ’ 这第二个aaa因为没有闭合’所以"没有生效
上图可见已经跳出了,第一个参数已经执行了。aaa第二个参数也能继续了
如此输入1' onclick='alert(1)
’ " 1’ οnclick= 'alert(1) " ’
另想更细致一点可以
1" ’ οnclick='alert(1)
但是这两个不行
1 ’ οnclick=’ "alert(1)1" ’ οnclick=’ "alert(1)
第四关:闭合引号
代码
条件上来看它把< 与 > 都过滤为了空,因此我们无法使用标签。但是可以直接使用属性。即οnclick=“alert(1)”
首先闭合引号,再使用onclick
点击对话框
第五关:替代,利用javascript:alert(1)
代码
上图显示它将<script替换为<scr_ipt 同时on替换为o_n。
通过分析我们无法使用on开头的属性,即事假被禁止使用了。
对应<script出现就过滤,为此我们可以考虑JavaScript。
输入1" > <a href="javascript:alert(1)">1</a>
点击1
第六关:JavaScript区分大小写
代码
上述显示<script;on;src;data;href被过滤添加了_,即script ,on开头的事件,a标间的href和过滤数组。
在这串代码用的html,但是
alert=function()使它输入为js的标准
对于JavaScript,js区分大小写。为此我们可以考虑大小写来绕过规则
对话框输入:1" ONCLICK="alert(1)"
点击对话框
第七关:替换为空,利用重写
PHP代码
该过滤规则对象与第六关一样,
不同的是替代结果是空。其中strtolower()函数使输入内容转了小写为此我们不可以考虑同第六关的大小写解决问题。
另外我们也发现因为是替代为空,我们可以考虑重写来解决问题。
对话框输入:1" oonnclick="alert(1)
点击对话框
第八关:Unicode支持实体编码
代码
过滤对象同上,值得注意的是它依旧转小写了,对象替代为非空。如此无法重写。
查看传递的值最后是给了href,我们就可以考虑JavaScript:alert(1)。但是会被转小写并且script会被过滤。另外发现href是输入在url中Unicode支持实体编码。所有我们将其转码。
JavaScript:alert(1)
添加到对话框并且添加成功后点击友情链接
第九关:规定开头,Unicode转ASCLL
代码
上图可见,输入内容必须包含http://才能识别链接。为此我们才有上题方法,但是添加了http://但是 不能加在头部因。因为浏览器真的认为他是个网站,我们目的是弹窗为此使用JavaScript:alert(1),而后可以注释掉http://
对话框输入:
JavaScript:alert(1)//http://
点击友情链接
第十关:类型修改
代码
由代码可以看出过滤了<与>,禁止了标签。另外输入内容在value的双引号中,要闭口引号。标签要弹窗不用标签,也就属性onclick可以。为此还要修改数据类型。
url网址输入:?keyword=aa&t_link=1&t_history=1&t_sort=1" type=text onclick="alert(1)
点击对话框
第十一关:hackbar的$_SERVER[‘HTTP_REFERER’]
代码
代码中有$_SERVER[‘HTTP_REFERER’]的referer的http返回要求。为此使用HackBar。其他内容一样。
首先导入页面的url:load url
点击referer并在referer框中输入:t_ref=a" type="text" onclick="alert(1)
点击execute
查看网页代码【ctrl+u快捷键或者右击鼠标点击查看页面源代码】
如此表示内容提交成功。
点击对话框
第十二关:hackbar的$_SERVER[‘HTTP_USER_AGENT’]
代码
内容同上一题,只是发生一点改变。$_SERVER[‘HTTP_USER_AGENT’];
同样导入url标签选手use agent
同样在use agent里输入:t_ref=a" type=text onclick="alert(1)
完成后点击对话框
第十三关:hackbar的$_cookie[“变量名”]
代码
内容同上一题,只改为use agent改为$_COOKIE[“user”];取回名为user的 cookie 的值
导入网址的url,并且cookie输入t_cook=a" type=text onclick="alert(1)
输入提交后发现没有文本框出现,于是查看源码
值也没有传入。于是发现cookie括号的user,并且这个user是有规范的。它设置user的输入格式为:call me开始
于是将规范加入,于是输入:user=call me &t_cook=a" type=text onclick="alert(1)
页面弹出了文本框
同时后台的值也传入了
点击文本框
边栏推荐
- Android security optimization - APP reinforcement
- 2022 Nioke Summer Multi-School Training Camp 1 J Serval and Essay
- Soft Exam Summary
- Necessary artifacts - AKShare quants
- How to import game archives in joiplay emulator
- matplotlib图表多曲线多纵轴绘制工具方法
- 【LeetCode】42. 接雨水 - Go 语言题解
- How to solve types joiplay simulator does not support this game
- 封装、获取系统用户信息、角色及权限控制
- Chevrolet Trailblazer, the first choice for safety and warmth for your family travel
猜你喜欢
How to Repair Word File Corruption
In MySQL, the stored procedure cannot realize the problem of migrating and copying the data in the table
递增三元组
$\text{ARC 145}$
The difference between ?? and ??= and ?. and || in JS
firewalld
47.【指针与数组】
align-content、justify-content、align-items三个属性的作用和效果
Unity 加载读取PPT
How to solve the error of joiplay simulator
随机推荐
software development design process
从编译的角度来学作用域!
$\text{ARC 145}$
游戏商城表建立
transition transition && animation animation
Steven Giesel recently published a 5-part series documenting his first experience building an application with the Uno Platform.
MySQL的一个问题
2022 Nioke Summer Multi-School Training Camp 1 J Serval and Essay
An easy-to-use interface testing tools - the Postman
DFS question list and template summary
45.【list链表的应用】
[Meng Xin problem solving] Delete the Nth node from the bottom of the linked list
2D转换模块&&媒体查询
【LeetCode】42. 接雨水 - Go 语言题解
what is jira
@requestmapping注解的作用及用法
VSCode高效开源神器有哪些
MPI简谈
HCIP第十五天笔记
# # yyds dry goods inventory interview will brush TOP101: to determine whether there is a part of the list