快捷搜索:  汽车  科技

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)再往下看判断文件是否存在,再执行删除操作先过第一个if,post发送一个值让它不为空,再往下程序又接收一个logo的变量并且也是可控的admin/controls/flink.class.php代码中中存在危险函数参数可控的函数function update(){ $flink = D('flink'); if(isset($_POST['logoc'])){ $logo = $flink->downlogo($_POST['logoc']); $srclogo = PROJECT_PATH."public/uploads/logos/".$_POST["logo"]; if(file_exists($srclogo)) unlink($srclogo); }else{ $logo = $

搜索公众号:暗网黑客可领全套网络安全课程、配套攻防靶场

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(1)

学习了一波某师傅的代码审计,以后开始写一些PHP代码审计的文章

一些常见的危险函数如:eval、assert 、file_put_contents、move_uploaded_file、unlink等等许多的函数

YIXUNCMS2.0采用mvc框架,快速通读了cms大致的目录如下,开始危险函数的查找

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(2)

这是在rips代码审计工具中扫描到的结果,能够自动化地挖掘 PHP 源代码潜在的安全漏洞

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(3)

一.任意文件删除

admin/controls/flink.class.php

代码中中存在危险函数参数可控的函数

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(4)

function update(){ $flink = D('flink'); if(isset($_POST['logoc'])){ $logo = $flink->downlogo($_POST['logoc']); $srclogo = PROJECT_PATH."public/uploads/logos/".$_POST["logo"]; if(file_exists($srclogo)) unlink($srclogo); }else{ $logo = $_POST["logo"]; } if($logo){ $_POST["logo"] = $logo; if($flink->update($_POST 1 1)){ $this->redirect("index"); }else{ $mess = $flink->getMsg(); if($mess == "") $mess = "您未做任何修改"; $this->mess($mess false); $this->assign("post" $_POST); } }else{ $this->mess("LOGO下载失败,请检查URL地址是否正确" false); $this->assign("post" $_POST); } $this->display("mod"); }

在update这个函数中存在操作文件的一个过程,并且unlink函数的参数是我们可控的

先过第一个if,post发送一个值让它不为空,再往下程序又接收一个logo的变量并且也是可控的

再往下看判断文件是否存在,再执行删除操作

审计了上面的内容,我们就可以开始构造poc来验证了,由于是MVC框架访问的方式也是不一样的

public/uploads/logos我们用三个../目录穿越回到cms的根目录删除文件

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(5)

下断点,在debug中就可以观察到poc验证时的状态,最终拼接出来的文件路径就可以达到任意文件删除效果

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(6)

只要我们删除install_lock.txt文件就可以重新安装该cms系统

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(7)

二.任意内容写入

models/flink.class.php

file_put_contents危险函数搜索,先分析在被调用的地方是否有可控的参数

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(8)

class Flink{ function downlogo($logourl){ $url = parse_url($logourl); $logoname = str_replace("." "_" $url['host']).".".array_pop(explode("." basename($logourl))); $path = PROJECT_PATH."public/uploads/logos/"; if(!file_exists($path)){ mkdir($path); } $location = $path.$logoname; $data = file_get_contents($logourl); if(strlen($data) > 0){ file_put_contents($location $data); return $logoname; }else{ return false; } } }

str_replace会把接收到的host的点替换为下划线,后面的array_pop是提取后缀名的操作并且没有过滤,我们传参时直接传递一个php后缀的文件即可,最后会拼接成host.php

由于在MVC框架中models是不能被直接访问的,我们必须在controls找调用downlogo的地方

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(9)

在controls/flink.class.php文件中insert方法调用了downlogo,传递给downlogo的参数是可控的,我们直接调用这个方法传递一个数据给downlogo函数写入

审计完内容后我们来构造poc来验证一下

file_put_contents函数是读取内容写入到文件的一个函数,我们把需要写入的内容放在另外一个文件中,然后传递给file_put_contents函数读取

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(10)

这里我们随意在可访问的文件中写一个phpinfo的内容写入即可

在debug中的状态,传递给file_put_contents的$data已经变成了我们写入的内容

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(11)

我们再去查看YIXUNCMS2.0\public\uploads\logos目录下存在一个文件,就是我们刚刚写入的

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(12)

直接访问即可

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(13)

文末有视频领取方式

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(14)

三.

任意内容写入

classes/baseset.class.php

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(15)

static function writeindex($style $start){ $file=PROJECT_PATH."index.php"; $content=file_get_contents($file); $reg[]="/define\(\"TPLSTYLE\". ?;/i"; $reg[]="/define\(\"CSTART\". ?;/i"; $rep[]="define(\"TPLSTYLE\" \"{$style}\");"; $rep[]="define(\"CSTART\" \"{$start}\");"; file_put_contents($file preg_replace($reg $rep $content)); }

writeindex方法在写入内容时有两个参数是通过参数传递过来的,由于MVC框架,这里也是不能直接访问我们找一下在哪调用了这个函数,然后再查看参数是否可控

writeConfig方法中调用了writeindex

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(16)

static function writeConfig($post){ $confile=PROJECT_PATH."config.inc.php"; $configText = file_get_contents($confile); self::writeindex($post['appStyle'] $post['cstart']);

我们继续跟进调用writeConfig的地方

在admin/controls/base.class.php中调用set方法,set方法调用了writeConfig方法

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(17)

function set(){ if(BaseSet::writeConfig($_POST)){ $this->redirect('baseset' 'stats/1/mess/'.base64_encode('设置成功')); }else{ $this->redirect('baseset' 'stats/0/mess/'.base64_encode('设置失败,请检查')); } }

审计了上面的内容,我们来构造poc

writeindex方法是修改index.php中CSTART和TPLSTYLE两个常量的值

define("CSTART" "0"); define("TPLSTYLE" "default");

构造闭合0");<?php phpinfo();?><?php //

闭合第一个值第二值自然就无需传递了为空即可

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(18)

我们去查看index.php的值就已经被成功覆盖了

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(19)

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(20)


谁说不会代码就看不懂代码了?

web安全体系化视频教程,在线免费观看!

渗透视频教程 进群 领工具 靶场

扫描下方二维码即可白嫖

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(21)

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(22)

漏洞扫描基础知识(使用rips工具快速挖掘漏洞)(23)

猜您喜欢: