目录
- 漏洞关键字:
- 演示案例:
- xhcms-无框架-文件包含跨站-搜索或应用-include
- earmusic-无框架-文件下载-搜索或应用功能-down等
- zzzcms-无框架-文件删除RCE-搜索或应用-unlink、eval
漏洞关键字:
SQL注入:
select insert update mysql_query mysql等
文件上传:
$_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等
演示案例:
xhcms-无框架-文件包含跨站-搜索或应用-include
#通过应用及URL地址等分析可能存在xss及包含安全
抓包找到xss无过滤代码块及文件包含有后缀需绕过代码块
找跨站漏洞的话,第一个找输出函数,第二个是功能点;如果是在输出地方的话,那就找输出函数,如果是功能点,那就找变量和数据有相应输出的地方;网站留言板可以测试跨站漏洞,因为留言板存在接受数据,将数据进行留言板展示的,这个操作是满足跨站漏洞原理的
可以从功能点上分析,也可以从代码层面上搜索指令进行测试
在这里我们可以搜索一下全局相关的输出性函数
一般我们是找非admin的,因为后台一般是要我们登录才能进行操作,所以我们优先看非后台目录的地方
可以看到navs是从mysql执行的地方来的,而sql语句是已经写死了,也就是说数据库的数据是死的,我们不能控制它,所以navs是没作用的
echo是受pages、info两个变量控制的,info的值是写死的,也没什么作用;pages明显是从变量page接收过来的,用到了魔术引号addslashes对一些. / ' "
符号进行转义,我们跨站语句不会触发这些字符,所以这个地方可能存在跨站漏洞,文件是/files/contact.php
我们尝试访问文件看一下,文件对应存储路径地址和我们访问地址,如果采用mvc结构的话,与自己写的访问路由结构,对应不上就会出现访问失败
我们看一下files下的index首页
看一下根目录的index
应该要这样子访问
在后面加个参数page=1
对应的应该是这条语句
直接执行跨站语句,成功
从功能点,网站有联系,明显就是互动的地方,就存在数据的接收和数据显示的操作,这是符合跨站漏洞产生原理的
我们打开它的网站地址,找到他对应的文件,他的访问地址是contact和我们刚才搜索找到contact.php的文件名是一样的,再像我们刚才一样看代码
文件包含搜索关键字,因为我们从网站上看不到有类似文件包含的功能点
包含文件里面存在变量action,action又从变量file来,同样的这个地方使用转义来过滤,但是这个没有作用,因为他只是过滤一些注入的,像正常传输文件名是没有任何操作的
这个就是典型的限制后缀,他会自动加上.php干扰你
我们可以采取下面两种方式进行绕过
%00截断: 条件: magic_quotes_gpc = off php版本<5.3.4
filename=…/…/…/www.txt%00
长度截断:条件:windows,点号需要长于256;linux 长于4096
能绕过是漏洞,不能绕过也是漏洞,只是他的版本不符合,假如他上面没有.php,那就是典型的无限制文件包含漏洞
远程包含取决于php环境自身设置有没有开allow_include开关,如果是远程包含漏洞,那危害就比较大了
earmusic-无框架-文件下载-搜索或应用功能-down等
#通过应用分析或搜索判断可能存在文件下载操作
抓包分析下载地址找到对应代码块,文件下载地址由$file控制
$file从数据库查询语句得知,追踪那里可更新或更改此类数据尝试修改发现过滤,追踪过滤机制分析绕过,采用全路径地址绕过
这个站点类似访问QQ音乐官网的程序,他是注册账号之后,可以上传音乐作品
由于他主要是用来分享音乐,他这个上面肯定有相关文件的东西的,他是进行文件操作,有文件下载、文件删除,文件上传的安全问题
注册登录进去,看一下这个地方有那些功能,这个地方可以测试有没有文件上传漏洞
文件下载,通过看网站功能,就能分析到存在那些漏洞
我们拿到程序之后,你自己要去猜测程序存在那些漏洞,是根据程序自身源码,他的应用方向决定的,他的网站偏向社交,有数据的交互,就会产生注入、跨站多一点,像这个音乐的分享、播放,就是操作文件的,这里肯定是有文件上传、下载,这套程序比较偏向于找文件漏洞
通过搜索相关关键字,来搜索文件下载的函数,来找到对应的代码
根据网站给到的功能,我可以根据文件下载功能,把对应的数据包抓到,来找到对应的下载文件的参数和地址来分析到对应代码
我们要先确定下载地址链接,然后去寻找代码
这个就是典型的id值接收过来给到变量id
intval
SafeRequest自定义函数,操作类的东西,获取当前的魔术引号是否开启,定义数据接收方式
这个就是进行文件下载的数据包
只是判定音乐作品是否要付费
如果不需要付费,就设置cookie
用参数进行下载,下载的文件是变量file
in_audio对应文件的下载地址,这个值等于什么,就下载什么
in_audio是id值执行完的结果,这个值是写到数据库里面的,无法通过传参控制这个值
后台的文件需要后台登录才能操作,漏洞即使发现,也没有太大的意义
我们现在是看那个地方可以操作in_audio值,in_audio赋值给变量audio
在网站这边音频地址写1
抓包,我们可以看到文件名ajax.php,audio为1
我们找到ajax.php,发现audio的值给到变量audio,变量audio接收到值就是1
等于1之后,就赋值给in_audio
下面这边开始插入数据库
就会对应修改这个地方
比如我们下载1.php,把值给保存一下
然后看一下
刷新点击下载
如果要进行跨越下载,就…/1.php,但是我们发现这边有过滤
因为checkrename、unescape是过滤函数,unescape是过滤正则表达式
checkrename是./触发拦截机制,我们可以…\绕一下
把id值传输进去,因为你添加音乐地址的时候,数据就写到数据库里面去了,所以你通过id值取出音乐地址里面别人设置好的音频地址来进行下载
功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
zzzcms-无框架-文件删除RCE-搜索或应用-unlink、eval
文件删除搜索关键宇unlink,对应函数del_file,查看调用此的地方
后台delfile函数调用,如何处罚delfile函数,受参数控制,进行测试
代码执行搜索关键字eval,对应配置模版解析文件,查看调用此地方判断后台可修改模版文件,前台触发模版文件,构造payload进行测试
文件删除漏洞不是很常见,一般我们在黑盒测试很难探针到,因为他需要有特定的访问地址,特定的参数去触发文件类的删除,需要代码去辅助你,你才知道怎么去传参,但是黑盒里面,我们无法知道,没办法测试,得不到效果,所以一般文件删除漏洞,产生在白盒测试里面
利用这个漏洞主要是删除文件的一个安装文件叫install.lock,文件删除漏洞触发条件,我们要去触发删除文件的功能,这个参数怎么传递,才能删除文件,我们需要满足特定文件地址,特定参数值对应上才行,所以一般是代码原因
我们判定程序是否安装,就是判定install.lock文件是否存在,如果这个文件没有,程序就知道你是初次安装,可以访问对应的安装目录,他会提示你已经安装
重新安装的含意是把网站的自身程序重新自定义
查一下unlink函数,php里面文件删除的函数
我们打开程序看一下
这边unlink有删除文件操作,del_file函数要被调用
我们通过全局搜索发现del_file函数调用情况,我们优先是不看后台的,因为后台要登录操作,即使发现也不是很大的高危漏洞
is_write函数调用过,我们继续搜索
明显这里没有被调用过,他只是申明,这个可以忽略不计
我们搜handle_upload函数
被调用过的地方又是upload函数
我们就要搜upload函数又在那里被调用过,这个就很多了,我们先不看这个
他们是相辅相成的包含,他包含这个文件,这个文件又包含另一个文件
save.php调用del_file函数
我们全局跟踪delfile()函数,如果act的值等于delfile,就调用delfile函数,这个函数被调用del_file也会被调用,所以我们要想办法让act等于defile,可以跟踪一下act从那里来
我们先看一下getform函数,就是指向接收的方式
act就是等于get接收的值,我们定位safe_word()函数,就是保留东西不能带特殊符号
现在大概清楚了,我们访问文件,让act的值等于delfile,就会调用delfile函数,delfile函数就会删除文件,在删除文件执行的时候,需要满足if语句
我们定位一下arr_search(),他就是判定file_path,safe_path数组里面的值
safe_path在上面已经申明了
我们追踪file_path函数
file通过post传递一个path值,在通过file_path获取路径,获取路径之后,和safe_path进行对比,如果重复,就返回true,执行下面代码,就是说我们传递file_path值要带’uplpad’、‘template’、‘runtime’、‘backup’,因为你一旦带这几个值,就执行下面代码,如果没带就直接跳出循环
我们访问对应地址文件,传递参数
这里实验了漏洞,发现管理员权限登录后台,才可以删除文件,这个漏洞很鸡肋
文件删除的作用是一旦删除install.loc文件之后,你访问安装目录,会重新安装,这个漏洞相当于会造成系统重装的漏洞
搜索eval关键字,看有没有eval关键字形成代码执行漏洞,前面几个都是带关键字不是函数使用
这边包含$ifstr,一个个的追踪下去
preg_match_all
$pattern匹配规则,zcontent匹配对象,把zcontent按照pattern规则匹配,匹配出的结果给matches
谁控制了zcontent,就控制了matches,控制了matches,就控制了ifstr,相当于谁引用了parserIfLabel函数,zcontent就是控制的地方
这边写了public,说明这可能是一个对象的写法,就不是单纯的函数
查一下,谁调用ParserTemplate对象
ParserTemplate对象创建zcontent
zcontent来自user_tpl
修改模版文件会修改指定文件,漏洞存在模版文件,修改文件,把后门写进去
相当于修改about.html文件
后台模版文件修改之后,前端的html文件也会被修改,而代码执行是产生在模版里面
index.php首页文件就是zzz_client.php文件
而这个文件调用过ParserTemplate对象,那就是说前端和后端都能修改这个模版
我们通过后台修改代码,因为前端不能修改代码,让iffile去包含变量,达到规则,前端去访问,去解析它
他是一种程序上的设计,设计里面又不得不进行的操作,所导致的安全问题,他要让html代码执行出php的效果
http://192.168.0.102:91/?r=../../index.txt%00
http://192.168.0.102:94/admin/save.php?act=delfile
path=/upload/../install/install.lock