白盒渗透测试简介

白盒测试与黑盒测试的区别

  • 黑盒测试是不考虑系统的内部结构和实现细节,只关注系统的输入和输出,模拟攻击者的行为,测试系统的安全性。而白盒测试则需要了解系统的内部结构和代码实现,模拟攻击者的行为,测试系统的安全性。
  • 黑盒测试是基于功能的测试,通过模拟正常或异常的输入来检测系统的漏洞,一般通过手工测试或自动化测试工具进行。而白盒测试是基于代码的测试,通过分析系统的代码结构和设计,检测是否存在安全漏洞,一般需要深入了解系统的内部工作原理。
  • 黑盒测试通常由独立的安全测试团队进行,测试人员不需要了解系统内部的细节。而白盒测试通常由开发人员或测试人员进行,需要对系统的内部结构和代码实现进行了解。
  • 黑盒测试的优点在于可以全面评估系统的安全性,缺点是测试过程较为复杂,需要大量的手工测试和测试工具。而白盒测试的优点在于可以深入了解系统的内部结构和代码实现,更容易发现潜在的安全漏洞,缺点是测试过程相对来说比较繁琐,需要对系统代码进行深入了解。

代码安全审计

代码安全审计基本概念

  • 白盒测试:检查源代码中的缺点和错误信息,分析找到这些问题引发的安全漏洞,并提供代码的修订措施和建议。
  • 白盒测试的优势在于易于找到特定类型缺陷的所有内容和实例,更容易发现潜在缺陷。

理论上黑盒渗透测试发现的问题一定可以在白盒渗透测试过程中发现代码缺陷,但白盒渗透测试过程中发现的缺陷可能不会马上体现在外部功能中。

代码审计测试手段

审计方式

  • 自动化扫描
    自动化的静态代码审计工具的优点是可以节省代码审计的人力成本,提高代码审计效率。但缺点是自动化工具存在较高的误报率;并且自动化扫描仅能根据常见的应用漏洞进行挖掘,对于业务逻辑漏洞或程序设计缺陷挖掘无能为力。
  • 人工代码审计
    优点是可以发现业务逻辑漏洞和程序设计的缺陷,是对自动化扫描的互补,缺点是成本较高,审计的效果依赖于执行审计人员的经验和安全编码规范的指导作用。

代码审计流程

  • 检查软件框架和设计:检查软件的基础设计、模块之间的耦合关系、第三方库或框架是否合理;
  • 审计规则制定:基于成本制定审计规则和原则;
  • 审计工作扫描和人工确认:利用分析工具对源代码进行自动扫描,人工对扫描结果进行复核;
  • 程序逻辑核查:检查基本的程序逻辑、性能、安全等是否存在问题,用户交互流程是否满足正常的软件使用要求

代码测试工具

FindBug在线:eclipse、IDEA
PHP代码审计工具:Seay

安全代码开发流程

在软件开发生命周期中,后面的阶段改正错误开销币前面的阶段要高出数倍;
在软件发布以后进行修复的代价是在软件设计和编码阶段,即进行修复时所花代价的30倍。
在这里插入图片描述
安全开发生命周期(SDL,Security Development Lifecycle),由微软最早提出,是一种专注于软件开发的安全保障流程。为实现保护最终用户为目标,它在软件开发流程的各个阶段引入安全和隐私问题。
在这里插入图片描述

自动化分析修复迭代

基于Jenkins的自动化集成-测试-发布,CI/CD通常会采用一些软件Jenkins等进行辅助,它们能够与Git /SVN等代码管理仓库集成,进而实现一些自动化任务。过程中,代码集成必须经过自动化测试,测试零失败的代码才能合并。
在这里插入图片描述

代码测试工具

Jenkins与Jtest进行集成CI
在这里插入图片描述

安全代码开发规范

  • 国家标准
  • OWASP安全编码规范
  • Find-Sec-Bugs编码Bug解析

代码审计案例分析

SQL注入

Java项目sql注入。WebGoat的SQL注入课程,页面是表单允许用户查看天气数据。通过下拉列表选择不同的地区,点击GO按钮显示天气数据。并启动BurpSuite工具获取数据。
在Repeater界面修改发送数据为
【station=101 or 1=1&SUBMIT=Go!】,
在这里插入图片描述
显示除了执行参数中的sql语句外,还执行了一个1=1的表达式,一般情况下攻击者喜欢用一些简单的表达式或特殊字符如单引号,试探系统是否因为SQL语法错误而报错。
在这里插入图片描述
分析代码,使用FindBugs扫描,显示漏洞对应代码,并提供漏洞描述。
在这里插入图片描述
临时修复,对输入字符串进行过滤。
重构查询,使用预处理 SQL代替即时 SQL。
.Net系统sql注入,url地址为http://192.168.0.162:8002/Details.aspx?id=27表明这个电影在数据库中的id为27。入侵者可能会使用简单的逻辑语句附加在url后面来试探是否存在后面如‘or 1=1。
入侵者可能会使用简单的逻辑语句附加在url后面来试探是否存在后面如http://192.168.0.162:8002/Details.aspx?id=27 ‘or 1=1系统报错。
在这里插入图片描述
然后我们需要构造一个排序来查找这个页面中需要从数据库提取多少数据使用order by +num命令,这里我们在实验到1-14都可以,15报错,这样可以知道需要14列数据,所以构造如下url为:
http://192.168.0.162:8002/Details.aspx?id=30%27union%20select%201,2,3,4,5,6,7,8,9,10,11,12,%2713%27,14from%20Users%20union%20select%20*%20from%20Movies%20where%20MovieID=%2730
分析设计的时候在电影名称,电影导演为nvarchar,所以将3,4处替换为UserName,Pwd构造如下:
http://192.168.0.162:8002/Details.aspx?id=30%27union%20select%201,2,UserName,Pwd,5,6,7,8,9,10,11,12,%2713%27,14from%20Users%20union%20select%20*%20from%20Movies%20where%20MovieID=%2730
PHP系统sql注入,DVWA的sql注入课程,在对话框输入?id=a‘ UNION SELECT “text1”,“text2”;-- -&Submit=Submi,显示数据库以外数据。
在这里插入图片描述
数据库操作代码为mysqli_query拼接id动态生成sql语句。
最终修复状态下,使用prepare处理sql语句,防止sql注入的发生。

逆向代码审计

逆向代码审计基本概念

编程语言

编程语言大致分为三类:

  • 机器语言:又称机器码、原生码,电脑CPU可直接解读,因该语言与运行平台密切相关,故通用性很差;
  • 汇编语言:是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在不同的设备中,汇编语言对应着不同的机器语言指令集, 运行时按照设备对应的机器码指令进行转换,所以汇编语言可移植性也较差;
  • 高级语言:与前两种语言相比,该类语言高度抽象封装,语法结构更接近人类语言,逻辑也与人类思维逻辑相似,因此具有较高的可读性和编程效率。但是高级语言与汇编语言相比,因编译生成的辅助代码较多,使运行速度相对“较慢”。 java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言等等 均属于高级语言。

硬件->机器语言->汇编语言->系统语言(C和C++)->解释型语言(python)和虚拟机语言(java)

不同语言的代码审计

C/C++

C/C++可执行程序的生成过程,主要经过编译和链接两个阶段。

  1. 编译:编译器将源代码进行词法和语法分析,将高级语言指令转化为汇编代码;
  2. 链接:将有关目标文件彼此相连接生成可加载、可执行的目标文件,其核心工作是符号表解析和重定位。链接按照工作模式分为静态和动态链接两类。
Java

Java可执行文件的生成过程如下:

  1. 词法分析是将源代码的字符流转变为标记(Token)集合;
  2. 完成了语法分析和词法分析后,下一步就是填充符号表的过程;
  3. 语法树能够表示一个结构正确的源程序的抽象,但无法保证源程序是符合逻辑的;
  4. 字节码生成阶段不仅仅是把前面各个步骤所生成的信息转化为字节码写到磁盘中,编译器还进行了少量的代码添加和转换工作。
Python
源代码m.py
字节码m.pyc
PVM
CPU

逆向代码审计与代码审计

  • 代码审计是对源代码进行分析,以发现代码中的漏洞,例如SQL注入、XSS等,其主要目的是评估系统安全性和发现已知的漏洞。而逆向代码审计则是对二进制文件(例如exe、dll、so等)进行反汇编,将它们转换成汇编代码,以揭示程序的内部工作原理和漏洞。逆向代码审计常见的应用场景包括软件漏洞分析和恶意代码研究。
  • 代码审计需要了解程序设计和编程语言,有程序员或安全测试人员进行。而逆向代码审计需要精通汇编语言和逆向工程技术,有专门的安全研究人员进行。
  • 代码审计可以在开发过程中进行,通过静态代码分析来避免代码漏洞的产生;也可以在系统已经上线后进行,通过动态分析来发现漏洞。逆向代码审计通常是在系统已经上线后进行,通过对样本进行分析来发现漏洞。
  • 代码审计和逆向代码审计都是发现漏洞的重要方法,但它们的重点不同,适用于不同的应用场景,需要根据具体的情况来选择使用哪种方法。

逆向代码审计测试手段

针对C/C++/Go,使用IDA pro、OllyDbg等
固件提取——Binwalk
代码注入
.Net框架

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学习web渗透测试的线路可以按照以下步骤进行: 1. 先了解什么是web渗透测试。Web渗透测试是指在对目标网站系统信息不知情的情况下,对其进行渗透的过程。可以分为白盒测试和黑盒测试两种方式。白盒测试是在了解目标网站的源码等信息的情况下进行渗透,相当于代码分析审计。而黑盒测试则是在不知道目标网站系统信息的情况下进行渗透。 2. 学习计算机网络的基础知识。计算机网络是web渗透测试的基础,掌握网络协议、抓包和扫描主机开放的其他服务端口等技术对于渗透测试至关重要。推荐学习《计算机网络自顶向下方法》,这本书以一种层层剖析的方式讲解了网络的封装过程,包括常见的问题如TCP握手以及阻塞机制等。 3. 学习渗透测试的工具和技术。了解并掌握常用的渗透测试工具,如Nmap、Metasploit、Burp Suite等,以及相关的技术,如XSS、SQL注入、漏洞利用等。通过实践和实际操作,加深对这些工具和技术的理解和掌握。 4. 深入学习web应用安全知识。了解常见的web漏洞类型,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、SQL注入等,并学习相应的防御措施。熟悉常用的web框架和安全配置,加强对web应用安全的理解和实践。 5. 参与实际的渗透测试项目。通过参与实际的渗透测试项目,不断积累经验和提升技能。可以通过参加CTF比赛、模拟演练或者找到相关的实习机会来锻炼自己的能力。 总结起来,学习web渗透测试的线路包括了了解渗透测试的基本概念,学习计算机网络基础知识,掌握渗透测试工具和技术,深入学习web应用安全知识,并参与实际的渗透测试项目。通过这些步骤的学习和实践,可以逐渐提升自己在web渗透测试领域的能力和水平。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [web渗透测试学习路线](https://blog.csdn.net/2302_77844491/article/details/131147129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【安全测试工程师】超实用的Web渗透测试学习路线~](https://blog.csdn.net/weixin_44433834/article/details/119330778)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值