信息收集-CDN绕过

数据包拓展

前面几集的内容,在这里做一个总结

HTTP简要通信过程

建立连接——发送数据请求包——返回响应数据包——关闭连接

1、 浏览器建立与web服务器之间的连接

2、 浏览器将数据打包(生成请求数据包)并发送到web服务器

3、 Web服务器将处理结果打包(生成响应数据包)并发送给浏览器

4、 Web服务器关闭连接

这里可以伪造请求方式和请求来源来达到攻击

搭建安全扩展

域名IP目录解析安全问题:
有的网站用域名访问的话,是一个路径,然后用IP访问的话是域名访问的上一级路径,也就是说,如果用IP访问,可以看到更多信息。或许源代码的备份就在IP访问的那一级路径之中。

常见安全测试中的安全防护

  1. 用户组的安全权限—读写等

  2. Ip地址和域名的访问限制

  3. Ssl的连接的证书的设置

常见后缀名解析对应安全:

在一般搭建平台上面会有一个设置,ISAPI拓展————中间件解析,解析利用

而在有的网站上,如果中间件没有设置好的话,那么上传一个一句话木马,他会自动将你上传的文件的后缀改成php的这样就不会被发现,就可能会成功,从而造成危害

Asp为什么能够解析,有一个地址专门解析这个类型的文件,只要将路径指向这个路径,就可以解析成asp文件

IP地址和域名限制:顾名思义,就是可以控制谁可以通过域名访问我的网站,谁可以通过IP访问我的网站

Web后门与用户及文件权限:

后门就是已经上传了木马,然后通过工具,实现远程访问,并且随时都可以访问。有了后门就可以上传文件以及下载文件,和删除文件等操作,但是前提是你所在的用户拥有足够的权限

来宾用户就是访问web网页中的匿名登陆使用的账号,如果把匿名用户去掉的话,那么访问这个网站时,就需要一个本地的用户来登陆

在Windows权限中,如果同时勾选了授权和不授权,那么Windows会判断你是不授权的

Web源码拓展

62f83b1de020be2730711f184903c6a0

前言:web源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中web源码有很多技术需要简明分析,比如:获取某asp源码后可以采用默认数据库下载为突破,获取某其他脚本源码漏洞可以进行代码审计挖掘和分析其业务逻辑等,总之源码的获取将为后期的安全测试提供了更多的思路

关于web源码目录结构:

了解网站的架构,方便后期攻击

主要有:后台目录,模版目录,数据库目录,数据库配置文件

关于web源码脚本类型:

主要有:ASP,PHP,ASPX,JSP,JAVAWEB,Python

如果拿到源码之后,你得知道源码是用什么脚本语言写的

不同的语言写出来的脚本,写出来的数据库结构是不一样的

有的语言运行出来是靠编译后来显示,而有的语言是不需要的

不同源码设计出来的安全漏洞也是不一样的

关于web源码应用分类:

门户(综合类漏洞),电商(业务逻辑突出),论坛(xss,逻辑突出),博客(漏洞较少),第三方(据功能决定),其他————源码功能决定漏洞的类型

框架就是把一些特定的功能集合到一起,那找漏洞的时候,如果这个框架有漏洞,那么这个类型的框架就都有这个漏洞

关于web源码其他说明:源码获取,有的站长为了防止网站出现问题,就会备份源码在一个目录中,如果扫描时可能可以有意外的惊喜

还有一些特殊的,比如币圈,资金盘等的源码就是一些特殊的源码,一般都是由某一个人做出来的源码,然后很多人去买,然后用。

关于源码的获取途径:搜索(百度,谷歌等搜索引擎),闲鱼淘宝,第三方源码站,各种行业对应

总结:关注应用分类及脚本类型估摸出可能存在的漏洞(其中框架类例外),在获取源码后可进行本地安全测试或者代码审计,也可以分析其目录工作原理(数据库备份,bak文件),未获取的源码采用各种方法想办法获取

CMS识别:

人工:直接观察;在数据包中找特殊的文件名或特殊的文件,用百度、谷歌搜

工具:扫描特有文件(需要长期更新维护,不推荐)

查看文件的MD5值

涉及资源:

菜鸟源码(已经无了):https://cnmmm.com

云悉指纹:https://www.yunsee.cn

CMS指纹识别字典下载(访问出错,Error 1101):https: //w.ddosi.workers.dev

在线指纹识别:http://whatweb.bugscaner.com

cmsprint(CMS和中间件指纹库):https://github.com/Lucifer1993/cmsprint

Github-Monitor(0day监控系统):https://github.com/M4tir/Github-Monitor

Web安全学习笔记5.语言与框架:https://websec.readthedocs.io/zh/latest/language/index.html

Web安全学习笔记:https://websec.readthedocs.io

系统及数据库

前言:除去前期讲到过的搭建平台中间件,网站源码外,容易受到攻击的还有操作系统,数据库,第三方软件平台等,其中此类攻击也能直接影响到web或服务器的安全,导致网站或服务器权限的获取

Snipaste_2022-03-21_14-57-20

操作系统,通过判断是否可以大小写来判断使用的服务器是win还是linux:在Windows中网址的大小写不区分,而在linux中网址的大小写是区分的

还有一种方法就是通过TTL值(生存时间)来判断网站使用的服务器,但是这种方法不能准确判断出目标的操作系统,而且ping的时候TTL值不是这个里面的数值那么就要看和他最近的那个数值用来判断

建议还是通过nmap进行扫描(这里使用kali自带的)

ip地址可用nmap来判断操作系统 nmap –O IP地址

识别数据库类型常见方法
通过网站识别数据库,通过脚本连接的数据库
一:Oracle默认是1521
二:SQL Server默认是1433
三:MySQL默认3306
四:pointbase默认是9092
五:DB2默认是5000
六.MongoDB默认端口号,27017
七.Redis默认端口号,6379
八.memcached默认端口号,11211

CDN相关技术

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。但在安全测试过程中,若目标存在CDN服务,将会影响到后续的安全测试过程。

判断是否有CDN

超级ping,看是否有多个节点,网上有很多这种在线工具,如果出现很多不一样的结果,那么就可以判断是有CDN的,如果只有一个那么就没有CDN

然后ping这个IP和域名,看看IP和域名是不是对应的,会不会有变化

nslookup 域名,看是否会有很多节点

CDN对测试有何影响&如何绕过

  1. 子域名查询:有的网站主域名会做CDN,但是子域名可能不会做,还有一个小技巧就是一个网站在解析的时候,不加www和加上都可以访问,原因是在域名解析的时候设置了对应的解析地址,所以有可能一个网站在解析的时候,有可能加上www的有CDN,不加的可能就直接是真实IP了,还有一个查询小技巧就是有的站点在前面改为 m.xxx.com的类型的时候访问的是手机类
  2. 邮件服务查询:我们访问别人,可能通过CDN,但别人访问我们通常不会走CDN,就是说网站在注册的时候,一般要邮箱地址,而这个时候,从他返回过来的邮件中的IP地址,极有可能是主站IP地址,因为一般邮件,是有单独的邮件服务器的,具体怎么查看邮件中的IP地址,百度查询,如果是软件这类,应该和小迪老师一样,右键源代码查看,不同的话百度查询
  3. 国外地址请求:国外没有cdn节点的话,可能直接走原ip //不太可靠
  4. 遗留文件,扫描全网;一个网站在创建的时候,经过发展可能会出现一些遗留文件,比如phpinfo()这类的文件。这个文件当中可能会有目标网站的主站IP地址。
  5. 黑暗引擎搜索特定文件;这个就是利用下文中脚本,安装环境注意是python2,这里的遗留文件一般是 .ico的文件,查看网站源代码进行查询
  6. dns历史记录,以量打量:CDN节点是有流量上限的,用光之后就会直通原机,这也是一种流量攻击;简单来说就是DDOS攻击,具体原理,百度即可

子域名上面的小技巧

· 二级域名和三级域名查到的结果可能不一样

· 主域名和子域名查询到的可能不一样

· DNs历史记录=第三方接口(接口查询)

· 采集/国外请求( 同类型访问)

· 邮件源码测试对比第三方查询(地区分析)

  • 黑暗引擎(shodan搜指定hash文件)
  • 扫全网 fuckcdn,w8 fuckcdn,zmap等
  • 工具扫描
  • 认为判定,根据网站的域名备案推测
  • 本地清下dns,然后hosts里写上得到的ip和域名,如果是cdn可能会出现刷新异常,如果打开很快大概率是原机,简单来说就是如果你心里有了几个主站IP地址的猜测,但是你不知道怎么去判断,第一种就是看网站的备案,然后看IP地址的来源,如果是一个地方,那么就有可能是主站。第二种就是修改host文件,你修改成你要猜测的主站IP地址,可能会出现ping的时候是超时,但是你打开对应的网站还是可以访问的,如果是CDN就可以ping通
1
2
3
4
5
6
7
8
9
#Python2 开发别搞错了执行环境
#安装 mmh3 失败记得先安装下这个#Microsoft Visual C++ 14.0
import mmh3
import requests

response = requests.get('https://v23gg.com/img/favicon.ico')
favicon = response.content.encode('base64')
hash = mmh3.hash(favicon)
print 'http.favicon.hash:'+str(hash)

资源

https://www.shodan.io
https://x.threatbook.cn
http://ping.chinaz.com
https://www.get- site- ip.com/
https://asm.ca.com/en/ping.php
https://github.com/boy-hack/w8fuckcdn

https://github.com/Tai7sy/fuckcdn #全网扫描工具下载
https://github.com/boy-hack/w8fuckcdn
https://mp.weixin.qq.com/s?__biz=MzA5MzQ3MDE1NQ==&mid=2653939118&idx=1&sn=945b81344d9c89431a8c413ff633fc3a&chksm=8b86290abcf1a01cdc00711339884602b5bb474111d3aff2d465182702715087e22c852c158f&token=268417143&lang=zh_CN#rd (实战秒杀BC下的CDN节点)案例

自定义加密算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function encrypt($data, $key)
{
$key = md5('ISCC');
#print $key;
$x = 0;
$len = strlen($data);
$klen = strlen ($key);
#print $len;
for($i=0; $i < $len; $i++){
if($x == $klen)
$x = 0 ;
$char .= $key[$x];
$x += 1;
#print $key[$X];
}
#print $char[0].$char[1].$char[2];
for ($i=0;$i<$len; $i++){
$str .= chr ((ord ($data[$i]) + ord ($char[$i]))%128);
}
return base64_encode ($str);
}
echo encrypt('helloword');
?>

自定义解密算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
function decrypt($str){
$mkey = md5('ISCC');
$klen = strlen($mkey);
$tmp = $str;
$tmp = base64_decode($tmp); //解密base64
$md_len = strlen($tmp); //获取输入加密字符长度
$x = 0;
$char = ""; //临时数组

for ($i=0; $i<$md_len; $i++){
if ($x == $klen){ //当加密字符串长度超出key
$x = 0; //的长度时查重头开始和获取
}
$char .= $mkey[$x]; //.= 累积函数
$x += 1;
}

$md_data = array(); //获取加密字符中的ASCII数据
for ($i=0; $i<$md_len; $i++){
array_push($md_data,ord($tmp[$i]));
}

$md_data_source = array();
$data1 = "";
$data2 = "";
foreach ($md_data as $key => $value){//最终还原
$i = $key;
if($i >= strlen($mkey)){
$i = $i - strlen($mkey);
}
$dd = $value;
$od = ord($mkey[$i]);
array_push($md_data_source,$dd);
$data1 .=chr(($dd+128)-$od); //原数据加key的Ascii大于128
$data2 .=chr($dd-$od); //原数据加key的Ascii小于128
}

print "data1 =>".$data1."<br>\n";
print "data2 =>".$data2."<br>\n";
}

$str = 'HxclIiEqIiUY';
decrypt($str);
?>

带盐加密:md5(md5(pass).salt)