本文共 9574 字,大约阅读时间需要 31 分钟。
针对新手写一点渗透的小思路、小技巧,主要讲的是思路,所有不会太详细。
经常逛一些好的博客或者门户站,坚持下来,每天学一点思路,你会积累到很多东西,记住:技术需要时间沉淀。
(一)针对网站程序,不考虑服务器。
一、查找注入,注意用户权限和站库是否同服。
二、查找XSS,最近盲打很流行,不管怎样我们的目的是进入后台。
三、查找上传,一些能上传的页面,比如申请友链、会员头像、和一些敏感页面等等,注意查看验证方式是否能绕过,注意结合服务器的解析特性,比如典型的IIS6.0、阿帕奇等。
四、查找编辑器,比较典型的ewebeditor、fckeditor等等。
五、查找phpmyadmin等管理程序,可以尝试弱口令,或者寻找其。
六、百度、谷歌搜索程序公开漏洞。
七、猜解文件,如知道某文件为admin_login.php,我们可尝试admin_add.php、admin_upload.php文件是否存在,也可以谷歌搜索site:exehack.net inurl:edit等等,很多时候可以找到一些敏感文件,接着看是否验证权限或能否绕过验证。
八、会员注册、修改、删除、评论等一切需要操作数据库的地方记得加单引号之类查看是否存在insert、update等类型注入。
九、会员或低权限管理登陆后可抓包分析,尝试修改超级管理员密码,权限提升。
十、通常有下载功能的站我们可以尝试修改下URL文件名,看能否下载站点敏感文件,如数据库配置文件等,数据库不可外连情况下可以尝试数据库密码登陆后台,也可下载上传、登陆验证等文件进行代码审计。
十一、备份文件和后门,某些主站子目录存在分站,比如www.2cto.com/software,我们可以尝试www.2cto.com/software.zip/zip等压缩文件是否存在,可能就是子站的。也有一些站类似这样www.2cto.com/old/,一般都是以前的老站,通常老站会比较容易拿。
还有就是数据库备份、前人的后门等,具体这些目录上的东西就要看你的字典了。
十二、0day漏洞,不管是别人给你的,还是自己挖的,总之好使就行。
十三、。。。
(二)针对服务器
一、通常先扫下服务器开放的端口,再考虑对策。
二、比较常见的解析漏洞,比如IIS6.0、阿帕奇、nginx/IIS7.0(php-fpm)解析漏洞等,还有就是cer、asa之类的解析,.htaccess文件解析配置等。
三、弱口令和everyone权限,先扫描服务器开放的端口,比如21对应的FTP、1433对应的MSSQL、3306对应的MYSQL、3389对应的远程桌面、1521对应的等等,平时可以多搜集下字典,有时候效果也是不错的(通常在cain嗅探的时候,经常能嗅到别人不停的扫…很蛋疼)。
四、溢出,这点要看补丁和服务器使用的软件等等,比如FTP等工具,这里不详解。
五、针对一些服务器管理程序,比如tomcat、jboss等等,这种比较常见于大中型的站点服务器。
六、IIS、apache等各种漏洞,这个要平时多关注。
七、目录浏览,服务器配置不当,可直接浏览目录。
八、共享…
九、。。。
(三)针对人,社工
社工在渗透中通常能起到惊人的效果,主要还是利用人的弱点,博大精深,这里不详细讨论,注意平时多看一些社工文章,学习一些思路、技巧。
(四)迂回战术,旁注和C段
一、旁注,针对旁站,我们可以运用到上面说到的方法,这里不多说。
二、C段,基本想到C段就会想到cain,针对C段的站点和服务器,结合上面说的针对目标站、服务器、人、旁站的思路,一个道理,当然如果你的目的仅仅是黑站的话,不妨试试NetFuke之类。
三、…
(五)提权常用手段一、使用系统溢出提权EXP,这类在提权中最常用,使用的方法大都一致,比如比较常见的巴西烤肉、pr等等,溢出提权通常在上也利用的比较多,注意多收集EXP。
二、第三方软件提权,主要还是利用服务器上安装的第三方软件拥有比较高的权限,或者软件的溢出漏洞,比如典型的、、serv-u等等,还有各种远程控制软件,比如pcanywhere、Radmin这类。
三、劫持提权,说到这个,想必肯定会想到lpk.dll这类工具,有时候在蛋疼怎么都加不上账户的时候,可以试试劫持shift、添加开机启动等等思路。
四、弱口令技巧,我们可以看看有木有什么hack、或者隐藏账户之类的,一般这种用户密码都比较简单,可以尝试下弱口令,还有之前说过的各种数据库、远程控制软件、FTP软件的弱口令,没办法的时候就去扫扫碰碰运气吧。
五、信息收集,注意翻下硬盘各种文档,说不定各种密码就在里面。在内网渗透时,信息收集是非常重要的,记得拿下服务器了GET一下明文密码,德国那个mimikatz不错,还有就是域、ARP。。。貌似扯多跑题了。
六、社工…不多说。
暂时总结到这里,渗透博大精深,不是这么几段字就能说清楚的,具体还是要看具体情形,随机应变。
一定要养成在渗透过程中信息收集的好习惯,特别是针对大中型站点,注意收集子站域名、目录、密码等等敏感信息,这对于我们后面的渗透非常有用,内网经常弱口令,同密码比较多。很多时候,或许一个主站就死在子站的一个小漏洞上。
入侵渗透涉及许多知识和技术,并不是一些人用一两招就可以搞定的。
一,踩点
踩点可以了解目标主机和网络的一些基本的安全信息,主要有;
1,管理员联系信息,电话号,传真号;
2,IP地址范围;
3,DNS服务器;
4,邮件服务器。
相关搜索方法:
1,搜索网页。 site:xxx.com
2,链接搜索
目标网站所在的服务器可能有其他具有弱点的网站,可以进行迂回入侵,而且可 以发现某些隐含的信息。
搜索方法介绍:
通过各种搜索引擎:GOOGLE,
二,查点
A,确定目标的域名和相关的网络信息。
搜索方法;
Whois查询,通过Whois数据库查询可以得到以下的信息:
1,注册机构:显示相关的注册信息和相关的Whois服务器;
2,机构本身:显示与某个特定机构相关的所有信息;
3,域名:显示与某个特定域名相关的所有信息
4,网络:显示与某个特定网络或单个IP地址相关的所有信息;
5,联系点:显示与某位特定人员相关的所有信息
搜索引擎站:
B,利用ARIN数据库可以查询某个域名所对应的网络地址分配信息。
相关搜索地址:
利用进行对IP地址的查询,以搜集
有关的网络信息:
知道了目标所在的网络,可以进行迂回渗透,寻找薄弱点,进入目标网络,然后在 攻击目标。
C,DNS信息查询
域名系统允许把一个DNS命名空间分割成多个区,各个去分别保存一个或多个DNS域 的名字信息。
区复制和区传送:DNS服务器之间是采用区传送的机制来同步和复制区内数据的。
区传送的安全问题不在于所传输的域名信息,而在于其配置是否正确。因为有些域 名信息当中包含了不应该公开的内部主机和服务器的域名信息。
相关工具:
1,Windows下,nslookup,SamSpade;
2, UNIX下:nslookup,dig,host,axfr
在Windows下的使用方法:
c:\>nslookup
Default server: 目标的DNS服务器
Address: 目标的IP地址
>set type=ANY //表示接受任何可能的DNS记录
>ls -d 163.com >zone.163.com.txt //获得目标域的相关记录,结果保存在zon e.163.com.txt
D,通过Traceroute获得网络的拓扑结构以及网络网络设备的地址。
相关工具;
Windows下:Tracert 支持ICMP协议
UNIX下:Traceroute 支持ICMP和DNS协议,由于多数防火墙已经过滤了ICMP,所以 UNIX下的Traceroute是不错的选择,而且使用-p n选项可以自己指定使用的端口。
三,网络扫描
面对不同的网络,应该采用不用的扫描方法:
1,对于内部网络,可用类型很多,ICMP协议是普遍要装上的,在内部网广播ICMP数 据包可以区分WINDOWS和UNIX系统,
发送类型为8的ICMP的ECHO请求,如果可以受到类型为0的ECHO回应,表明对方主机 是存活的。
相关工具介绍:
UNIX下的:fping&gping
WINDOWS下:Pinger 特点:速度快,多线程。
2,对于外部网络,可用类型也很多,涉及到的原理也有很多,例如:TCP扫描,UD P扫描,
其实我是很不愿意用扫描工具的,很容易使对方感觉到入侵事件的发生,不论是防 火墙还是入侵检测系统都会或多或少的留下我们的脚印,如果遇到一个勤快的管理 员的话,那么这次入侵很可能以失败告终。
但使用与否依各个喜好而定了:),有时候我们在测试网络或者主机的安全性时, 就不能忽视他的存在了,首先,安全测试不是入侵,全面的测试对抵御黑客和蠕虫 的攻击是必要的,在这里推荐的端口扫描工具是NMAP,因为他带有躲避IDS检测的机 制,重组了TCP的三次握手机制,慢扫描机制等等都是其他扫描工具无法比拟的,U DP扫描是很不可靠的,原因有下几点:
这种扫描依靠ICMP端口不可达消息,如果发送端给目标一个感兴趣的端口发送了一个 UDP数据包后,没有收到ICMP端口不可打消息,那么我们认为该端口处于打开状态。
不可靠的原因:
1,路由器可能丢弃UDP分组;
2,很多的UDP服务不也不产生响应;
3,防火墙的常规配置是丢弃UDP分组(除DNS外);
4,休眠状态的UDP端口是不会发送一个ICMP端口不可到达消息。
还有的扫描工具就是弱点扫描工具,这些工具综合各种漏洞信息构造漏洞数据库, 去探究存在漏洞没有打补丁的主机,当然也有针对特定漏洞的检测发现工具(脚本小 子能用,网络安全人员也弄用--双刃剑-:)
这里详细介绍对目标操作系统类型的检测原理:
Telnet标识和TCP/IP堆栈指纹:
1,网上许多的系统可以直接Telnet到目标,大多会返回欢迎信息的,返回的信息包 含了该端口所对应的服务软件的版本号,这个对于寻找这个版本的软件的漏洞很重 要,如果对方开了Telnet,那么可以直接得到对方的系统类型和版本号,这个对于 挖掘系统的漏洞很重要(对于溢出来说,不同版本的系统和语言版本的系统来说, RET地址,JMP ESP,地址是不同的)。
2,如今越来越多的管理员懂的了关闭功能标志,甚至提供伪造的欢迎信息。那么T CP/IP堆栈指纹是区分不同系统的好方法。
1,FIN扫描
给打开的端口发送FIN包,RFC 793规定不返回任何响应,例外的系统是: MS Wind ows,BSDI,CISCO,HP/UX,MVS和IRIX都返回一个RESET包。
2,TCP初始序列号(ISN)采样
这种方法利用了在实现TCP连接时使用不同的ISN模式识别系统,可以分成多种模式 :传统的64K增加(旧
UNIX OS),随机增加(新版的Solaris,IRIX,FreeBSD,Digital UNIX和Cray等), 真正随机(Linux 2.0.*,OpenVMS和新版AIX等),Windows系统使用所谓的“时间依 赖性”模型,即ISN的增加同某一个短固定的时间间隔有关系,有些主机始终使用固 定的ISN,例如3COM集线器(使用0x803)和AppleLaserWriter打印机(0xC7001)。
3,不分片位
目前许多系统在他们发送的包中使用IP“不分片”位,这主要是想获得好的运行性 能,不过也不是所有的操作系统都有此功能,即使有,其实现的方式可能也不同。 因此利用次位或许有利于我们收集更多的有关目标OS的信息。
4,TCP初始窗
TCP初始窗只是简单地测试返回包的窗口尺寸。Queso和Nmap可以对实际的窗口进行 窗口跟踪。在很多操作系统中是一个常数。例如:AIX是唯一使用0x3F25的操作系统 。对于完全重新编写代码的NT 5的TCP堆栈,使用0x402E.
5,ACK值
如果发送一个FIN|PSH|URG,许多操作系统设置ACK等于初始序列号,而Windows和某 些打印机将发送seq+1.如果发送一个SYN|FIN|PSH|URG到打开的端口,不同的Windo ws系统的实现将很不一致,有时返回seq,有时返回seq+1,甚至返回完全随机的数值 。
6,ICMP错误消息机制
某些操作系统按照RFC 1812的建议,限制不同错误消息的发送速率。例如:Linux内 核(在net/ipv4/icmp.h中定义)限制目标不可到达消息的产生速率为4秒种内80个 ,如果超过这个限制将有1/4的惩罚。测试方法是发送一大串包到某些随机选取的高 端口,然后计算返回的不可到达包的数目。
7,ICMP消息引用(Message Quoting)
RFC规定:ICMP错误消息将引用一小部分导致错误消息包的ICMP消息内容。对于端口 不可达消息,几乎所有的实现都只发送所需要的IP头+8字节。不过Solaris发送的内 容更多,而Linux发送的东西最多。这就是我们识别没有打开任何端口的Linux和So laris主机。
8,ICMP错误消息回射完整性
主机对端口不可打错误消息将送回一小部分于是消息的内容。某些机器送回的包中 包括的协议头部分已经被改变。例如,AIX和BSDI送回的IP总长度是20字节。而系统 BSDI,FreeBSD,OpenBSD,ULTRIX和VAXen则将原样送回你所发送的IP标识符。某些系 统(AIX和FreeBSD等)将送回不一致或等于0的校验和。这同样适用于UDP校验和。 Nmap对ICMP错误消息包进行九种不同的测试以标识系统之间的微笑差别。
9,TCP选项
是实现TCP/IP协议时可选的一个部分功能,这跟不同的系统实现有关,这些选项都 是挖掘可用信息的好方法。原因是:
1,他们都是可选项,不是所有主机都可以实现的;
2,如果你所发送的包中对某个选项进行了设置,只要目标支持,那么目标主机就返 回此选项;
3,可以在包中设置所有的选项进行测试。
例如:Nmap在每个探测包中设置所有的选项来进行测试:
Windows Scale=10;NOP;Max Segment Size=265;Timestamp;End of Ops;
从返回的的包中查看这些选项,就知道了什么系统支持他们。
还有一种被动操作系统识别方法,就是监控不同系统之间网络包的情况来判断目标 的操作系统类型,siphon被用来进行这方面的测试,这个工作原理如下:
签名:
主要TCP的四个字段判断:
1,TTL:出站的包的存活时间;
2,Window size:窗口大小;
3,DF:是否设置了不准分片位;
4,TOS:是否设置了服务类型。
综合这些信息可以大概判断出目标的系统,但不能%100。
四,查点
利用查点技术可以得到比前面讲的更多更具体的有用信息,例如:帐户信息等。
1,Windows系统查点技术
利用NetBIOS规则,首先介绍NetBIOS,NetBOIS位于TCP/IP之上,定义了多个TCP和U DP端口。
----TCP
(1),139:nbsession:NetBOIS会话。
例如:net use " " /user:" ".
(2),42:WINS:Windows Internet名字系统(UDP端口也是42)。
----UDP
(1)137:nbname:名字查询。
例如:nbtstat -A IP //03中显示的不是计算机名就是用户名
(2)138:nbdatagram:UDP数据报服务
例如:net send /d:domain-name "Hello"
得到用户名利用到了IPC$空会话和sid工具。sid工具由两个小工具组成:user2sid 和sid2user.user2sid获得用户名或组名的sid;sid2user则是输入一个sid而获得相 应用户名的和组名,sid就是在创建用户时而创建的,相当于UNIX系统下的UID,WIN 系统权限的检查就是通过对SID的检查的。一个sid是由一长串数字组成的,其中包 括两个部分,前一部分用来唯一标识一个域,后一部分唯一标识一个用户名,这部 分数字被称作rid,既相对标识符,rid有一定的规律,其取值总是从500开始的,超 级管理员的rid总是500,而GUEST用户的rid总是501;而新建立的帐户的rid从1000 开始。
具体的步骤:
c:\net use " " /user:" "
c:\user2sid guest //得到了SID的前半部分
s-1-5-21-1123561945-1580818891-1957994488-501
s是sid的前缀,后面跟的是1表示版本号,5用于标识发放sid的授权实体,5指NT/2 000。21-1123561945-1580818891-1957994488唯一地标识域和工作组。不同的用户 只是最后的相对标识符不一样。现在用sid2user查询系统的用户名了:
c:\sid2user 5 21 1123561945 1580818891 1957994488 500
name is cookie
domain is condor
c:\sid2user 5 21 1123561945 1580818891 1957994488 1001
SNMP查点:通过默认的管理群字符串PUBLIC读取特性,可以得到系统的一些信息, 具体有:接口表,路由表及ARP表,TCP表和UDP表,设备表和存储表,进程表和软件 表,用户表,共享表。
SNMP工具,snmputil.exe
例如:
1,或者网络接口数目:
c:\snmputil get localhost public .1.3.6.1.2.1.2.1.0
2,显示所有的SNMP变量内容
c:\snmputil walk localhost public .1.3
2UNIX类系统的查点技术
1,$showmount -e //前提2049号端口开着(NFS)
2,$finger @www.target.com //还有rusers
3, $telnet 25
vrfy root //证实是否有root
expn adm
quit
五,具体的分析漏洞
针对特定目标进行了以上分析后,总结出最好的入侵思路,选择入侵工具,做好入 侵的准备工作是必须,有时入侵时间的选择也是很重要的,因为会涉及到正常的公 司网络的正常通信,甚至会使恶意的网络在你入侵测试就发生了,最直接的漏洞利 用方法,我认为是溢出漏洞了,因为他直接就可以得到对方的系统权限,返回一个 和在本地一样的SHELL环境,此时无所不能:
溢出攻击的分类有:
1,WINDOWS下的和UNIN下的
一般原理,就用户提交的参数范围超过了在内存中保存的本地变量的范围,而程序 或者系统并没有对输入的参数进行合理的长度检查,导致了被调用函数的返回地址 被覆盖,如果用一个跳转到我们提交的shellcode的地方的地址代替,那么我们的s hellcode就可以运行,成功得到了目标的系统权限。
此外还有格式化串漏洞,导致这个漏洞的原因是在处理用户数据的参数时没有过滤 用户提交的,格式化符号,例如%n这个将允许输出的参数的个数保存在内存中,恶 意构造此漏洞用户将会向内存的任何位置写SHELLCODE的地址。
2,常见漏洞类型
UNIX下的本地漏洞很多,挖掘起来也较容易,他主要有以下几种类型:
1,环境欺骗
一般指PATH环境变量的欺骗,就是说如果一个特权的程序执行了一个外部的命令, 那么我们可以简单的构造这个外部命令程序,然后修改PATH使这个特权程序能够去 首先执行我们构造的外部命令程序,而这个外部的命令程序是一个去得SHELL的程序 例如:
bash$cat >ps <<EOF
>#!/bin/sh
>EOF
而这个特权程序是:
bash$cat >test.c <<EOF
>int main()
>{
>setuid(0);
>system("ps -ef"); /*程序调用了外部命令,但没有给出这个命令的绝对路径, 这个是PATH欺骗的前提*/
>}
>EOF
编译后的test文件具有s为,属主是root.这样设置是因为程序test执行时会以root 身份运行特权命令,这样在他运行时由于调用的是我们伪造的ps命令程序,所以会 产生一个root权限的SHELL环境。
2,竞争条件
一般指时序竞争,例如:
fp=fopen("test.log","w+");
chown("test.log",getuid(),getgid());
原理也很简单,就是如果当前的程序运行时权限是euid=root,uid=当前用户,由于 文件test.log在打开会执行将文件的属主改为当前用户,所以我们可以在执行完fo pen之后,chown之前删了test.log,而创建了一个到/etc/passwd的符号链接,这样 就会将/etc/passwd文件的属主改为当前的用户,当前的用户就可以在passwd文件中 将自己的uid改为0,这样就取得了system权限。
3,溢出和格式串漏洞
导致这些漏洞的数据来源主要是:
1,命令行参数
2,环境变量
3,特定格式文件的读取
4,用户交互十的输入
缓冲溢出的漏洞是有以下一些函数引起的:
1,strcpy
2, strcat
3, sprintf
4, vsprintf
格式化串的漏洞和以下一些函数有关:
1, print/vprintf
2, fprintf/vfprintf
3, sprintf/vsprintf
4, snprintf/vsnprintf
利用工具有objdump,elfedump查看目标是否有不安全的以上不安全的函数,如果有 可以进行黑盒测试,进而进行返汇编分析程序的上下文和执行流程,利用strings可 以静态查找目标的环境变量。
六,攻击WWW
现在的入侵事件,攻击WWW居多,原因也很简单,那就是程序员在编写WEB脚本程序 时更本不注重安全因素,导致了上传shell,提升权限之类的严重后果,入侵渗透测 试主要通过以下几个方面进行测试:
1,搜索SQL注入点;
2,搜索特定目录和文件,例如:上传程序文件,这个利用价值也很大;
3,寻找管理员登陆网页,进行字典或者SQL饶过入侵;
4,寻找WEB程序的源代码,进行漏洞挖掘,主要涉及的漏洞类型有:SQL注入,文件 包含漏洞,目录跳转漏洞,以脚本文件格式保存错误日志漏洞,上传漏洞;
5,在代码审核时,不要忘记对程序员犯的逻辑错误进行查看,例如:函数书写错误
6,总是,漏洞的成因归根到底是由于对用户的输入没有进行严格的过滤。
七,其他的入侵
1,针对数据库MSSQL,MYSQL,ORACLE等数据库的入侵;
2,针对路由,防火墙,IDS等网络设备的渗透
3,无线入侵渗透
八,入侵渗透以后
1,在成功得到系统级别的权限以后,就要在目标留下后门方便以后进入,当然清楚 日志是最为重要的收尾工作,这些方面也有很多的技术可以讨论,例如:后门的隐 藏(WIN下的ADS是一个不错的隐藏程序的东东,日志的有选择删除及其伪造等等, 这里就不详谈了。。
转载地址:http://lnthj.baihongyu.com/