PHP项目类RCE及文件包含下载删除

PHP项目类RCE及文件包含下载删除
Yatming的博客SQL注入
select
,insert
,update
,mysql_query
,mysqli
文件上传
$_FILES
,type="file"
,上传
,move_uploaded_file()
XSS跨站
print
,print_r
,echo
,sprintf
,die
,var_dump
,var_export
文件包含
include
,include_once
,require
,require_once
代码执行
eval
,assert
,preg_replace
,call_user_func
,call_user_func_array
命令执行
system
,exec
,shell_exec
,passthru
,pcntl_exec
,popen
,proc_open
变量覆盖
extract()
,parse_str()
,importrequestvariables()
,$$$$
反序列化
serialize()
,unserialize()
,__construct
,__destruct
其他漏洞
unlink()
,file_get_contents()
,show_source()
,file()
,fopen()
通用关键字
$_GET
,$_POST
,$_REQUEST
,$_FILES
,$_SERVER
- 功能点或关键字分析可能存在漏洞
- 抓包或搜索关键字找到代码出处及对应文件
- 追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
文件包含跨站-搜索或应用-echo
源代码全局搜索echo
,这里发现很多,优先看非后台的文件,如果是后台的话就需要登录,先看不需要登录的一般这种都是出现在留言区或者其他类似的地方
首先找到这个contact.php
这个文件
找到一个可以控制的变量$page,这个变量也加上了魔术引号的,但是魔术引号是用来过滤sql注入,跟xss用的尖括号没有太大关系,所以这里进行xss:
文件包含漏洞,搜索关键字include
我这里访问files下面的带php后缀的文件,就可以正常解析,版本也没错,00截断也试过了,长度截断也用过了,就是不行
下面是访问的是:1.txt.php文件,路径:/files
earmusic-无框架-文件下载-搜索或应用功能-down 等
1 | 这里从会员中心的功能可能存在的漏洞:音乐下载存在文件下载漏洞;头像和音乐上传存在文件上传漏洞;个人信息修改可能存在SQL注入漏洞;日志,页脚可能存在XSS漏洞;查看调用的api可能存在一些其他漏洞;查看数据包传输格式等等 |
首先创建一个普通用户,然后上传一个mp3的音频,点击下载按钮,进行抓包,这里是两个包的情况
把两个url都访问一下,http://127.0.0.1/ear_music/template/default/source/audio.php?id=1
,就是下载链接
然后根据这个下载地址定位到源代码中的位置:
intval() 函数用于获取变量的整数值
后面就是将这个id值带入到数据库中进行,这里有魔术引号,不太好注入,所以这里不进行研究,带入到数据库之后,判断某个值是1还是2,如果是1就是vip,如果是2就是收费(猜测),我们上传的歌曲是3,所以可以下载,这里的in_grade
,的值是写入到数据库中的所以不能修改,如果可以修改的话,那么就可以考虑将需要vip或者付费的歌曲修改成免费的
到数据库进行查找,这里发现上传音乐的音频地址,就是数据库的in_audio
发现在上传音乐的地方,saferequest过滤传参,unescape函数解码经过url编码的编码的参数
checkrename函数检测文件是否存在(这里应该是文件上传的检测机制)
如果文件是添加,且符合匹配规则,就将file字符串中的tmp(这里应该是临时文件)替换为dir(也就是attachment的路径)
然后就是找ajax.php在哪里进行操作,通过前面的抓包,可以知道应该就是上传音乐的地方
但是下载的内容不对
然后是绝对路径的下载,我这里也可以下载,但是小迪的视屏中就是被过滤了,绕过的方法是可以用:/
1 | 总结: |
zzzcms-无框架-文件删除 RCE-搜索或应用-unlink,eval
一般在黑盒测试中很难挖掘到文件删除漏洞,因为很难探针到
PHP文件删除搜索关键字unlink
,对应函数 del_file
,查看调用此的地方
然后就要判断在哪里有调用del_file函数,先是全文搜索,然后在全局搜索
全文搜索这里调用这个函数的都是另外一个函数,所以,这里优先考虑直接调用的,所以全局搜索
可以只有两个文件,一个admin暂时不考虑,下面这个就是上面全文搜索的结果
那么就先考虑全文搜索的结果,还是同样全文搜索和全局搜索,这里就不放截图了,都是没有被其他的调用,只是做了声明,全局搜索handle_upload函数,发现被调用一次,在upload函数中被调用过,然后在全局搜索,发现被调用的地方很多,所以这里就先跳过,直接看admin文件中直接调用的
这里又被delfile
函数包裹,所以这里在定位delfile函数
构造参数upload下的1.txt,成功删除!!!
这个漏洞有点鸡肋,首先是需要你有admin的权限,不然删除不了
代码执行
找关键字:eval
在eval中有一个$ifstr
变量,在次定位matches变量,如下图:
这是一个执行正则的函数:preg_match_all
,第一个参数是匹配的规则,第二个参数是被匹配的对象,第三个参数是匹配出来的结果也就是matches,上面这里有一个public,说明这是一个对象
查看是哪里调用了这个对象,优先是非管理员的文件
zcontent变量又user_tql传递
这个漏洞在管理后台的模板管理,在client和admin都调用了对象,然后在一个模板中写入对应格式的一句话
我这里可能是版本问题还是什么原因,一直没有成功
1 | ---也就是,后台的模板文件被修改之后,前端的界面引用了这个模板,因此也会被修改 |