MENU

未知函数记载

sprint PHP格式化输出。

simplexml_load_string 将XML格式转为对象。

strcasecmp() 比较两个字符串,不区分大小写

对优客365CMS的一次审计

先看一下目录结构

Data --- 应该为缓存之类的

Install--- 安装目录

Member--- 用户目录

Module--- 模型

Public--- 公用

Source--- 未看

System--- 后台

Themes--- 主题

Config.php 配置

Dir.sql 安装时所需的数据库文件

Index.php 入口文件

Test.php

TEST.php

不知道这个test.php到底是干什么的,然后我打开它执行一下它里面的语句,是把导航查询出来然后以数组的形式进行输出,感觉没什么用,先放着
1357686-20180321194410830-1544375359.png

Config.php主要对数据库进行了配置

然后看一下index.php

把其中必要重要的东西记录一下:

define('ROOT_PATH', str_replace('\', '/', dirname(__FILE__)).'/');

定义常量,根目录,文件目录部分的\替换为/

define('CORE_PATH', ROOT_PATH.'source/'); source目录

define('MOD_PATH', ROOT_PATH.'module/'); module目录

任意文件包含

在index.php中有这么一段

$module = $_GET['mod'] ? $_GET['mod'] : $_POST['mod'];

然后在浏览器中可以看到例如用户注册 URL为 http://localhost/member/?mod=register

Mod=模型名,这样就很容易理解他的逻辑了

然后我跟随逻辑一个一个进行查看。

如果我在 module目录新建一个phpinfo()的文件,名字为phpinfo呢

1357686-20180321194904885-1124515241.png

可以看到phpinfo出来了,他并没有判断里面的内容和用户,而是存在就在后面添加.php执行,那麽我把内容改为一话呢?但是怎么让他存在这个文件就是个令人深思的问题喽。

1357686-20180321194932098-913169700.png

然后我直接在URL修改模块名字,一个一个分析。

Api.php中看到了intval ,这个函数是把用户的输入转换为整数,一般来说这种就不存在注入问题了。

很多表单限制字数 maxlength="20"修改即可

Login.php

1357686-20180321194956978-86687604.png

表单提交用户名密码trim消除空格无视导致用户登陆处SQL注入一枚

1357686-20180321195022960-587030461.png

既然用户登陆处存在SQL注入,那麽来看一下管理员代码处

1357686-20180321195045043-1614137072.png

使用到了htmLspecialchars函数过滤了提交的用户名密码,但是大家知道这个函数他是过滤XSS的,那麽对SQL注入有关系吗?SQL注入一枚
1357686-20180321195116823-1321310136.png

同样的在用户注册也用了trim,但是后端限制了字数

后台添加用户用的和前台一样的方法,SQL一枚

1357686-20180321195151378-1796047078.png

添加广告

1357686-20180321195217797-1442990873.png

Keywords 把Post的 过滤 。如果没有POST的就使用 GET过来的,但是GET过来的没有过滤

1357686-20180321195245139-1093406122.png

不得不说到处都是SQL注入。。。

后台GETshell

1357686-20180321195336794-1474387546.png

这里倒是加上过滤了,可是好像驴头不对马嘴

1357686-20180321195401960-18866544.png

直接将修改的内容写入配置,我在修改配置时

1357686-20180321195423205-1524549892.png

页面版权加入一句话木马,然后GETSHELL。

1357686-20180321195446115-613012126.png

这套源码确实挺适合我们小白学习审计的,应该还有很多洞没有看,实践出真知。

欢迎关注我的博客,渗透吧:http://tieba.baidu.com/f?kw=%E6%B8%97%E9%80%8F&fr=index&red_tag=m3333245982

SVN源码泄露

SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。”(可以利用.svn/entries文件,获取到服务器源码、svn服务器账号密码等信息)

更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。

利用
1、漏洞利用工具: Seay SVN漏洞利用工具

2、添加网站url

在被利用的网址后面加 /.svn/entries,列出网站目录,甚至下载整站。

修复
1、在web服务器配置文件中增加一段代码,过滤到.svn文件,返回404

nginx服务器:

location ~ ^(.*)/.svn/

{

return 404;

}

重启nginx

Apache服务器:

Order allow,deny

Deny from all

重启Apache

2、查找服务器上所有.svn隐藏文件夹,删除

以下命令删除当前目录下.svn文件夹

find . -type d -name ".svn"|xargs rm -rf

rm -rf find . -type d -name .svn

find . -name ".svn" -type d | xargs rm -fr

find . -name ".svn" -type d | xargs -n1 rm -R

使用脚本删除

!/bin/sh

cd /home/web/

find ./ -name ".svn" |xargs -n1 echo > /dev/null 2>&1

find ./ -name ".svn" -print0 | xargs -0 rm -fr

if [ $? -ne 0 ]; then

echo "remove .svn dirs failed!"

fi

以上文件保存为.sh

执行之后,会删除 /home/web目录及其子目录中 所有 .svn 隐藏文件夹

防御
开发人员在使用SVN时,严格使用导出功能。禁止直接复制代码。

另外加一波tony写的脚本:

https://github.com/admintony/svnExploit

jquery放大镜

$('#showImgBox').mousemove(function(event){
            var $X = event.clientX;//获取鼠标与浏览器X轴的坐标
            var $Y = event.clientY;//获取鼠标与浏览器Y轴的坐标
            var $T = $('.PImgBox').offset().top;//获取#con_box距离顶部的距离
            var $L = $('.PImgBox').offset().left;//获取#con_box距离左面的距离
            var $W = $('#showImgBox b').width()/2;//获取move_div的宽度一半
            var $H = $('#showImgBox b').height()/2;//获取move_div的高度一半
            var $w = $('#showImgBox').width();//获取small的宽度
            var $h = $('#showImgBox').height();//获取small的高度
            $('#showImgBox b').css({'left':$X-$L-$W,'top':$Y-$T-$H});   //$X-$L-$W为move_div移动的宽度 $Y-$T-$H为move_div移动的高度
            if($X-$L-$W<0){
                $('#showImgBox b').css({'left':0});
            }
            if($X+$W>$w+$L){
                $('#showImgBox b').css({'left':($w-$W*2)});
            }
            if($Y-$H<0+$T){
                $('#showImgBox b').css({'top':0});
            }
            if($Y+$H>$h+$T){
                $('#showImgBox b').css({'top':($h-$H*2)});
            }
            var $bW = $('#showDetails').width();
            var $bH = $('#showDetails').height();
            var _w =  $w-$W*2;//move_div移动最大宽度
            var _h =  $h-$H*2;//move_div移动最大高度
            var _bw = ($X-$L-$W)/_w;//获取滑动宽度的比例
            var _bh = ($Y-$T-$H)/_h;//获取滑动高度的比例
            $('#showDetails img').css({'left':-($('#showDetails img').width() - $bW)*_bw,'top':-($('#showDetails img').height() - $bH)*_bh})
    });