代码审计 底层逻辑

news2024/11/27 11:51:34

红队利用中,主要有以下几个板块。
找到漏洞-->利用漏洞-->权限维持-->痕迹清除。
找到漏洞对应的技能是代码审计。
利用漏洞对应的技能是各和实战中利用技巧+绕 waf。
权限维持,抽象来看,就是系统自己启动我的恶意代码,实现上看,往往要和 edr 做对抗痕迹清除,这块我研究的不深,日常应付项目反溯源,就是基本的删日志,删 history
本文从代码审计切入,以点概面的来谈这套体系,如果真正理解了,其实会发现其他的东西也是一样的。
代码审计,本质就是阅读理解。
阅读理解大家都做过,无论是语文还是英语还是代码,本质就是一回事。最开始做阅读理解的时候,这里拿英文举例子可能更有感觉,如果从来没接触过英文,其实大家都看不太懂,再有天赋也看不懂,因为不知道是啥东西
阅读理解,首先要做拆分,一个是阅读,一个是理解。
阅读是观察具体字符组合,理解是逻辑上达到自洽。
这里先从语言的最小粒度,单词着手开始描述:笼统的来说,单词,就是从特定字符对应到现实中的某样东西,如图所示:

 

英文单词我们往往是这么理解的,先把英语翻译成中文,然后再进行理解。
因为英语不是我们的第一语言,想办法找同义项替换是自然的第一反应,也是比较高效率的反应。
因为这样可以利用我们已知的东西(中文) 来学习未知,相当于已经有基础了,不用再
从零开始学习。翻译成中文之后,我们知道好这个词,马上就理解了,因为我们已经把好这个词,和现实中的某种具体感受联系起来了,比如某些愉悦的感受,站在海边吹着海风,波浪层层递推,万里晴空一望无际,在这个时候,我们就会用,“好”,这个词来描述这种感受,也可以理解为对于现实世界具体事物的一种抽象。
那么单词的学习,本质上就是建立具体词和现实世界对应的事物的一种联系可以抽象为以下过程:
看到一个新词-->联系到现实世界某种具体的事物-->建立链接这种链接其实其实有点像代码中的赋值。
例如,代码中是
a=1--> 把 a 和到内存中的 1做一个链接

英语中是
Good = Something is pleasing or valuable or useful-->映射到现实的具体事物
汉语中是
好 = 一些让我舒服的东西 --> 映射到现实的具体事物
这里链接的建立是在我们的大脑神经元中建立的,这种连接有强有弱,如果天天熟悉某样特定事物,这种连接就会变强,逐步就会形成长期记忆,然后就会熟悉这门语言。
然而单单会词其实还不够,就像我们背诵了所有的英文单词,但是如果要我们写出一篇优美的英语作文,我们却无从下手一样,因为这里还涉及到单词的组合,需要符合既定的规则,我们称之为语法。
那么有了单词,有了语法,单词+语法,就可以形成单个句子。
然后再把单个句子的逻辑组合起来,在口头表达上,就形成了口语,在作文上,就形成了书面语
最终,单词+语法+正确的逻辑,就得到了最终的成品。
没有单词,基本的单点事物映射都描述不出来。
没有语法,词语组合一片混乱,单体的简单意思都表达不出来。
没有逻辑,句子组合一片混乱,整体的稍微复杂点的意思就无法表达了。
以上就是任何一门语言的基本性质。

那么通过上面语言学习的原理的描述,这里我们可以推断,要学会一门语言,其实最好的方法就是多用,因为在运用的过程中,会逼迫大脑不断的熟悉特定字符,然后在我们表达具体意思的时候,大脑又会先映射现实事物的具体逻辑,然后再用我们熟悉的字符表达出来如此往复,不断的训练我们的单词,语法,逻辑,最后我们就能彻底的学会了这门语言。
上面的讲法是通用性的,那么针对代码,方法是一回事,但是具体的技术细节需要调整下面以 iava 反射举例,这里我想在 iava 运行时候调用某个类的方法,方法如下:

 简单写了个 demo,就是遍历输入的数组,然后打印。然后我会传入参数:

 

如果不出意外,就会运行代码的人就会被骂那么怎么实现呢?
按照我上面的逻辑,一方面是多熟悉单体的词义,例如 java 中的 invoke 反射调用,先知道是干嘛的 (单词),上网查了一下,发现是调用方法的(基本链接建立)。
然后尝试写一句话 (语法):

Method method = clazz.getMethod("test", Stringll.class);//获取 test 方法这里我把 test 方法写出来方便理解

public void test(Stringl] arg){

for (String string : arg){

System.out.println(string):


上面这句话的意思就是利用反射获取 test 方法
然后尝试组合逻辑(整体逻辑):
Method method = clazz.getMethod("test", Stringll.class);//获取 test 方法

Method.invoke(m,(Object)s)//调用 test 方法最后得到结果,建立代码和现实的映射 (fucku fucku2):

 

import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;
import org.testng.annotations.Test;
public class Msym {
public void test(Stringl] arg){
for (String string : arg) {
System.out.printin(string);
public static void main(Stringl] args) throws NoSuchMethodException, InvocationTargetException, InstantiationExClass<Msym>
{
 clazz = (Cass<Msym>) Class.forName("test.reflect.Hsya");
//获取一个对象
Constructor con = clazz.getConstructor();
Msym m = (Msym) con.newInstance();
String[] s = new String[]{"fucku","fucku2"};
//获取Method对象
Method method = clazz.getMethod( name: "test",String[].class);//调用invoke方法来调用
method.invoke(m,(Object) s);
}
}

通过以上的描述,应该可以理解,语言学习本质上都是一回事,不管是你是英语也好,中文也好,是 c语言也好,java 也好,都是大差不差。
其实代码审计挖漏洞,也是一回事。
正如前文提到,代码审计的本质,就是阅读理解。
阅读理解不单单是词,语法,逻辑的组合,还得会做题。
我们做英文的阅读理解,读懂了,是不是得做题,这样考试的时候,考官才能知道你究竟都没读懂。
代码审计也是一样,漏洞,就是阅读理解的题。

要做出这些题,单单读懂是不行的,因为你理解的意思,可能和考官想考察你的意思有偏差。
因此这里还需要加上考试技巧,在英文的阅读理解中,也会有各种技巧辅助最终选出正确答案。
代码审计也是一样,理解+考试技巧,才能真正的挖出漏洞。
这里的技巧训练就是阅读历史漏洞,然后总结。
例如想挖 weblogic,那么 weblogic 的历史漏洞一定要全部看一遍每一个组件的代码都是具有个性的,这种个性和开发人员的开发风格和选用的开发套件相关,一个错误,他犯了一次,就可能会犯第二次,然后就会有规律,就会有套路可言。基于以往的漏洞,往往就能发现新的漏洞。
这个和英语的阅读理解一样,训练英语阅读理解做题,往往我们要做很多题,然后总结题目类型,例如单词题,主旨题,段落理解题等等。
挖漏洞也是一样,单个组件的漏洞无非就是那么几种,例如 weblogic 一直在搞反序列化漏洞出来,那么总结以前的漏洞,然后学习源码,掌握规律,然后多熟悉熟悉,挖这种web 组件的0day 并不是难事,只是圈内的人喜欢搞神秘主义,一点东西,喜欢渲染的离奇诡谲,揭开面纱之后,发现本质其实还是相对质朴的。
如果不相信笔者,也可以找其他熟悉的挖 web 组件 0day 的人问问,这东西真的有那么难吗?一定需要顶尖的天赋吗?
无非就是掌握语言学习的正确方法,多看,多练,多熟悉,仅此而已

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习——通信机制(话题通信③—注意事项)

2.1.2 话题通信基本操作A(C) Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 043话题通信(C)4_注意事项_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1. int main(int argc, char const *argv[]){} vscode 中的 main 函数 声明 int main(int argc, char const *argv…

更新Navicat Premium 16.2 之 如何使用Navicat连接Redis的新手教程

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

向clickhouse插入一段由经纬度构成的路径

目录 背景粗暴简单字符串示例 数组套数组示例 LineStringWKT来帮忙参考资料 背景 现有一条路&#xff0c;这条路由好几段路段构成&#xff0c;每个路段又由一些轨迹点先后连接而成&#xff0c;且这些轨迹点数量不固定&#xff0c;有些路段由10个轨迹点连接而成&#xff0c;有些…

13 MCMC——马尔可夫链蒙特卡洛

文章目录 13 MCMC——马尔可夫链蒙特卡洛13.1 MCMC的意义13.2 简单采样方法介绍13.2.1 概率分布采样13.2.2 Rejection Sampling——拒绝采样13.2.3 Importance Sampling——重要性采样 13.3 Markov Chain知识补充13.3.1 Markov Chain定义13.3.2 Markov Chain性质——平稳分布13…

javaScript蓝桥杯----猜硬币

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 为了打发无聊的时间&#xff0c;小蓝开发了一款人机对战的猜硬币游戏&#xff0c;页面中一共有 9 个杯子&#xff0c;系统会随机挑选 3 个杯子在里面放入硬币&#xff0c;玩家通过输入含有杯子序号的字符串进行猜选&a…

基于Python班级管理系统毕业设计-附源码171809

目 录 摘要 1 绪论 1.1研究背景 1.2研究的目的与意义 1.3系统开发技术的特色 1.4论文结构与章节安排 2 基于Python班级管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

【考点】CKA 08_Kubernetes工作负载与调度 关系调度 nodeSelector 亲和性和反亲和性 污点 节点驱离与下线

文章目录 考试题目&#xff1a;deployment 扩容&#xff08;扩容命令&#xff09;1. Kubernetes 调度器1.1 调度概览1.2 kube-scheduler1.3 kube-scheduler 调度流程 2. Kubernetes 关系调度2.1 节点标签2.2 节点隔离/限制2.3 nodeName 字段2.3.1 准备工作2.3.2 创建使用 nodeN…

深度学习-第T10周——数据增强

深度学习-第T10周——数据增强 深度学习-第T10周——数据增强一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目 四、数据预处理1、 加载数据1.1、设置图片格式1.2、划分训练集1.3、划分验证集1.4、查看标签1.5、再次检查数据1.6、配置数据集 2、数据可视化 五、数…

硬件设计电源系列文章-DCDC转换器基础知识

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 本文主要接着上篇&#xff0c;上篇文章主要讲述了LDO的相关基础知识&#xff0c;本节开始分享DCDC基础知识 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 以下是…

ROS学习——通信机制(话题通信②—订阅方实现)

2.1 话题通信 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 042话题通信(C)3_订阅方实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1.新建demo02_sub.cpp文件&#xff0c;搭建框架 2.包含头文件 3.初始化ROS节点 cuiHua——节点名称&#xff0c;具有唯一性 4.创…

一小时让你Get到面试套路:记一次Java初中级程序员面试流程梳理

视频教程传送门&#xff1a; 一小时让你Get到面试套路&#xff1a;记一次Java初中级程序员面试流程梳理_哔哩哔哩_bilibili听了N多个师兄师姐的面试录音&#xff0c;采访了N多个师兄时间的面试经历&#xff0c;才总结出来的java面试流程&#xff0c;非常适合正在准备面试的你。…

【7 微信小程序学习 - 小程序的系统API调用,网络请求封装】

1 网络请求 – 原生 请求数据,保存数据 1 原生请求 Page({data: {allCities: {},houselist: [],currentPage: 1},async onLoad() {// 1.网络请求基本使用wx.request({url: "http://codercba.com:1888/api/city/all",success: (res) > {//保存数据const data res…

企业级在线办公系统搭建开发环境

目录 介绍 搭建开发环境 安装MySQL数据库 安装Redis程序 安装MongoDB数据库 安装RabbitMQ 安装JDK 安装Maven环境 安装Node.js程序 安装HbuilderX工具 MacOS环境的程序安装 安装Docker环境 安装MySQL数据库 安装MongoDB数据库 安装Redis程序 安装RabbitMQ 学习…

【Python 匿名函数】零基础也能轻松掌握的学习路线与参考资料

Python 匿名函数是一种特殊的函数&#xff0c;也称为 lambda 函数。它允许我们创建一种简单的函数&#xff0c;一行代码就可以搞定。可能你会发现&#xff0c;在使用Python时&#xff0c;经常可以看到lambda关键字&#xff0c;以lambda开头的就是匿名函数。本文将详细介绍Pytho…

在一台电脑上配置多个Git账号,工作、生活两不误

文章目录 先 Unset global 配置生成 SSH Key 并配置到 GitHub多账号用 config 管理 先 Unset global 配置 任意文件夹下 Git Bash Here 然后输入如下命令来 unset git config --global --unset user.name git config --global --unset user.email git config --global --unset…

LabVIEW编程开发汽油中各种掺假物浓度⽔平的检测

LabVIEW编程开发汽油中各种掺假物浓度⽔平的检测 主要目的是使用LabVIEW中的密度法找到汽油中掺杂物的浓度。已经对许多技术进行了研究&#xff0c;以发现汽油中的掺杂物。例如蒸馏试验、化学制造商试验、蒸发试验、气相色谱法可以专门测量掺杂物。甚至有数字密度计来测量汽油…

深圳旧改投资_一秒读懂什么是确权?物业权利人核实的基础要点。

权利人核实常见问题 为什么要做历史违建物业权利人核实&#xff1f; 2021年3月1日正式实施的《深圳经济特区城市更新条例》&#xff0c;区城市更新部门应当在物业权利人更新意愿核实阶段组织区规划土地监察机构、辖区街道办事处和原农村集体经济组织继受单位对历史违建物业权…

【数据可视化】数据可视化Canvas

1、了解Canvas ◼什么是Canvas ---- Canvas 最初由Apple于2004 年引入&#xff0c;用于Mac OS X WebKit组件&#xff0c;为仪表板小部件和Safari浏览器等应用程序提供支持。后来&#xff0c;它被Gecko内核的浏览器&#xff08;尤其是Mozilla Firefox&#xff09;&#xff0c…

上位机Qt应用程序与MCU板子之间的串口数据传输算法,举例1字节、2字节、4字节正负数。再加qDebug的重定向显示打印数据。

串口之间的数据传输算法 前言【1】Qt界面设计图【2】串口char型举例串口收发正数举例串口收发负数举例 【3】串口short 型举例大端序和小端序 串口收发正数举例串口收发负数举例 【4】串口int型举例串口收发正数举例串口收发负数举例串口收发正负数&#xff08;简洁版推荐&…

大数据分析的Python实战指南:数据处理、可视化与机器学习【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 引言&#xff1a; 大数据分析是当今互联网时代的核心技术之一。通过有效地处理和分析大量的数据&#xff0c;企业可以从中获得有价值的洞察&#xff0c;以做出更明智的决策。本文将…