【 XSS-labs解题笔记 第八关到第十六关】

5 篇文章 0 订阅
1 篇文章 0 订阅

一 XSS-labs解题笔记

1.1html实体转义

为什么要用转义字符串?
HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用。这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号,该怎么办呢?

这就要说到HTML转义字符串(Escape Sequence)了。

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。

1.2htmlspecialchars()函数

htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体。
把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:

<?php $str = "This is some <b>bold</b> text."; echo htmlspecialchars($str); ?>

HTML 输出如下

<!DOCTYPE html> <html> <body> This is some <b>bold</b> text.
</body> </html>

浏览器输出如下

This is some <b>bold</b> text.

提示: 要把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。

1.3应用:第八,九关均使用该知识点

第八关源码
在这里插入图片描述
第九关源码
在这里插入图片描述

可以发现,在echo输出,均没有使用htmlspecialchars()进行实体转化,所以我们可以将payload直接构造为实体,因为他不会转化实体,所以不会被过滤
在这里插入图片描述

2.1 PHP中strops()函数

strpos()函数是用来查找字符串首次出现的位置,返回类型为int,但是如是找不到该字符,返回布尔型的false值。

应注意的是条件的判断应使用!== 或===,否则将会出现错误,且此函数区分大小写。

<?php
header('content-type:text/html;charset=utf-8');
 
$a = '中华共和国主义接班人';
$find = '主义';
var_dump(strpos($a,$find));//15
 
?>

返回结果为15,此时应注意的是此函数的位置从0开始,且是按字节计算,一个中文字符占3个字节。

2.2应用 第九关:

在这里插入图片描述
构造的payload必须包含http://字符串,例如:javascript:alert('http://')

3.1str_replace()函数

说明:

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。该字符串或数组是将subject中全部的search都被replace替换之后的结果。
1、search,要替换的字符串,或数组
2、replace,被用来替换的字符串或数组
3、subject,被查询的字符串或数组
4、count,可选,如果被指定,将为设置为替换的次数
5、返回值:该函数返回替换后的数组或者字符串(新生成的)
四种情况:

<?php
	//实例一:字符串替换字符串
	$str1 = str_replace("red","black","red green yellow pink purple");
	echo $str1."";	//输出结果为black green yellow pink purple
?>
<?php
	//实例二:字符串替换数组键值
	$arr = array("blue","red","green","yellow");
	$str1 = str_replace("red","pink",$arr,$i);
	print_r($str1);//输出结果:Array ( [0] => blue [1] => pink [2] => green [3] => yellow )
?>
<?php
	//实例三:数组替换数组,映射替换
	$arr1 = array("banana","orange");
	$arr2 = array("pitaya","tomato");
	$con_arr = array("apple","orange","banana","grape");
	$con_rep = str_replace($arr1,$arr2,$con_arr,$count);
	print_r($con_rep);//输出结果:Array ( [0] => apple [1] => tomato [2] => pitaya [3] => grape )
?>
<?php
	//实例四:如$search为数组,$replace为字符串时
	$search = array("banana","grape");
	$replace = "tomato";
	$arr = array("banana","apple","orange","grape");
	$new_arr = str_replace($search,$replace,$arr,$count);
	print_r($new_arr);//输出结果:Array ( [0] => tomato [1] => apple [2] => orange [3] => tomato )
?>

3.2应用 第十关

在这里插入图片描述

所以只能使用**οnclick=alert(1)**语句构造payload,因为<>都被replace了
在这里插入图片描述

但是在通关第十关的时候,必须啊type属性hidden给删除才会出现小框给你点击,很麻
一开始构造的payload为"οnclick=alert(1)
但是上述payload构造不对,alert(1)后面多了一个“要再放一个"
所以正确为:

"οnclick="alert(/1/)

4.1 $_SERVER使用

$_SERVER[‘HTTP_REFERER’] #链接到当前页面的前一页面的 URL 地址。

$_SERVER[‘HTTP_USER_AGENT’] #当前请求的 User_Agent: 头部的内容。
SERVE详细用法

4.2 referer

Referer:表示当前请求资源所在页面的完整路径:协议+域名+查询参数(注意不包含锚点信息),如http://test.my.com/p/GHB2021081702-001/index.html?a=1&b=2。
当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

4.3 use-agent

User-Agent:是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识

4.4 cookie

我们想象一个场景,当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。

    这是怎么做到的呢?其实就是游览器保存了我们的cookie,里面记录了一些信息,当然,这些cookie是服务器创建后返回给游览器的。游览器只进行了保存。下面展示bilibili网站保存的cookie。

以下是cookie中常用属性的解释。

Name:这个是cookie的名字
Value:这个是cooke的值
Path:这个定义了Web站点上可以访问该Cookie的目录
Expires:这个值表示cookie的过期时间,也就是有效值,cookie在这个值之前都有效。
Size:这个表示cookie的大小

4.5 应用:第十一关,十二关,十三关

4.5.1 十一关

在这里插入图片描述
这里用到了上一关的url地址,上网搜索之后发现要使用我们最爱的burp抓包修改,来吧,burpsuit,i love fuck
注意:抓包的时候要先将xss漏洞的输入框显示出来,就是将hidden删除后再抓包,不然抓包后修改数据放包浏览器没有回显
在这里插入图片描述
抓包后修改referer

在这里插入图片描述

构造payload为"onclick=alert(1) type="不要忘记写type 属性
构造完之后浏览器出现白框
在这里插入图片描述

关闭插件后点击白框进去下一关。

4.5.2 十二关

第十二关同十一关一样,只不过抓包后要修改的地方从referer变成了user-agent

在这里插入图片描述
修改后,放包,通关下一关
在这里插入图片描述

4.5.3 十三关

在这里插入图片描述
分析十三关出了很大的失误,误以为setcookie函数将cook设为call me maybe?后就不能更改了,而且源码又存在27行输出实义话后的str00(即变量t_sort),题目又能get读取t_sort,所以就想着设置t_sort的payloadt通关,但是经过多次尝试后发现,行不通,之后回过头看别人,发现就是抓包后改变cookie的值,大为懊悔。

由于刚刚学习一段时间,还不太清楚为甚么t_sort不能形成xss漏洞,推测和实义化函数htmlspecialchars($str00)有关。

大概说一下我的想法,htmlspecialchars($str00)该函数将html有关函数全都转为了字符串,导致网站不能执行函数,例如,οnclick=alert(1),经过htmlspecialchars()函数后,就真的只是字符串"οnclick=alert(1)"了

正常抓包修改cookie放包通关
在这里插入图片描述

5.1 exit xss

什么是Exif

可交换图像文件格式,是专门为数码相机的照片设定的,可记录数码照片的属性信息和拍摄数据。

5.2 应用:十四关

我是解题方法
。。。。其实是同一个博客,诶嘿。

6(第十五关)(未解决)

老师的博客解决方法,没太懂15关
这两关都是啥啊,无语

7.1 Bypass命令执行(知识繁杂)

%0a、%0d    换行符与回车符
|           第一条命令结果作为第二条命令的输入
||          第一条执行失败,执行第二条命令
;           连续指令功能。
&           连接的两条命令都会执行
&&          当第一条执行成功后执行后续命令

echo 666`date` => 666Tue 14 May 2019 07:15:23 AM EDT

# Windows
Copy %0a

%1a - 一个神奇的角色,作为.bat文件中的命令分隔符
<?php
    $command = 'dir '.$_POST['dir'];
    $escaped_command = escapeshellcmd($command);
    file_put_contents('out.bat',$escaped_command);
    system('out.bat');
?>

bypass详细解释

7.2应用16关

在这里插入图片描述
这关将空格换位%a0即可
但我这关困扰了一些时间,为什么我不能直接传入html编码进去呢?
(算了,后面的区域以后再来探索吧)17,18,19,20关放在其他的博客里面记录。
绝对不做太监。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值