前言
某次在公司项目渗透时,客户临时要求从去年的hw靶标中选一个作为现场演示攻击手法,我的天,去年的,人早都修了只能自己慢慢再去挖一下了。
黑盒测试
开局典型登陆框
![记一次攻防演练代码审计插图 记一次攻防演练代码审计插图](https://www.yunweipai.com/wp-content/uploads/2024/05/image-30-780x727.png)
Net的站点,收集一下同类型站点跑个备份
![记一次攻防演练代码审计插图1 记一次攻防演练代码审计插图1](https://www.yunweipai.com/wp-content/uploads/2024/05/image-60-780x405.png)
哈哈哈哈,啥也没有习惯了,只能慢慢的黑盒测了
![记一次攻防演练代码审计插图2 记一次攻防演练代码审计插图2](https://www.yunweipai.com/wp-content/uploads/2024/05/image-59-780x517.png)
通过翻阅Js发现存在密码找回接口,第二个接口让我感到非常疑惑重置密码数据包中只有一个xmm(新密码),难道是有隐藏参数
![记一次攻防演练代码审计插图3 记一次攻防演练代码审计插图3](https://www.yunweipai.com/wp-content/uploads/2024/05/image-58-780x518.png)
通过构造相应的请求数据包,爆破存在的账户
![记一次攻防演练代码审计插图4 记一次攻防演练代码审计插图4](https://www.yunweipai.com/wp-content/uploads/2024/05/image-57-780x196.png)
最终发现了存在账户1,当时在这里卡了很久一直在试问题密保,半天搞不出来,后来索性直接去构造密码重置包
![记一次攻防演练代码审计插图5 记一次攻防演练代码审计插图5](https://www.yunweipai.com/wp-content/uploads/2024/05/image-56-780x219.png)
en,直接返回Ok,这难道是密码重置漏洞,猜测在后台程序处理查询到了用户名,然后将session写入到了当前的会话中,导致了任意密码重置的发生,也就是说先去第一个数据包查询账户,在去第二个数据包重置密码即可
![记一次攻防演练代码审计插图6 记一次攻防演练代码审计插图6](https://www.yunweipai.com/wp-content/uploads/2024/05/image-55-780x261.png)
成功登陆系统
![记一次攻防演练代码审计插图7 记一次攻防演练代码审计插图7](https://www.yunweipai.com/wp-content/uploads/2024/05/image-54-780x284.png)
翻了一下系统功能点,发现了一个好东西,这不会是源码吧,但是没有提供下载功能点,只能双击预览
![记一次攻防演练代码审计插图8 记一次攻防演练代码审计插图8](https://www.yunweipai.com/wp-content/uploads/2024/05/image-52-780x289.png)
在预览的过程中发现如下数据包,返回了文件路径,但是拼接访问显示404
![记一次攻防演练代码审计插图9 记一次攻防演练代码审计插图9](https://www.yunweipai.com/wp-content/uploads/2024/05/image-51-780x219.png)
![记一次攻防演练代码审计插图10 记一次攻防演练代码审计插图10](https://www.yunweipai.com/wp-content/uploads/2024/05/image-50-780x133.png)
应该还有个目录前缀继续看看文件中的其他文件发现
![记一次攻防演练代码审计插图11 记一次攻防演练代码审计插图11](https://www.yunweipai.com/wp-content/uploads/2024/05/image-49.png)
拼接过后直接下载了该压缩包
![记一次攻防演练代码审计插图12 记一次攻防演练代码审计插图12](https://www.yunweipai.com/wp-content/uploads/2024/05/image-48-780x97.png)
解压一看,好家伙还真是源码
![记一次攻防演练代码审计插图13 记一次攻防演练代码审计插图13](https://www.yunweipai.com/wp-content/uploads/2024/05/image-47-780x333.png)
转向灰盒测试
用dnspy直接反编译查看源码,先来到我们的入口,密码重置处查看一下相应的代码逻辑,果然和我们想的一样,这里先通过string ucode = base. Request. Form[“yhm”]; 获取用户输入yhm,并传递给ucode,然后通过 DataTable peo = this. user. GetPeo(ucode) ; 来查询该用户名是否存在,之后进入if语句中,如果用户名不存在则直接返回不存在该用户名,存在则通过base. Session[“yhm”] = peo. Rows[O][“UID”]. ToString() ; 设置会话session,而问题也恰恰出现在这里,这里并没有判断用户名和密保问题是否相匹配直接设置了session导致了任意账户密码重置漏洞的发生
![记一次攻防演练代码审计插图14 记一次攻防演练代码审计插图14](https://www.yunweipai.com/wp-content/uploads/2024/05/image-46-780x359.png)
跟进密码重置模块查看,获取用户输入 xmm,之后通过`this.user.UpPwd(xmm, base.Session[“yhm”].ToString(), “1”) 更新了账户密码,只要session存在即可触发该漏洞,而session只需要通过上面的找回密码第一个步骤即可获取
![记一次攻防演练代码审计插图15 记一次攻防演练代码审计插图15](https://www.yunweipai.com/wp-content/uploads/2024/05/image-45-780x209.png)
什么,你说还要爆破账户太麻烦了怎么办,没关系贴心的系统给你准备好了默认账户这套系统实在是太棒了,和我女朋友一样贴心温柔。
![记一次攻防演练代码审计插图16 记一次攻防演练代码审计插图16](https://www.yunweipai.com/wp-content/uploads/2024/05/image-44-780x125.png)
深入挖掘
1. 任意文件上传
全局搜索Upload,在几处白名单后,终于让我看见一处没有做过滤的
![记一次攻防演练代码审计插图17 记一次攻防演练代码审计插图17](https://www.yunweipai.com/wp-content/uploads/2024/05/image-43-780x389.png)
向上追溯一下text = text. Insert(text.LastIndexOf(‘.’), “_” + text2); 给定的字符串 text 中,在最后一个句点(.)之前插入另一个字符串 text2 和下划线(_)并赋值给text,也就说后缀没有发生改变,继续向上跟踪text,全程后缀都可控,妥妥的文件上传
![记一次攻防演练代码审计插图18 记一次攻防演练代码审计插图18](https://www.yunweipai.com/wp-content/uploads/2024/05/image-42-780x35.png)
![记一次攻防演练代码审计插图19 记一次攻防演练代码审计插图19](https://www.yunweipai.com/wp-content/uploads/2024/05/image-41-780x309.png)
2. 任意文件删除+SQL
简单粗暴的任意文件删除漏洞和SQL注入漏洞
![记一次攻防演练代码审计插图20 记一次攻防演练代码审计插图20](https://www.yunweipai.com/wp-content/uploads/2024/05/image-40-780x181.png)
删除一下测试文件
![记一次攻防演练代码审计插图21 记一次攻防演练代码审计插图21](https://www.yunweipai.com/wp-content/uploads/2024/05/image-39-780x394.png)
![记一次攻防演练代码审计插图22 记一次攻防演练代码审计插图22](https://www.yunweipai.com/wp-content/uploads/2024/05/image-38-780x219.png)
在测试测试SQL
![记一次攻防演练代码审计插图23 记一次攻防演练代码审计插图23](https://www.yunweipai.com/wp-content/uploads/2024/05/image-37-780x551.png)
发现存在着特殊字符过滤器CuustomFilter,过滤了如下[~<>$%\\~\\+\\&\\\\\\?\\:\\{(‘;=]
![记一次攻防演练代码审计插图24 记一次攻防演练代码审计插图24](https://www.yunweipai.com/wp-content/uploads/2024/05/image-36-780x94.png)
![记一次攻防演练代码审计插图25 记一次攻防演练代码审计插图25](https://www.yunweipai.com/wp-content/uploads/2024/05/image-35-780x450.png)
过滤了\’不知道如何绕过,只能在找个没有经过该过滤器的请求,最终找到如下控制器
![记一次攻防演练代码审计插图26 记一次攻防演练代码审计插图26](https://www.yunweipai.com/wp-content/uploads/2024/05/image-34-780x113.png)
其中PjfcListByPages 获取四个参数,并直接在pageModel. strCondition = string.Concat(new string] {” FTimePC=”, pe, ” and BPjUID='”, BPjUID, “” 拼接,导致注入发生
![记一次攻防演练代码审计插图27 记一次攻防演练代码审计插图27](https://www.yunweipai.com/wp-content/uploads/2024/05/image-33-780x347.png)
![记一次攻防演练代码审计插图28 记一次攻防演练代码审计插图28](https://www.yunweipai.com/wp-content/uploads/2024/05/image-32-780x160.png)
![记一次攻防演练代码审计插图29 记一次攻防演练代码审计插图29](https://www.yunweipai.com/wp-content/uploads/2024/05/image-31-780x250.png)
总结
至此通过任意账户密码重置——》缺省账户——》文件上传——》前台SQL——》前台任意文件删除——〉 拿下这套系统还是很轻松的,如有问题欢迎各位师傅指正
作者:AGONI,原文:https://xz.aliyun.com/t/12666
![记一次攻防演练代码审计插图30 记一次攻防演练代码审计插图30](https://www.yunweipai.com/wp-content/uploads/2024/05/0226网安关注码引流海报-拷贝-780x1387.jpg)
本文链接:https://www.yunweipai.com/45419.html
网友评论comments