问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
某商城代码审计
漏洞分析
## 菜鸡的第二次审计 ### 审计开始 ### 第一处: 先来到admin.php页面 先不登录 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-dc7aaa854fdb5063a7faa9a80cd6ad491...
菜鸡的第二次审计 -------- ### 审计开始 ### 第一处: 先来到admin.php页面 先不登录 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-dc7aaa854fdb5063a7faa9a80cd6ad4915b5974e.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-dc7aaa854fdb5063a7faa9a80cd6ad4915b5974e.png) 查看源码 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-97ba2c04165fdbb49ddaa6280305486ac5d15394.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-97ba2c04165fdbb49ddaa6280305486ac5d15394.png) admin.php 页面require()引入了一个common.php页面 require()是php的内置函数,作用是引入或者包含外部php文件。 工作原理:当本身php文件被执行时,则外部文件的内容就将被包含进该自身php文件中;当包含的外部文件发生错误时,系统将抛出错误提示,并且停止php文件的执行。 注意:使用require时,一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误 。 然后接着往后面看 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-17338c336a30642c6a565077e118b8e868c06698.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-17338c336a30642c6a565077e118b8e868c06698.png) 这里发现一个sql语句 看起来是没有什么防护的 可能有突破 忘前面看 寻找$m [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-1fae0b91374c69d3bb03872ff3e7f9a8916ffb68.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-1fae0b91374c69d3bb03872ff3e7f9a8916ffb68.png) 在28行和29行发现$m 有两种发送赋值 一种是通过file\_get\_contents函数 另一种是 如果$m是空的话 就自动赋默认值 默认值没什么看的 我们不能控制 我们看看这个file\_get\_contents函数 file\_get\_contents() 函数把整个文件读入一个字符串中。 然后在file\_get\_contents函数内部发现了php://input 输入流 php://input可以读取没有处理过的POST数据 所以这里就导致了 post数据可控 然后继续往下看 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5deb5a380c2df41fe876082d1730b489045eba27.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5deb5a380c2df41fe876082d1730b489045eba27.png) $m会调用一个Dec函数 我们跟进这个函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4e3a70d298c65bef67f5b786a6880f7758ee7d92.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4e3a70d298c65bef67f5b786a6880f7758ee7d92.png) 这个函数使用了json\_decode函数 json\_decode — 对 JSON 格式的字符串进行编码 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-fc62e2c963fc0c061575fa459a11d6bd51f9abe0.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-fc62e2c963fc0c061575fa459a11d6bd51f9abe0.png) 说明 输入流传入的数据需要json格式 然后继续往后看 return会判断$c的值 false的话 就直接把解码后的json数据返回出去 但是前面代码调用的时候传入的true 所以会返回一个函数Rpl 继续跟进这个函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-b28303f6cd084b15485c6c61ab0d11a378a3499a.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-b28303f6cd084b15485c6c61ab0d11a378a3499a.png) 这个函数用到了foreach is\_array is\_string 等函数 Foreach函数是用来遍历数组的 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-d181cab5cdf94d9bcbe0cad9dbbce2f5a79174d5.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-d181cab5cdf94d9bcbe0cad9dbbce2f5a79174d5.png) Is\_array函数是判断变量是否为数组 Is\_string 同理 判断是否为字符串 所以这个函数的大概意思就是 将解码后的json数据 通过foreach遍历为键值的形式 值为数组的话则递归调用 判断是否为数组 直到为字符串 才进入下一个判断 在下一个elseif里面 这通过str\_replace 进行过滤 经过ascii码值 过滤掉 \\ \* ' " % 空格 然后返回过滤后的数据 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-1aec447baeef6f8fbc3a5def2eecc1243831a6cf.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-1aec447baeef6f8fbc3a5def2eecc1243831a6cf.png) 然后回到admin.php页面 32行 判断$m\[‘act’\]的值是否为idx和lgn 因为用的&& 所以只要同时不等于两个 就会进入if 执行sql 又因为前面过滤掉的字符对sql语句影响不大 直接构造语句 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-f5a00b98866f84d521caae63277a610d948fd940.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-f5a00b98866f84d521caae63277a610d948fd940.png) 来到admin.php页面然后刷新抓包 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-66e4f64e59696bf82c4729a0f2d3ef497b67c813.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-66e4f64e59696bf82c4729a0f2d3ef497b67c813.png) 然后改变请求方式 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-2f97c694ddc8375378a11283da3cd82f69057aba.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-2f97c694ddc8375378a11283da3cd82f69057aba.png) 构造 > payload: {"act":"ttt","uid":"123||sleep(5)"} 延时5秒 > 因为没有回显位 尝试盲注 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-71fad22b2a0fc8aeb5f467fff92117485f20f61e.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-71fad22b2a0fc8aeb5f467fff92117485f20f61e.png) 也是可以的 后面盲注就不继续测试了 ### 第二处: 通过审计工具发现一处可能存在注入的地方 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-7552666c2febf87194c8cbdb2751e16d9d55d740.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-7552666c2febf87194c8cbdb2751e16d9d55d740.png) 然后跟进 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5641911987ed142d833262b55254e3f3b8a49d19.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5641911987ed142d833262b55254e3f3b8a49d19.png) 发现是在会员保存的地方 属于需要进入后台 我们先登入后台 来到会员保存的地方 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-140ebc6667477b020606c729fc2057bfcd775c71.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-140ebc6667477b020606c729fc2057bfcd775c71.png) 然后点击保存抓包 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-33f44a219a2588cbd30ebfb15abc34156396e4aa.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-33f44a219a2588cbd30ebfb15abc34156396e4aa.png) 然后通过代码分析 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-8925501b33551be0e5683e9ff1eb2b5373dff50d.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-8925501b33551be0e5683e9ff1eb2b5373dff50d.png) 要$m\[‘ID’\]的值乘1不为0 才会进入else 所以进行改包 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-3f8eb78eb43bfd18852ecb4d7abe589d5191a487.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-3f8eb78eb43bfd18852ecb4d7abe589d5191a487.png) 下面这个if是通过$m\[‘Nm’\]判断名字是否重复 如果重复的话就终止后续执行了 所以名字随便也改一下 然后来到第二个if 里面有sql语句 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-025722f6903d27d47937e4278dc74217c13d8fe8.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-025722f6903d27d47937e4278dc74217c13d8fe8.png) 只看到这个ID这个位置 后面先不看 这里没有过滤 等操作 也没有单引号 直接构造 > payload:{"act":"suv","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":"1||sleep(5)","Nm":"12653","Nc":"123","Np":"123","Ne":0,"Nv":0} [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-94819fe25e4f9d32e11aa2147008dbecb6645847.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-94819fe25e4f9d32e11aa2147008dbecb6645847.png) 延时注入一枚 ### 第三处: 通过审计工具找到员工删除这里 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4cfd0fba5715933062a2ceee44cada58a37f7309.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4cfd0fba5715933062a2ceee44cada58a37f7309.png) 员工删除的地方 没有单引号等保护或者过滤 直接先来到员工管理页面 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-2cf46a72c610d374796e31780d047b1d3f32dd11.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-2cf46a72c610d374796e31780d047b1d3f32dd11.png) 因为是本地搭建的原因 有些无法显示 但不影响 我们操作 因为删除 和添加 也只是参数不一样嘛 直接先添加员工 然后抓包 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5b781d856ba95fa6c36a0e22fae631505333f50d.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-5b781d856ba95fa6c36a0e22fae631505333f50d.png) Sav是员工保存的包 我们把它改为sad [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4c74eb6b3fcb8824c2742f358e49758378740907.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-4c74eb6b3fcb8824c2742f358e49758378740907.png) 然后因为这里没有防护 直接构造 > payload:{"act":"sad","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":0||sleep(5),"Nm":"123","Np":"123","Nr":""} [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-0dd1b2afbb4ff4d4ff888e1dbb4c1eed082f1a4b.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-0dd1b2afbb4ff4d4ff888e1dbb4c1eed082f1a4b.png) 放包 但是发现报错了 不要紧 我们全局搜索下这个报错 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-767cab6560a729eed1788abf2bff01694bca3944.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-767cab6560a729eed1788abf2bff01694bca3944.png) 发现是在json解码的时候报错了 回来在看数据包 发现没有添加引号 所以报错了 我们加上在试试 > Payload:{"act":"sad","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":"0||sleep(5)","Nm":"123","Np":"123","Nr":""} [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-3904ef56fa722b82a9bd126744ddd7d7c3507abc.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-3904ef56fa722b82a9bd126744ddd7d7c3507abc.png) 成功延时 ### 第四处: 找到一个运费删除的地方 和上面的差不多 都是通过case 判断进入 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-0074617f27d7df1255fcf779e7de6b8b54079315.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-0074617f27d7df1255fcf779e7de6b8b54079315.png) 这里和上面同理 直接抓包改掉act的值为syd 直接用上面的包 改也可以 然后放包 [![](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-d0f9a20472af5dd2d32bddceb617db7b5552239e.png)](https://shs3.b.qianxin.com/attack_forum/2021/09/attach-d0f9a20472af5dd2d32bddceb617db7b5552239e.png) 延时成功 后续还有优惠删除等 删除的操作 都有这个问题 没有给单引号保护以及过滤 都可以延时注入 ### 最后 此商城版本已经更新 最新版以修复这些 此版本仅供学习思路 最新版链接:<http://www.igoldway.com/> 都是比较简单的操作 复杂在还不太会 继续学习
发表于 2021-09-08 17:07:43
阅读 ( 5144 )
分类:
漏洞分析
0 推荐
收藏
2 条评论
ddi
2021-09-09 09:51
表哥有源码吗,过段时间要讲代码审计,想用一下你这个例子,tankcz@qq.com,非常感谢
请先
登录
后评论
永安寺
2021-09-09 16:07
发你了
请先
登录
后评论
请先
登录
后评论
永安寺
8 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!