0x1 前言
放假了好久没有看过php的代码审计了,最近的一些漏洞也没有分析和复现,搬了几天POC++的砖,划了几天水有些罪恶感了,逛论坛的时候看到别人发了个发卡网源码就看了下
源码下载地址:链接: https://pan.baidu.com/s/12EmaCA7DhGTrzBRCtDEZGw 提取码: dff9
0x2 前台一处SQL注入
直接进入主题
跟进后在24
行出发现一个参数未进行过滤,跟进流程看一下
现将post传来的数据,进行转换,这里并没有进行任何过滤只是将传入的数据转换为url参数格式
接下来对传入来的参数需要有pay_no
,并且比对传入来的sign
是否和$sign . $conf['epay_key']
的md5值相同不相同则退出程序打印一串字符串,如果满足条件则进入else
分支,这里就引发了sql注入
有意思的是,我们无法推测出sign
的md5值,但是exit
中竟然打印出了$sign . $conf['epay_key']
的md5值
所以只要随便传入一个值让程序exit打印出正确的md5在进行一次传入在parm
参数中注入即可
这里没有输出所以只能盲注当语句执行正常的时候会返回success
错误的时候返回fail
后台任意文件上传GETSHELL
代码位置在\ayangw\function.php
360行
在检查文件类型是根据
MIME
判断上传的文件格式,所以只要在上传文件时抓包设置content-type
为上面代码所限制的格式数组中的某一个即可
$uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);
查看那些操作调用了这个函数
在商品添加处存在此上传点
修改包的内容发送
上传的文件位置在assets\goodsimg
目录下,根据代码可知上传后文件名会使用上传的时间来设置文件名称
$filename=$file["tmp_name"];
$image_size = getimagesize($filename);
$pinfo=pathinfo($file["name"]);
$ftype=$pinfo['extension'];
$destination = $destination_folder.time().".".$ftype;
记住上传的时间,在一分钟之内爆破下也可以,这套源码默认模板不会再前台显示图片所以需要多提一下,部分模板显示。
0x3 篇外
这个源码的过滤只是使用addslashes
来过滤数据,所以还有其他的一些比如储存型xss
感兴趣的可以看看这里就不再说明了