某发卡平台源码审计

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.php360行


在检查文件类型是根据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

感兴趣的可以看看这里就不再说明了

1 个赞

注入那里没看懂,打印出来的md5不是管理员的密码吗

打印出来的MD5是加密的sign和$conf['epay_key']的内容,并不是管理员的密码


大兄弟仔细看代码呀,这里的MD5加密的是epay_key,不是所有的MD5都是密码

1 个赞