禅道826后台getshell的小技巧

前两篇关于禅道826分享了两篇getshell的方法,这篇只算是一个小技巧,这个技巧只在Windows系统下有效。

在Windows系统下,PHP中大部分文件操作都是调用WinAPI中的函数FindFirstFile(),这个函数有如下几个特性

  • 1、文件名中的字符>相当于(一个占位符)
  • 2、文件名中的字符<相当于*(N个占位符)
  • 3、文件名中的字符"相当于.(就是正常字符点)
一、文件删除

这部分是题外话,只是刚刚好看到了而已,禅道存在后台文件任意删除的漏洞。

没有什么难度,传[……]

Read more

发表在 代码审计 | 标签为 , | 留下评论

禅道826版本SQL注入,登录绕过

上一篇文章,SQL注入由orderBy($order)函数过滤不严格导致。但是,这个函数对传进的参数进行了一系列过滤,导致getshell的条件比较苛刻。不甘心,于是乎找了一个比较好利用的地方。我只是以这个模块的一个函数为例,其它未提到的地方仍然很有可能存在注入。

一、问题的根源

问题出现在limit($limit)函数,它对传进的参数没有经过任何过滤就直接拼接成SQL语句进行查询。

二、利用点

把这个函数在控制器文件中搜索了一下,->limit($只出现在了module\block\control.php中,。[……]

Read more

发表在 代码审计 | 标签为 , , , | 留下评论

禅道826版本一定条件getshell

之前和一个朋友一直在讨论禅道获取webshell的方法,折腾了一天左右,最后还是在命令执行的地方拿到shell的。说来也是惭愧,这两天又研究了一下,又发现了一个低版本getshell的方法,最新版本是不行的,我测试的版本是8.2.6。最新版本9.1是不行的,其它版本未测试。

一、上传点

这里,我们可以用burpsuite抓包将文件名改为xxxx.php**可以是{\x80-\x99}。这样,我们就可以成功上传一个shell,但是die(json_encode(array('result' => 'success',[......]

Read more

发表在 代码审计 | 标签为 , , | 一条评论

然之、蝉知框架0DAY[二]

这个漏洞比较鸡肋,需要登录不说还需要一定的权限。而且,有一定的限制。。。MDZZ,后来发现这个漏洞很叼,在然之这套系统中这里是不需要权限啥的!

一、引发问题的地方

上面是禅道、然之、蝉知这几套系统的orderBy函数,其中你会发现$order并没有经过PDO:quote()等函数过滤,因此导致此问题

  • 它用逗号分割处理列
  • 然后每列用空格分割,处理每个关键字。针对,当做table.column处理
  • 接着用空格拼接列中的关键字
  • 最后用逗号拼接每个列
二、示例

[crayon-59c490c7[……]

Read more

发表在 代码审计 | 标签为 , , | 留下评论

然之、蝉知框架0DAY导致的GETSHELL、任意文件删除漏洞

漏洞发生在文件编辑的地方,已经在然之、蝉知上面测试成功,蝉知的话应该更有说服力了吧,毕竟可以前台注册。

一、文件上传

由于文件上传的比较死,从改后缀这里暂时没有什么办法。.user.ini以及.htaccess等文件由于重命名、长度限制基本上GG了,而且危险后缀限制在了php,php3,php4,phtml,php5,jsp,py,rb,asp,aspx,ashx,asa,cer,cdx,aspl,shtm,shtml,html,htm,所以直接上传是不行的。

二、文件编辑

它提供了文件编辑的功能,而且上传了新的文件之[……]

Read more

发表在 代码审计 | 标签为 , , | 留下评论

然之、蝉知框架0DAY分析[2017/4/7]

之所认为这是一个框架漏洞,是因为它是在输入层、数据库驱动层出现的问题。然之OA系统在更新数据的时候,不是挨个挨个接收传递的数据的,而是通过fixer类处理数据,将多余的数据删除、处理之后直接进入数据库存储。下面以user/model.php为例进行分析:

一、model

 

  • 判断密码的合法性
  • 对数据进行强制转换、unset相应的数据字段等等
  • 判断权限是否为super,并且根据权限判断是否为非法操作等等
  • 数据库数据更新
二、数据输入层

[crayon-59c490c711bfc[……]

Read more

发表在 代码审计 | 标签为 , , , | 留下评论

大米CMS审计记录[二]

一、写在前面

这是去官网下载的试用版,开发人员应该不会重视试用版的安全问题,其实主要是学习而已。大米CMS_V5.5.2试用版(注:thinkphp3.1内核)[2017-03-17]

二、注册引起的问题

处理流程如下:

  • 从超全局变量获取表单数据
  • 处理数据,强制money = 0
  • 直接调用$User->add($data);存储数据

MemberModel如下:

可以看到,下面只是对一些数据进行了强制判断。并没有针对score字段进行限制。

[crayon-59c490c711e[……]

Read more

发表在 代码审计 | 标签为 , | 留下评论

大米CMS审计记录[一]

一、写在前面

这是去官网下载的试用版,开发人员应该不会重视试用版的安全问题,其实主要是学习而已。大米CMS_V5.5.2试用版(注:thinkphp3.1内核)[2017-03-17]。先浏览了部分Action文件,发现了一些可能存在的问题。

  • php_safe.php里面的StopAttack()函数在使用pathinfo的时候,由于参数绑定,会导致针对$_GET的过滤失效。
  • 第一次过滤的时候,针对数组会使用implode进行拼接,但是拼接顺序会影响代码的
  • 自定义函数remove_xss能否绕过?
  • D方法创建模型的时候,使用create()方法可能会插入一些其它数[……]

Read more

发表在 代码审计 | 标签为 , | 留下评论

ThinkPHP变量输入安全性分析(三)

一、模型建立中的变量输入

考虑模型类中的create函数

  • $_POST$_GET的数据经过ThinkPHP/Lib/Core/App.class.php全局过滤
  • ①获取超全局变量$_POST的数据
  • ②经过模型的自动验证自动完成过滤。

可能出现的问题:

全局过滤不严格的时候,而在建立模型的时候认为系统已经过滤了,开发人员就不会再次验证,导致安全问题。

二、Action参数绑定

这部分可能会存在一些小问题,先做记录,等了解得更清楚了再来修改这里的东西。这里的前提还是VAR_FILTERS失[……]

Read more

发表在 代码审计 | 标签为 , | 留下评论

ThinkPHP变量输入安全性分析(二)

I函数的执行流程

I函数和Action提供几个函数是大同小异的,稍微提一下,然后讲讲

  • $_POST$_GET的数据经过ThinkPHP/Lib/Core/App.class.php全局过滤
  • ①根据请求的方法获取超全局变量
  • ②使用VAR_FILTERS进行全局过滤,不过仍然使用的是array_walk_recursive
  • ③如果是获取全部变量,那么使用array_map回调过滤,无法处理数组类型
  • ④如果是取值操作,使用过滤函数过滤或者使用filter_var进行过滤
  • ⑤都不满足的话,[……]

Read more

发表在 代码审计 | 标签为 , | 留下评论