记一次前端逻辑绕过登录到内网挖掘

admin 2025年5月30日00:34:59记一次前端逻辑绕过登录到内网挖掘已关闭评论16 views字数 3899阅读12分59秒阅读模式

前言

在测试一个学校网站的时候发现一个未授权访问内网系统,但是这个未授权并不是接口啥的,而是对前端 js 的审计和调试发现的漏洞,这里给大家分享一下这次的漏洞的过程

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担。

进入内网的过程

记一次前端逻辑绕过登录到内网挖掘

可以看到是一个图书馆的网站,但是只有登录了内网才能访问图书馆的资源,这个能够理解嘛,毕竟大学的图书馆资源都是内部资源

然后随便尝试登录一下

记一次前端逻辑绕过登录到内网挖掘

会检验我的 ip,ctf 学习的如何伪造 ip,可以用起来了

记一次前端逻辑绕过登录到内网挖掘

发现还是不可以,emmm,可能伪造得不对,fuzz 一波

记一次前端逻辑绕过登录到内网挖掘

全包 400 了,我去,检查一手

记一次前端逻辑绕过登录到内网挖掘

原来是给我们 url 编码了,所以这里给各位说一下,当你遇到这个问题的时候,你就需要去设置一个小东西

记一次前端逻辑绕过登录到内网挖掘

取消

记一次前端逻辑绕过登录到内网挖掘

没有区别,emmm 还是不行

难道真的要不行了吗

我尝试直接去 js 代码中看看,是不是在 js 中的限制,或者查找一下获取我的 ip 的逻辑,尝试有没有别的伪造方法

记一次前端逻辑绕过登录到内网挖掘

然后我们定位到 js 的代码

elseif (state == '2'){                    $("#login_error").html('您的IP不在授权区域');returnfalse;                }

发现是根据 state 来确定的

var state = $.trim(msg);

而 state 又来自于 msg

然后我们发现了关键代码

function check_login($url)    {varname= $("#name").val();varpasswd= $("#passwd").val();varremme= $("#checkboxindex").val();if(remme == 1){        setCookie('dydlname', name );        setCookie('dydlpasswd', passwd );        }else{        setCookie('dydlname');        setCookie('dydlpasswd');            }        $.ajax({            type : "POST",            async : true,            url : "../ucheck.php",            data : "name=" + name +"&passwd=" + passwd,            success : function(msg) {varstate= $.trim(msg);//alert (state);//alert (msg);//state[0] = 6;if (state == '1') {                    window.location.href=$url;//alert ($url);returntrue;                } elseif (state == '2'){                    $("#login_error").html('您的IP不在授权区域');returnfalse;                }elseif (state == '3'){                    $("#login_error").html('用户名或密码错误');returnfalse;                }elseif (state == '6'){                    showNotice();returnfalse;                }            }        });}

简单看一看

var name = $("#name").val();var passwd = $("#passwd").val();var remme = $("#checkboxindex").val();
  • • name 获取用户输入的用户名,使用的是 jQuery 来从 id 为 #name 的输入框中提取值。
  • • passwd 获取用户输入的密码,提取自 id 为 #passwd 的输入框。
  • • remme 获取用户是否选择了“记住密码”的选项,提取自 id 为 #checkboxindex 的复选框

记住密码的逻辑是

if(remme == 1){    setCookie('dydlname', name );    setCookie('dydlpasswd', passwd );else {    setCookie('dydlname');    setCookie('dydlpasswd');}

如果用户选择了“记住密码”(remme == 1),代码会调用 setCookie 函数设置两个 cookie,分别存储用户名 (dydlname) 和密码 (dydlpasswd)。

如果用户未选择记住密码,代码会清除这些 cookie。

嘿嘿嘿,那如果能够获得别人的 cookie,那么我们就可以直接获取账号和密码了

我们看看 cookie 的逻辑

/* 添加/删除 cookie */function setCookie(name, value, exdays, path) {varexdate=newDate();    exdays = exdays || 365;    exdate.setDate(exdate.getDate() + exdays);if(value === null) {        value = '';        exdays = -3;    }    document.cookie = name + '=' + encodeURIComponent(value) + ((typeof exdays === 'undefined') ? '' : ';expires=' + exdate.toGMTString()) ;}

先就是设置一下 cookie 的过期时间,然后就是设置 cookie 的值

document.cookie = name + '=' + encodeURIComponent(value) + ((typeof exdays === 'undefined') ? '' : ';expires=' + exdate.toGMTString());

encodeURIComponent 对 value 进行 URL 编码,防止特殊字符导致 Cookie 无效或出现错误。

我们看处理服务器响应的部分

状态码 1: 登录成功

if (state == '1') {    window.location.href = $url;    return true;}
  • • 如果状态码是 1,则认为登录成功,跳转到传入的 $url 页面。

状态码 2: IP 不在授权区域

else if (state == '2'){    $("#login_error").html('您的IP不在授权区域');    return false;}
  • • 如果状态码是 2,提示“您的 IP 不在授权区域”。

状态码 3: 用户名或密码错误

else if (state == '3'){    $("#login_error").html('用户名或密码错误');    return false;}
  • • 如果状态码是 3,提示“用户名或密码错误”。

状态码 6: 显示通知信息

else if (state == '6'){    showNotice();    return false;}
  • • 如果状态码是 6,调用 showNotice() 函数,可能会弹出一些通知或消息提醒。

首先看一下 6

记一次前端逻辑绕过登录到内网挖掘

然后我们检查回显

记一次前端逻辑绕过登录到内网挖掘

好的没有有用的信息,然后我们就回到改成 1

记一次前端逻辑绕过登录到内网挖掘

调试 js

记一次前端逻辑绕过登录到内网挖掘
记一次前端逻辑绕过登录到内网挖掘

成功进入了分支,然后会跳转 url

记一次前端逻辑绕过登录到内网挖掘

到 index.php

但是发现页面任然没有什么变化,????尝试直接访问

记一次前端逻辑绕过登录到内网挖掘

直接 302 跳转了

但是必须进内网才可以啊

我又在这里磨了很久,发现早都成功了

记一次前端逻辑绕过登录到内网挖掘

其实虽然 302 了,但是资源还是可以访问到的

记一次前端逻辑绕过登录到内网挖掘

然后全是这个学校的内部的文献

sql 注入的发现

但是可惜的是只能在 bp 中操作,所以很不方便,我看源码,然后找到一些文件,尝试一下爆破目录,看看有没有价值的目录,比如 admin,因为内网的话弱口令很多的

当时爆了一会,这个网站直接就崩溃了,不敢爆了,全是别人学校的内步藏书

当时 502 差点没有把我吓死我去,然后就是

记一次前端逻辑绕过登录到内网挖掘

随便访问一下

不能爆破目录,只能去尝试 sql 注入了

记一次前端逻辑绕过登录到内网挖掘

然后成功了 wc

有 sql 注入,然后下面就开始 sql 注入吧

记一次前端逻辑绕过登录到内网挖掘

可以看到注释后成功了

sql 注入无限尝试

首先尝试万能密码

记一次前端逻辑绕过登录到内网挖掘

md,发不出去包

就很离谱

然后尝试一下基本的语句,看看哪里出了问题

记一次前端逻辑绕过登录到内网挖掘

连基本的 or 1=1 都不可以,发不出去包,很奇怪

or 被过滤了或者=被过滤了??

尝试一下

or

记一次前端逻辑绕过登录到内网挖掘

等于符号

记一次前端逻辑绕过登录到内网挖掘

都没有被过滤啊??,但是组合在一起就不可以了,奇怪啊

尝试 order by 看看

记一次前端逻辑绕过登录到内网挖掘

10000 都没有反应

尝试盲注

1'and%20length((select%20database()))>1%23

记一次前端逻辑绕过登录到内网挖掘

好像是可以的??

改成小于看看结果

1'and%20length((select%20database()))<1%23

记一次前端逻辑绕过登录到内网挖掘

但是没有任何区别???

奇怪了我去

尝试时间盲注

1'and%20sleep(5)%23

记一次前端逻辑绕过登录到内网挖掘

发不过去包了

我把 sleep 的数字给去掉就可以了

记一次前端逻辑绕过登录到内网挖掘

应该是过滤了 sleep(数字)这种类型??

还专门看了一下语法的错误

记一次前端逻辑绕过登录到内网挖掘

确实是没有问题的,本地都是可以的

然后灵机一动,我输入小数

记一次前端逻辑绕过登录到内网挖掘

本地是可以的,在环境中尝试一手

记一次前端逻辑绕过登录到内网挖掘

至此 sql 注入验证成功

sql 验证就够了,不敢乱打,sqlmap 我都害怕给它扫没有了

最后

再次声明

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担

记一次前端逻辑绕过登录到内网挖掘

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月30日00:34:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次前端逻辑绕过登录到内网挖掘https://cn-sec.com/archives/4103927.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.