菜鸡的第二次审计 审计开始 第一处:先来到admin.php页面 先不登录 [![](https//shs3.b.qianxin.com/attack_forum/2021/09/attach-dc7aaa854fdb5063a7faa9a80cd6ad491…
菜鸡的第二次审计
审计开始
第一处:
先来到admin.php页面 先不登录
查看源码
admin.php 页面require()引入了一个common.php页面
require()是php的内置函数,作用是引入或者包含外部php文件。
工作原理:当本身php文件被执行时,则外部文件的内容就将被包含进该自身php文件中;当包含的外部文件发生错误时,系统将抛出错误提示,并且停止php文件的执行。
注意:使用require时,一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误 。
然后接着往后面看
这里发现一个sql语句 看起来是没有什么防护的 可能有突破 忘前面看 寻找$m
在28行和29行发现$m 有两种发送赋值 一种是通过file_get_contents函数 另一种是 如果$m是空的话 就自动赋默认值 默认值没什么看的 我们不能控制 我们看看这个file_get_contents函数
file_get_contents() 函数把整个文件读入一个字符串中。
然后在file_get_contents函数内部发现了php://input 输入流
php://input可以读取没有处理过的POST数据
所以这里就导致了 post数据可控
然后继续往下看
$m会调用一个Dec函数 我们跟进这个函数
这个函数使用了json_decode函数 json_decode — 对 JSON 格式的字符串进行编码
说明 输入流传入的数据需要json格式 然后继续往后看 return会判断$c的值 false的话 就直接把解码后的json数据返回出去 但是前面代码调用的时候传入的true 所以会返回一个函数Rpl 继续跟进这个函数
这个函数用到了foreach is_array is_string 等函数
Foreach函数是用来遍历数组的
Is_array函数是判断变量是否为数组
Is_string 同理 判断是否为字符串
所以这个函数的大概意思就是 将解码后的json数据 通过foreach遍历为键值的形式 值为数组的话则递归调用 判断是否为数组 直到为字符串 才进入下一个判断 在下一个elseif里面 这通过str_replace 进行过滤 经过ascii码值 过滤掉 \ * ' " % 空格 然后返回过滤后的数据
然后回到admin.php页面 32行 判断$m[‘act’]的值是否为idx和lgn 因为用的&& 所以只要同时不等于两个 就会进入if 执行sql 又因为前面过滤掉的字符对sql语句影响不大 直接构造语句
来到admin.php页面然后刷新抓包
然后改变请求方式
构造
payload: {"act":"ttt","uid":"123||sleep(5)"} 延时5秒
因为没有回显位 尝试盲注
也是可以的 后面盲注就不继续测试了
第二处:
通过审计工具发现一处可能存在注入的地方
然后跟进
发现是在会员保存的地方 属于需要进入后台
我们先登入后台 来到会员保存的地方
然后点击保存抓包
然后通过代码分析
要$m[‘ID’]的值乘1不为0 才会进入else 所以进行改包
下面这个if是通过$m[‘Nm’]判断名字是否重复 如果重复的话就终止后续执行了 所以名字随便也改一下
然后来到第二个if 里面有sql语句
只看到这个ID这个位置 后面先不看 这里没有过滤 等操作 也没有单引号 直接构造
payload:{"act":"suv","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":"1||sleep(5)","Nm":"12653","Nc":"123","Np":"123","Ne":0,"Nv":0}
延时注入一枚
第三处:
员工删除的地方 没有单引号等保护或者过滤
直接先来到员工管理页面
因为是本地搭建的原因 有些无法显示 但不影响 我们操作 因为删除 和添加 也只是参数不一样嘛 直接先添加员工 然后抓包
Sav是员工保存的包 我们把它改为sad
然后因为这里没有防护 直接构造
payload:{"act":"sad","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":0||sleep(5),"Nm":"123","Np":"123","Nr":""}
放包 但是发现报错了 不要紧 我们全局搜索下这个报错
发现是在json解码的时候报错了 回来在看数据包 发现没有添加引号 所以报错了 我们加上在试试
Payload:{"act":"sad","uid":"1","sid":"zC1fEUcZ0CZAHAde","ID":"0||sleep(5)","Nm":"123","Np":"123","Nr":""}
成功延时
第四处:
找到一个运费删除的地方 和上面的差不多 都是通过case 判断进入
这里和上面同理 直接抓包改掉act的值为syd 直接用上面的包 改也可以
然后放包
延时成功
后续还有优惠删除等 删除的操作 都有这个问题 没有给单引号保护以及过滤 都可以延时注入
最后
此商城版本已经更新 最新版以修复这些 此版本仅供学习思路
最新版链接:http://www.igoldway.com/
都是比较简单的操作 复杂在还不太会 继续学习
- 本文作者: 永安寺
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/629
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!