安全矩阵

 找回密码
 立即注册
搜索
查看: 2421|回复: 0

代码审计之某代刷网系统

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-7-26 10:04:40 | 显示全部楼层 |阅读模式
原文链接:代码审计之某代刷网系统

0x00版权信息文章由YanXia首发于奇安信攻防社区
地址 :https://forum.butian.net/share/270
0x01前言众所周知,目前这种代刷网在网络上还是比较常见的,所以今天准备对这类系统进行一波审计

本文所使用的环境为phpstudy的php5.2.17版本+apache
0x02正文SQL注入
首先,我们先打开了法师的seay审计系统,由于sql注入漏洞是比较多见的,所以我往往会优先审计它

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

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

  1. elseif ($my=='edit_submit') {
  2.     $cid = $_GET['cid'];
  3.     $rows = $DB->get_row('select * from shua_class where cid=\'' . $cid . '\' limit 1');
  4. if (!$rows) {
  5. exit('<s cript language=\'j avas cript\'>a lert(\'当前记录不存在!\');history.go(-1);</s cript>');
  6. }
复制代码

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

payload为:
/admin/classlist.php?my=edit_submit&&cid=1' and sleep(10)--+
然后继续看这个文件

  1. if ($my=='add_submit') {
  2.     $name = $_POST['name'];
  3. if ($name==NULL) {
  4. exit('<s cript language=\'j avas cript\'>a lert(\'保存错误,请确保每项都不为空!\');history.go(-1);</s cript>');
  5. } else {
  6.         $sql = 'insert into `shua_class` (`name`,`active`) values (\'' .
复制代码

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

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

okey,接着往下翻。我们会发现个delete类型的sql注入
  1. elseif ($my=='delete') {
  2.     $cid = $_GET['cid'];
  3.     $sql = 'DELETE FROM shua_class WHERE cid=\'' . $cid . '\'';
  4. if ($DB->query($sql)) {
  5. exit('<s cript language=\'j avas cript\'>a lert(\'删除成功!\');window.location.href=\'classlist.php\';</s cript>');
  6. } else {
  7. exit('<s cript language=\'j avas cript\'>a lert(\'删除失败!' . $DB->error() . '\');history.go(-1);</s cript>');
  8. }
复制代码

payload如下:admin/classlist.php?my=delete&cid=1' and sleep(10)--+

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


我们打开源码看一下逻辑

  1. case 'uploadimg':
  2. if($_POST['do']=='upload'){
  3.         $type = $_POST['type'];
  4.         $filename = $type.'_'.md5_file($_FILES['file']['tmp_name']).'.png';
  5.         $fileurl = 'assets/img/Product/'.$filename;
  6. if(copy($_FILES['file']['tmp_name'], ROOT.'assets/img/Product/'.$filename)){
  7. exit('{"code":0,"msg":"succ","url":"'.$fileurl.'"}');
  8. }else{
  9. exit('{"code":-1,"msg":"上传失败,请确保有本地写入权限"}');
  10. }
  11. }
  12. exit('{"code":-1,"msg":"null"}');
  13. break;
复制代码

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


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



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

点开看看,确实如此
接着我想继续看看有木有代码执行,常见敏感函数有:eval(),assert(),preg_replace(),call_user_func(),call_user_func_arry(),arry_map()

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


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


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 14:53 , Processed in 0.015934 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表