安全测试-WEB安全渗透测试基础知识(五)
1.5. 代码审计
1.5.1. 简介
代码审计是找到应用缺陷的过程。其通常有白盒、黑盒、灰盒等方式。白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白结合的方式。
1.5.2. 常用概念
1.5.2.1. 输入
应用的输入,可以是请求的参数(GET、POST等)、上传的文件、网络、数据库等用户可控或者间接可控的地方。
1.5.2.2. 处理函数
处理数据的函数,可能是过滤,也可能是编解码。
1.5.2.3. 危险函数
又常叫做Sink Call、漏洞点,是可能触发危险行为如文件操作、命令执行、数据库操作等行为的函数。
1.5.3. 自动化审计
一般认为一个漏洞的触发过程是从输入经过过滤到危险函数的过程,而审计就是寻找这个链条的过程。
1.5.3.1. 危险函数匹配
白盒审计最常见的方式是通过搜寻危险函数与危险参数定位漏洞,比较有代表性的工具是Seay开发的审计工具。这种方法误报率相当高,这是因为这种方法没有对程序的流程进行深入分析,另一方面,这种方式通常是孤立地分析每一个文件,忽略了文件之间复杂的调用关系。
具体的说,这种方式在一些环境下能做到几乎无漏报,只要审计者有耐心,可以发现大部分的漏洞,但是在高度框架化的代码中,能找到的漏洞相对有限。
1.5.3.2. 控制流分析
在后来的系统中,考虑到一定程度引入AST作为分析的依据,在一定程度上减少了误报,但是仍存在很多缺陷。
而后,Dahse J等人设计了RIPS,该工具进行数据流与控制流分析,结合过程内与过程间的分析得到审计结果,相对危险函数匹配的方式来说误报率少了很多,但是同样的也增加了开销。
1.5.3.3. 灰盒分析
国内安全研究员fate0提出了基于运行时的分析方式,解决了控制流分析实现复杂、计算路径开销大的问题。
1.5.4. 手工审计方式
拿到代码,确定版本,确定能否正常运行
找历史漏洞
找应用该系统的实例
简单审计,运行审计工具看是否有漏洞
大概看懂整个程序是如何运行的
文件如何加载
类库依赖
有没有加载waf
数据库如何连接
mysql/mysqli/pdo
有没有用预编译
视图如何形成
能不能xss
能不能模版注入
SESSION如何处理
文件
数据库
内存
Cache如何处理
文件cache可能写shell
数据库cache可能注入
memcache
看账户体系
管理员账户的密码
加密方式
泄漏数据后能不能爆破密码
重置漏洞
修改密码漏洞
修改其他人密码
普通用户的帐号
能否拿到普通用户权限
普通用户帐号能否盗号
重点找没有帐号的情况下可以访问的页面
是不是OAuth
攻击
SQLi
看全局过滤能否bypass
看是否有直接执行sql的地方
看是用的什么驱动,mysql/mysqli/pdo
如果使用PDO,看是否是直接执行的地方
XSS
全局bypass
直接echo
看视图是怎么加载的
FILE
上传下载覆盖删除
包含
LFI
RFI
全局找include, require
正常上传
看上传是如何确定能否上传文件的
RCE
call_user_func
eval
assert
preg_replace /e
XXE
CSRF
SSRF
反序列化
变量覆盖
extract
parse_str
array_map
LDAP
XPath
Cookie伪造
过滤
找WAF
看waf怎么过滤的,相应的如何绕过
安全测试-WEB安全渗透测试基础知识(五)的更多相关文章
- 安全测试-WEB安全渗透测试基础知识(四)
.4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...
- ref:Web Service 渗透测试从入门到精通
ref:https://www.anquanke.com/post/id/85910 Web Service 渗透测试从入门到精通 发布时间:2017-04-18 14:26:54 译文声明:本文是翻 ...
- Web应用渗透测试框架Arachni
Web应用渗透测试框架Arachni Arachni是一款Ruby语言编写的Web应用渗透测试框架.当用户指定目标后,该框架可以自动扫描网站页面,对页面中的链接.表单.Cookie.HTTP He ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- APP测试入门篇之APP基础知识(001)
前言 最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...
- 安全测试===Web 安全渗透方面的学习路线
作者:向生李链接:https://www.zhihu.com/question/21914899/answer/39344435来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 想入门Web安全,这些基础知识都学会了吗?
毕业季已经正式告一段落,这届毕业生都找到心仪的工作了吗? 正在实习期或者试用期的职场新人,是否在岗位上做的风生水起? 工作了一两年,从未升职加薪的菜鸟,还愿意继续原地踏步吗? 在校学生.IT从业者.毕 ...
- Python基础知识(五)------字典
Python基础知识(四)------字典 字典 一丶什么是字典 dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 键: 必须是可哈希,(不可变的数据类型 ...
- WEB下渗透测试经验技巧(全)[转载]
Nuclear’Atk 整理的: 上传漏洞拿shell: 1.直接上传asp.asa.jsp.cer.php.aspx.htr.cdx….之类的马,拿到shell.2.就是在上传时在后缀后面加空格或者 ...
- Web前端渗透测试技术小结(一)
首先端正一下态度不可干违法的事 1.SQL注入测试 对于存在SQL注入的网页,使用SQL语句进行关联查询(仿照C/S模式)eg http://www.foo.com/user.php?id=1 常 ...
随机推荐
- 03初识MapReduce
初识MapReduce 一.什么是MapReduce MapReduce是一种编程范式,它借助Map将一个大任务分解成多个小任务,再借助Reduce归并Map的结果.MapReduce虽然原理很简单, ...
- vscode快速删除空白行方法
1.快速打开替换界面,在Find界面输入^\s*(?=\r?$)\n 2.Alt+R选择Use Regular Expression(Alt+R)即正则表达式模式: 3.选择Replace All(C ...
- 论文翻译:2022_Time-Shift Modeling-Based Hear-Through System for In-Ear Headphones
论文地址:基于时移建模的入耳式耳机透听系统 引用格式: 摘要 透传(hear-through,HT)技术是通过增强耳机佩戴者对环境声音的感知来主动补偿被动隔离的.耳机中的材料会减少声音 500Hz以上 ...
- zookeeper03-集群搭建
1.前言 在前面的文章中讲了单机版zookeeper的搭建,现在在单机版的基础上搭建集群.默认单机版的搭建好了.我这里只有一台服务器,所以在单机上搭建的为集群 2.将单机安装好的zookeeper复制 ...
- flutter系列之:使用SliverList和SliverGird
目录 简介 SliverList和SliverGird详解 SliverList和SliverGird的使用 总结 简介 在上一篇文章我们讲解SliverAppBar的时候有提到过,Sliver的组件 ...
- springboot如何在拦截器中拦截post请求参数以及解决文件类型上传问题
我们经常有这样一个场景,比如:在springboot拦截器中想截取post请求的body参数做一些中间处理,或者用到自定义注解,想拦截一些特定post请求的方法的参数,记录一些请求日志. 想到了使 ...
- .net core 阿里云接口之将指定的OSS文件下载到流
紧接上文,.net core 阿里云接口之获取临时访问凭证_SunshineGGB的博客-CSDN博客 本文继续阿里云接口调用,将指定的OSS文件下载到流. 直接上代码: /// <summar ...
- 大曝光!从RabbitMQ平滑迁移至Kafka架构设计方案!
历史原因,公司存在多个 MQ 同时使用的问题,我们中间件团队在去年下半年开始支持对 Kafka 和 Rabbit 能力的进行封装,初步能够完全支撑业务团队使用. 鉴于在之前已经基本完全实施 Kafka ...
- JZOJ 3745. 【NOI2014模拟7.14】Problem A
\(\text{Problem}\) 我们有一个树,大小为 \(n\). 考虑树上的一条路径,如果一个边的两个点都在这路径上,我们称这个边属于这个路径,如果一个边有且只有一个点在这路径上,我们称这个边 ...
- [USACO06NOV] Round Numbers S
题目 \(\texttt{[USACO06NOV] Round Numbers S}\) 分析 数位 \(dp\) 入门题 一般我们需要当前位置 \(pos\),有无前导零 \(lead\),高位标记 ...