网站首页 > 技术文章 正文
前言
在测试一个学校网站的时候发现一个未授权访问内网系统,但是这个未授权并不是接口啥的,而是对前端 js 的审计和调试发现的漏洞,这里给大家分享一下这次的漏洞的过程
文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担。
进入内网的过程
可以看到是一个图书馆的网站,但是只有登录了内网才能访问图书馆的资源,这个能够理解嘛,毕竟大学的图书馆资源都是内部资源
然后随便尝试登录一下
会检验我的 ip,ctf 学习的如何伪造 ip,可以用起来了
发现还是不可以,emmm,可能伪造得不对,fuzz 一波
全包 400 了,我去,检查一手
原来是给我们 url 编码了,所以这里给各位说一下,当你遇到这个问题的时候,你就需要去设置一个小东西
取消
没有区别,emmm 还是不行
难道真的要不行了吗
我尝试直接去 js 代码中看看,是不是在 js 中的限制,或者查找一下获取我的 ip 的逻辑,尝试有没有别的伪造方法
然后我们定位到 js 的代码
else if (state == '2'){
$("#login_error").html('您的IP不在授权区域');
return false;
}
发现是根据 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();
- o name 获取用户输入的用户名,使用的是 jQuery 来从 id 为 #name 的输入框中提取值。
- o passwd 获取用户输入的密码,提取自 id 为 #passwd 的输入框。
- o 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) {
var exdate = new Date();
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;
}
- o 如果状态码是 1,则认为登录成功,跳转到传入的 $url 页面。
状态码 2: IP 不在授权区域
else if (state == '2'){
$("#login_error").html('您的IP不在授权区域');
return false;
}
- o 如果状态码是 2,提示“您的 IP 不在授权区域”。
状态码 3: 用户名或密码错误
else if (state == '3'){
$("#login_error").html('用户名或密码错误');
return false;
}
- o 如果状态码是 3,提示“用户名或密码错误”。
状态码 6: 显示通知信息
else if (state == '6'){
showNotice();
return false;
}
- o 如果状态码是 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 我都害怕给它扫没有了
最后
再次声明
文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担
猜你喜欢
- 2025-06-08 Directus 火了!无代码 SQL 数据的协作应用利器!
- 2025-06-08 PHP和NodeJS的代码执行效率比较(php和nodejs的区别)
- 2025-06-08 工商银行获得发明专利授权:“基于数据库映射动态接口的前端页面应用开发方法及装置”
- 2025-06-08 FAISS和Chroma:两种流行的向量数据库的比较
- 2025-06-08 什么是数据库的索引?(数据库索引的定义和作用)
- 2025-06-08 Vercel和Neon“首次”推出用于前端云的无服务器SQL数据库
- 2025-06-08 学Access好还是MySQL好?(access与mysql的语句区别)
- 2024-09-29 技术: Java语言,后端:springboot 前端:JSP数据库
- 2024-09-29 「免费开源」基于Vue和Quasar的前端SPA项目实战之数据库逆向
- 2024-09-29 浅谈高性能数据库集群——分库分表
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 529℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 519℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 515℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 485℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 483℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)