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

考虑模型类中的create函数

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

可能出现的问题:

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

二、Action参数绑定

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

Read more

I函数的执行流程

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

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

Read more

这段时间在看ThinkPHP代码,然后以3.1.3版本的源码为基础试着去理解ThinkPHPMVC模型。下面是对变量输入以及对应的安全性问题的一些简单分析。

一、常见的变量获取方法
  • $_GET$_POST$_COOKIE
  • 系统Action类提供的_get_post_cookie等方法获取数据
  • 3.1.3版本以后可使用I方法
  • 模型类中的create方法
  • 通过控制器函数以形参的形式获取
二、第一类

这种方式除了低版本PHP开启了GPC之外,是不受任何保护的。即使开启了GPC,对$_SERVER$_FILES此类超全局变量是不起作用的。

三、[……]

Read more

 

很早就发现XSS平台有一个keepsession的功能,今天把源码看了看,发现其实就是XSS平台每隔一段时间带着获取到的cookie去访问一下远程服务器。这种黑科技居然这么简单,发现网上并没有说为什么这样就可以keepsession,然后就找资料看了看~~~

一、PHP中的SESSION机制

有两种方式用来传送会话ID

  • COOKIE
  • URL参数

如何设置URL参数传递会话ID

  • 1、设置php.ini中的session.use_trans_sid = 1开启自动跨页传递session_id
  • 2、表单隐藏、数据库存取、文件存取等形式手[……]

Read more

一个利用ThinkPHP 3.1.2二次开发的CMS

问题代码如下:

上面的参数id是直接从ACTION_NAME获取的$id = ACTION_NAME;,下面继续看details()函数的定义:

数据没有经过过滤直接使用了$md = $this->db->getById($id);,但是我在本地测试的时候发现$id是经过了过滤的,应该是在过滤时候判断出现了问题,然后挨着定位到了DbMysql.class.php文件的escapeStrin[......]

Read more

 

之前拿到某站的Webshell之后,在提权的时候发现网站不能反弹shell。而且,在渗透的时候经常遇到那种不能反弹shell的,你的提权工具拿上去之后因为没有交互式的环境,也不知道提权是否成功。因此,写了一个简单的工具。

proce_open()

代码很简单,不懂的可以看看PHP手册,popen()在这里也可以实现相同的效果

另外,有了这个代码之后,我们以后提权是不是就可以直接把提权工具扔到服务器上面,然后PHP代码改一改,循环测试哪些提权工具是可用的了

popen()

这是土司之前一个人发[……]

Read more

一、简介

同源策略:所谓的同源指的是,同域名、同协议、同端口。如果请求方的源与被请求方的源不一致,那么资源请求就会收到限制。但是<img>、<iframe>、<script>等资源不受同源策略的限制。

二、postMessage跨域

2.1 介绍

window.postMessage()方法可以安全的进行跨域通信。通常情况下,不同页面上的脚本,当且仅当这些页面URL的协议、端口、域名相同的时候才可以进行相互访问。 而 window.postMessage()方法则提供了一种可控机制以便在需要的情况下安全的绕过这些限制。

window.pos[......]

Read more

DotClear文件上传漏洞

影响版本:<=2.11.2
官网链接:http://dotclear.org

漏洞分析

文件上传出现在/admin/media.php第250行

然后,我们跟踪到第265行

/inc/core/class.dc.media.php中定义了函数uploadFile

最后调用了/inc/libs/clearbricks/filemanager[......]

Read more

 

经常看到一些XSS+CSRF上传的漏洞,这次就学习了一下HTML5的一些新特性,用JavaScript实现了文件上传。攻击者可以向管理员发送一个钓鱼页面,管理员只要打开了这个页面,并且当前浏览器保存了后台的会话信息,那么就有可能实现getshell

一、测试环境

1.1 软件环境
  • Chrome浏览器
  • DVWA-1.9漏洞测试平台
  • wamp3.0集成环境
1.2 host文件与虚拟目录配置
  • 修改host文件,添加dvwa.mehey.me指向本机
  • 设置dvwa.me虚拟主机指向WEB_ROOT/dvwa
  • 设置hey.m[......]

Read more

前段时间,cloadeye炒的沸沸扬扬,听说邀请码还挺贵的。算求了,花了一天时间自己DIY了一个简洁版,经过测试还是能用的。下面是具体的操作方法:

一、准备工作

  • 一个二级域名
  • 一个VPS

二、HTTP带外数据记录

默认情况下,Apache的日志是不入库的。需要修改httpd.conf,在LogFormat位置的地方添加如下代码:

  • 设置日志格式以及处理方式

1472203712768

  • 设计数据库

1472203815519

  • 重启服务服务器之后,即可在数据库之中查看到访问日志

1472204002058

三、DNS带外数据记录

[……]

Read more

好吧,我承认以前遇到CSRF Token这种情况是真的很少,主要存在于CSRF Token存在于302重定向之后的页面。下面是DVWA最新版的登陆代码:

 

 

在上面的代码中,,系统在每次登陆的时候都会验证CSRF Token是否与SESSION中的Token值一致,如果不一致则重定向到login.php;如果用户名密码不一致,也会重定向到login.php重要的是,login.php会重新刷新CSRF Token

获取CSRF Token进行爆破

1471095560186

 

1[……]

Read more

The shortest webshell of PHP

某天闲逛wooyun,发现一篇挺有意思的文章————《32C3 CTF 两个Web题目的Writeup》。其中提到了两个比较有意思的东西:

  • The shortest webshell of PHP
  • PHP执行运算符反引号

上面提及的文章,我读前几遍的时候是很费解的!后来,土司的P牛给我一些指点,豁然开朗

Google “the shortest webshell”

google得到的结果之一如上所示,一共15个字符。这里比较有意思的是[……]

Read more

一、IPC$登录以及文件的上传与下载

  • 尝试IPC连接: net use \\10.33.7.75\ipc$ “12345@12345qw” /user:Administrator

    出现了如下的错误,很有可能没有开启IPC共享
    net use \\ACC-SRV\ipc$ “bk@12345” /user:backup
    System error 1312 has occurred.

    A specified logon session does not exist. It may already have been terminated

  • 已知一个域为tiv且已知一个域管[……]

Read more

 

前两天朋友扔给我一个XSS让我瞅瞅,当时的我也是懵逼的。当时也就想搞好玩,所以有了下面的分析。

1、添加script代码

XSS这种漏洞,还是找输入输出的地方。最后,我在留言的地方发现可以输入,而且用户自己可以查看内容。一般来讲,用户自己看到的内容和收件人看到的内容是一样的。

随便写了点东西,发现内容输出的位置在标签之间,标签之间的话还是比较好办的。而且,可以添加标签,也就是说,< >的符号没有被过滤。因此我测试如下的payload

 

结果发现,关键字script中间多[……]

Read more

一、MySQL

  • 读文件

    常见的读文件,可以用16进制代替字符串

  • 写文件

    我暂时已知l两种写文件的方式

 

二、 SQL Server

  • 读文件

    1. BULK INSERT

     

    2. CLR集成

    [crayon-58db4254a7c5[……]

Read more

一、原文部分翻译

搞web安全的都知道,黑客通常利用/proc/self/environ/var/log/apache2/error.logLFI漏洞getshell,但是极少数人知道利用临时文件名getshell这种方法。

它比其它方法技巧性更强,因为它只需要一个LFI漏洞。相反,其它可能需要访问proc或者/var/log或者需要一个可控的$_SESSION变量。此漏洞于2011年被研究人员发现,这篇文章是对这些技术的一个改进。

RFC-1867中提到,文件上传的时候临时文件默认会存储在服务器默认的一个临时目录中,如果最后文件没有被移动或者没有被重命名,该临时文件[……]

Read more

 

SQLServer注入技巧

一、对于SA权限的用户执行命令,如何获取更快捷的获取结果?

  • 有显示位
  • 无显示位

其实这里的关键并不是有无显示位。exec master..xp_cmdshell 'systeminfo'生成的数据写进一张表的时候,会产生很多行。而我们要做的就是如何很多行通过显示位、或者报错语句一次性爆出来,这里的关键就是多行合一。

方法①


解析:

  • 这里6-9句的意思是申明一个@result的临时变量;
  • 设置初始值为’~’[……]

Read more

一、基本概念

域名系统:

域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

根域名服务器:

全球一共有13台逻辑根域名服务器共300多台真实服务器分布于全球各地,用于存储每个顶级域的域名解析服务器的信息。

顶级域名服务器

用于存储每个二级域的域名解析服务器的信息。

次级域名服务器

用于存储二级域名的DNS记录

权威域名服务器

DNS中存[……]

Read more

一、 简单原理

说到断点续传,就不得不说一些和断点续传相关的HTTP头部字段。

① Content-Length

Content-Length用于指示HTTP响应包中实体的大小。除非使用了分块编码,否则Content-Length首部就是带有实体主体的报文必须使用的。使用Content-Length首部是为了能够检测出服务器崩溃而导致的报文截尾,并对共享持久连接的多个报文进行正确分段。

  • 检测结尾
  1.  HTTP的早期版本采用关闭连接的办法来划定报文的结束。但是,没有Content-Length的话,客户端无法区分到底是报文结束时正常的关闭连接还是报文传输中由于服务器崩[……]

Read more

1. 写在前面

1.1 序

这两天, 遇到某个站点,用的是一个名为piccms的php内容管理系统。几经搜索,发现并没有这个小众cms的漏洞相关信息。去找了一份源码,因此有了这篇文章。

1.2 审计之初

说到审计,我只能算个新手中的新手。关于审计,我有自己的一些小看法。在审计的时候,有很多人喜欢把源码直接扔到审计工具里面去,工具会根据规则找到可能出现问题的地方。然后,将危险的点一个一个去回溯。这看起来很速度很快,实则是有问题的。

  • 逆向思维远比正向思维来得慢
  • 了解系统的MVC结构方知数据流向
  • 逆向审计可能第二天就忘记了这个系统的用途

我觉得,在拿到一份源码系统[……]

Read more

1. 写在前面

最近经常会遇到一些比较有意思的漏洞,比如PHP反序列化漏洞,PHP对象注入。这些漏洞可能在平时很难遇到,但是在CTF以及一些CMS倒是经常看到他们的背影。今天刚刚好手上看到了某CTF的代码,但是并没有获取所有源码,因此修改了部分代码进行分析。

2. 自动加载

2.0 为什么要自动加载?

在面向对象编程中,程序员经常会编写好类然后在一个入口文件中将它们包含进来。如果一个项目非常大,可能存在成百上千个类文件,如果一一包含进去,那么入口文件就会显得特别大并且不利于维护。因此,PHP5提供了一种自动加载机制。

2.1 __autoload

  • index.php

[……]

Read more

写在前面

第一次审计不是SQL注入漏洞的代码,感觉还不怎么习惯。总之还是自己知识面太窄了~~~

1. 初步分析

1.1 源码下载

提示有源码下载sgbmwww.rar,先打包回来。

1.2 功能简述

前台功能比较简单,就一个留言处+上传。提示是”寻找后台之旅”,一开始我以为就是XSS打管理员后台什么的,方向什么的完全错了。下面简单分析分析。

2. 具体分析

2.1 留言处

 

  • 第五行有一个文件包含,需要%00截断就可以读取任意文件。不过NULL字符被全局转移
  • name与message[……]

Read more

写在前面

经某牛提醒通关,因此写下这篇文章权当学习记录。

1. 程序入口

任意文件读取漏洞:read.php?file=/read.php

这里可以使用file=/read.php的方式绕过is_file()的检测

2. 获取验证码

2.1 注入还是技巧?

这里暂时不用考虑注入的问题,全局过滤之后这里几乎不可能实现注入。这里的查询语句为:select qq from qq where qq like ‘$search’,我们可控的变量为$sear[……]

Read more

写在前面

本人比较菜,以前多多少少也遇到过一些Linux的系统。要不权限很高,要么内核版本很高,根本不给我学习的机会。因此写下这篇文章,只当记录自己的学习过程。如有不妥之处请指出!

1. 目标环境

  1.  Linux服务器受到防火墙限制,外网只能通过80端口访问内部
  2. 内网疑似只能返回HTTP的流量,无法采用反向代理的形式。这样看来,有点像DMZ主机+防火墙限制
  3. Linux内核版本为2.6.18-194
  4. 服务器有webshell一枚,权限较低,但是可以对web目录进行操作

2. 内网穿透

2.1 为什么需要内网穿透

  • 一般而言,Linux提权需要获取一个[……]

Read more

写在前面

尝试这次代码审计的时候,忘记看tips。结果也可想而知,我只走到了第二步。后来查阅相关tips,成功getshell。收获颇多,因此写下这篇writeup。

1. 线索

  • tips 1: 白猫三兄弟通过不懈努力,白猫甲找到gebai;白猫乙找到san;白猫丙找到mao;于是他们打算组合一下去zip大叔哪儿寻找谜底
  • tips 2:二次注入写 shell;
  • tips 3:降低难度,重新下载压缩包。利用 __autoload 特性;

2. 二次注入获取数据

根据tips 1从站点下载得到压缩文件包,sangebaimao.zip。

2.1 register[……]

Read more

1. 源码

2. 分析

2.1 引号问题

  • sanitize()对引号进行了过滤,导致无法引入引号
  • 输入点为字符型,如果不能闭合单引号则无法注入
  •  一般来说,程序如果无法引入单引号!那么产生单引号的地方就大致有如下几个地方
    • 1. 二次注入引入单引号
    • 2. 字符串截断
    • 3.反斜线转义
  •  这里引入单引号用的是反引号转义,但是注意一点问题:截断以及转义引入单引号一般至少两个可控字段,前面一个字段用于引入单引号,后面一个字段用于引入注入语句。

2.2 payload[……]

Read more

 

这个是EasyCMS不是CmsEasy,它是用ThinkPHP开发来的,现在基本上是处于不维护的状态了,研究它主要是学习ThinkPHP框架的开发以及安全问题。

一、配置文件分析

  • 1、独立分组
    APP_GROUP_LIST’ => ‘Index,Admin,Install,Member’,//开启分组模式
    DEFAULT_GROUP’ => ‘Index’,//默认分组
    APP_GROUP_MODE’ => 1,//开启独立分组
    APP_GROUP_PATH’ => ‘Modules’,//独立分组文件夹名称
  • 2、U[……]

Read more

UDF其实就是User-Defined Function,而通过UDF执行命令其实就是在自定义函数里面调用C语言的system()函数从而执行命令。sqlmap里面提供了一些动态链接库,不过我在使用的时候遇到了一些问题。。

一、Invalid ELF header

ERROR 1126 (HY000): Can’t open shared library ‘udf.so’ (errno: 11 /usr/lib/mysql/plugin/udf.so: invalid ELF header)

问题的原因查阅之后应该是和平台有关系,然后找到了lib_mysqludf_sys源码编译。[……]

Read more

一、Redis未授权访问漏洞

1.1 空口令

Redis安装之后,默认就是空口令。使用Redis-cli -h <IP>登录即可,并且Redis没有限制登录失败的次数,也就是说完全可以通过爆破获取账号密码。

1.2 利用ssh直接登录

这种情况的话,也就是在另外一台终端生成一对RSA公私钥。要求如下:

  • Redis是以root用户运行的,这样才有权限对/root/.ssh目录进行操作
  • 目标服务器支持免密登录
  • 攻击的主机能够访问到目标服务器

1.3 利用crontab反弹shell

  • Redis是以root用户运行的,修改定时执行的配置文[……]

Read more

 

在其它的面向对象的编程语言中,例如世界上最好的语言PHPthis表示的是当前对象。而在JavaScript中,不同的使用场景有着不同的含义。

一、作为对象方法调用

此时this被绑定到该对象

二、作为函数调用

此时this被绑定到window对象

三、作为构造函数调用

此时this被绑定到该对象

四、使用apply()call()调用

此时this被绑定[……]

Read more