Detect if the website is using CDN or cloud-based web application firewall :param url: Target URL or Domain :return True / False
(url)
| 42 | |
| 43 | |
| 44 | def checkCDN(url): |
| 45 | """ |
| 46 | Detect if the website is using CDN or cloud-based web application firewall |
| 47 | |
| 48 | :param url: Target URL or Domain |
| 49 | :return True / False |
| 50 | """ |
| 51 | url = 'http://' + url if '://' not in url else url |
| 52 | url = get_domain(url) |
| 53 | |
| 54 | dest = 'http://ce.cloud.360.cn/' |
| 55 | |
| 56 | s = requests.session() |
| 57 | |
| 58 | data1 = _get_static_post_attr(s.get(dest).content) |
| 59 | data1['domain'] = url |
| 60 | s.post('http://ce.cloud.360.cn/task', data=data1) |
| 61 | |
| 62 | headers = { |
| 63 | 'X-Requested-With': 'XMLHttpRequest', |
| 64 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' |
| 65 | } |
| 66 | s.post('http://ce.cloud.360.cn/Tasks/detect', data=data1, headers=headers) |
| 67 | |
| 68 | time.sleep(5) # 5 sec delay for nodes to detect |
| 69 | |
| 70 | data = 'domain=' + url + '&type=get&ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3&ids%5B%5D=4&ids%5B%5D=5&ids%5B%5D=6&ids%5B%5D=7&ids%5B%5D=8&ids%5B%5D=9&ids%5B%5D=16&ids%5B%5D=18&ids%5B%5D=22&ids%5B%5D=23&ids%5B%5D=41&ids%5B%5D=45&ids%5B%5D=46&ids%5B%5D=47&ids%5B%5D=49&ids%5B%5D=50&ids%5B%5D=54&ids%5B%5D=57&ids%5B%5D=58&ids%5B%5D=61&ids%5B%5D=62&ids%5B%5D=64&ids%5B%5D=71&ids%5B%5D=78&ids%5B%5D=79&ids%5B%5D=80&ids%5B%5D=93&ids%5B%5D=99&ids%5B%5D=100&ids%5B%5D=101&ids%5B%5D=103&ids%5B%5D=104&ids%5B%5D=106&ids%5B%5D=110&ids%5B%5D=112&ids%5B%5D=114&ids%5B%5D=116&ids%5B%5D=117&ids%5B%5D=118&ids%5B%5D=119&ids%5B%5D=120&ids%5B%5D=121&ids%5B%5D=122&user_ip_list=' |
| 71 | r = s.post('http://ce.cloud.360.cn/GetData/getTaskDatas', data=data, headers=headers) |
| 72 | |
| 73 | ips = re.findall('"ip":"(.*?)"', r.content) |
| 74 | ans = list(set(ips)) |
| 75 | msg = url |
| 76 | |
| 77 | if not len(ips): |
| 78 | msg += ' [Target Unknown]' |
| 79 | return msg |
| 80 | |
| 81 | msg += ' [CDN Found!]' if len(ans) > 1 else '' |
| 82 | msg += ' Nodes:' + str(len(ips)) |
| 83 | msg += ' IP(%s):' % str(len(ans)) + ' '.join(ans) |
| 84 | return msg |
| 85 | |
| 86 | |
| 87 | def poc(url): |
no test coverage detected