首页
学习
活动
专区
圈层
工具
发布

原创 Paper | 从 XZ 后门学奇技淫巧

到这,可以解答前面的一个疑惑:由于foo_resolver函数在dl链接阶段被加载调用,此时环境变量尚未被GLIBC加载,因此调用getenv函数将返回NULL,导致最终返回的都是foo_2函数。...由于__tls_get_addr函数是位于ld中的函数,所以可以根据该地址爆破出ld的基地址。 获取到ld的基地址后,就可以匹配ld的ELF头信息,这样就能很容易的匹配到ld的任意符号地址。...首先匹配的是ld的__libc_stack_end指针,该变量指向栈底,正常情况下,该地址之后只储存着程序执行的参数和环境变量。...值得注意的是,在XZ后门中,基本没有使用库函数,而是自己实现了所有功能。 下面简单梳理一下上面代码的主要逻辑: 通过__tls_get_addr地址爆破出ld的基地址。...有一篇参考文章中提到在_dl_audit_symbind_alt函数中调用install_hooks函数,但是在ubuntu22.04的环境上进行调试发现,调用的是_dl_audit_symbind,并不会调用到

66510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Log4j2 RCE 漏洞之续集

    这样就实现了 RCE,其中 BeanFactory 核心代码如下: 根据上面介绍,java 版本在比较高的情况下可以避免也是有前提的,那就是你的本地的 JVM 环境中没有上面两个类的引用。...所以一旦黑客通过上下文的方式把危险调用注入到配置中,一样会触发 RCE。...引用官网的一段原文如下: 官网已经说的很清楚了,查询功能在日记消息里默认被禁用了,但是在配置里还在。...这样就没有问题了么,试想在配置有在上下文中取值的情况下黑客注入一个在本机的 jndi 调用,那么就会去连接本机的服务。本机当然没有这个服务了,然后就会有 tcp 握手不上一直等到超时的情况。...属性的值配置成危险调用。

    88810

    智能电眼:Rokid AR眼镜重塑电力巡检安全防线

    4.1测试环境:在真实变电站里用我们在某省的110千伏变电站里测试了这套系统,用到的设备很简单:终端设备:RokidCXR-MAR眼镜;配套设备:安卓手机(用来和眼镜连接、管理数据);后台平台:普通的电脑服务器...4.2测试结果:效果很实在经过1个月的实地测试,这套系统的表现超出预期:提醒很及时:98.7%的高压区域,能在工人走到前3-5米的时候就识别出来,提前提醒;很少误报:不会随便喊“危险”,误报率只有2.3%...尤其是晚上或者设备多的复杂环境,红色的高亮提醒和语音警告,能少犯很多错。”五、开发时遇到的问题,怎么解决?5.1问题一:复杂环境下,眼镜认不出高压设备怎么办?...我们想了三个办法:多维度判断:不光靠眼睛“看”,还结合设备周围的电磁场数据,双重确认是不是高压设备;自动适应环境:光线亮的时候调亮识别灵敏度,光线暗的时候自动补光,不让环境影响识别;让系统越用越聪明:收集新的设备图片...="hljs-params">(){valbatteryLevel=getCurrentBatteryLevel()//获取当前电量valisCharging=isDeviceCharging()//是不是在充电

    27410

    『互联网架构』软件架构-java日志异常(18)

    有的老铁发现异常后,直接e.printStackTrace() 打印出来堆栈就结束了,其实这样是很危险的。...如果前期对异常没有统一的处理,后期在进行统一和调整真心非常非常的困难,异常跟我们的业务逻辑耦合的非常深的。调整统一过来非常非常的难。所以在设计系统的刚开始就必须设计的完善。...是不是 进退两难,说也不是,不说也不是。 ? 场景回顾 老铁你遇到过不? 是不是总结的很经典。反正都不是我的锅,大家都是成年人了。 ? ?...不应该把他带到线上,带上生产环境下,应该在上线之前就应该抹杀掉。 系统异常设计的出发点 良好的异常信息提示,开发运维人员能快速定位 响应外部调用异常时,应能明确指明是内部异常还是调用条件不满足导至。...系统中正确的捕获这类异常,并抛出 1.方法入参进行合法性验证 对系统外部提供的接口(调用后立马验证,不要走了一段逻辑在进行验证),是必须要进行参数验证(必须) 系统内部对外外层提供接口,进行验证 工具类进行参数验证

    87320

    C语言:指针1(详细讲解)

    下面这一张图,我们可以看到a初始化为20 ,int* p指向a的地址 指针变量和地址 取地址操作符 &取地址操作符可以取出一个变量的地址 下面在32位环境下打印地址,我们可以看到取出a的地址打印 下面这张图...每个字符串后面都会有'\0','\0'也是字符串的结束标志 p加到\0停止到了最后一个元素,然后通过最后一个元素的地址减去首元素地址,就可以拿到总共有多少个元素了 指针的关系运算 野指针 野指针就像一只疯狗,不把狗栓在树上很危险...指针未初始化 指针未初始化那么指针默认就是随机值 指针越界访问 数组只有10个元素,用指针越界访问到第12个元素,就会成野指针了 指针指向的空间被释放了 下面这个可以运行,但是也是个野指针,很危险...我们可以看到p是NULL,加上这个头文件,assert失效了,如果有多个assert那么全部失效 当然我们在Release环境下执行会自动过滤assert 传值调⽤和传址调⽤ 传值调用 传值调用就是传数值到函数里...下面这代码,在函数里交换后就释放了, 传址调用 传值调用就是传地址解引⽤进行交换,通过地址进行的交换,空间释放了,不会影响地址

    24810

    安全测试工具(AST)学习笔记

    SAST 基于正则 SAST是静态应用程序交互测试,顾名思义,静态指不会实际执行代码发送请求,而是通过“推理”的方式来判断是不是有危险函数以及调用到的可能。这种形式误报率比较高。...这里就需要逆向的进行分析,从eval为危险函数,进而分析函数参数会直接传递进危险函数,从而判断ee函数为危险函数。 第二是多重调用链。...假如c函数是危险函数,a函数中调用了b,b中调用了c,在存在复杂数据流向时的处理问题,以及如果在多重调用中,存在过滤函数的情形如何去处理,都是比较复杂的点。...IAST IAST指交互式应用程序安全测试,IAST的主要原理是在代码的运行过程中发现漏洞,这里可以直接体验一下火线安全开源的IAST产品洞态https://github.com/HXSecurity/...那么就会考虑容器化单独启动测试环境,不过也就需要去单独迭代测试环境造成更多的成本,以及在各种https加密之类的场景下代理模式也会遇到一些困难。

    1.6K10

    PHP 中动态方法调用的危险

    引言 在 PHP 中,有一种常见的模式是使用动态方法调用来处理用户输入。...这种方法在路由映射或命令处理中很方便,但它隐藏着严重的风险,可能导致意外的行为、安全漏洞甚至数据丢失。 在本文中,将解释动态方法调用的潜在危险,并提供简单的修复策略,以帮助你避免这些陷阱。...危险 1: 意外执行破坏性操作 想象一下,你有一个控制器类,其中包含一个用于删除用户的 deleteUser 方法: class UserController { public function...“真实世界示例: 在一个生产环境中,用户输入 'delete' 导致调用了 delete 方法,意外删除了整个数据库表,因为方法名匹配了内部清理函数。...危险 2: 暴露隐藏的调试或内部方法 许多开发者在类中添加调试方法,如 dumpData 或 showSecrets,这些方法在开发时有用,但在生产中应该隐藏。

    14010

    好玩的图,也有点意思

    物与类聚,人以群分,没想到,没想到全世界的人还可以通过水果偏好划分,下图就是各地区对苹果和橘子的偏好分布,苹果赢的很稳。...还有大块大块的灰色区域也许是自然环境或经济条件都吃不上苹果和橘子,希望我们可以把剩下的苹果分给更多人,施予更快乐。 2,东西坏了,你第一时间怎么处理呢?...同理:我们对待故人的态度是不是和我们对待坏旧的东西一样呢?愿我们真诚待我们遇到的每一个人,彼此多一些冷静的沟通,不留半夜惊坐起的遗憾,朋友难得,故人难在。 3,背过的元素周期表,那个元素最富?...下图统计出来哪一种动物最要命,条形线的面积越大代表对应动物就越危险,越要命。我们总是对大型的鲨鱼,狼,狮子,大象,犀牛,鳄鱼存在偏见,认为它们很危险。...殊不知:最危险的是我们身边朝夕相处的人,可能一言不和,痛下杀手,反目成仇;不管多么熟悉,我们也要保持距离,保持尊重,处理好人与人的关系是一项危险而重要的挑战。

    39820

    扒掉“缓冲区溢出”的底裤

    在 32 位平台下,VC6 下默认为 1M,堆最大可以到 4G; 申请效率不同 栈由系统自动分配,速度快,但是程序员无法控制。 堆是有程序员自己分配,速度较慢,容易产生碎片,不过用起来方便。...常见的高危函数 函数 严重性 防范手段 gets() 最危险 使用 fgets(buf, size, stdin) strcpy() 很危险 改为使用 strncpy() strcat() 很危险 改为使用...strncat() sprintf() 很危险 改为使用snprintf(),或者使用精度说明符 scanf() 很危险 使用精度说明符,或自己进行解析 sscanf() 很危险 使用精度说明符,或自己进行解析...fscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 改为使用 vsnprintf(),或者使用精度说明符...vscanf() 很危险 使用精度说明符,或自己进行解析 vsscanf() 很危险 使用精度说明符,或自己进行解析 streadd() 很危险 使用精度说明符,或自己进行解析 整数溢出 宽度溢出:把一个宽度较大的操作数赋给宽度较小的操作数

    1.4K20

    缓冲区溢出

    在 32 位平台下,VC6 下默认为 1M,堆最大可以到 4G; 申请效率不同 栈由系统自动分配,速度快,但是程序员无法控制。 堆是有程序员自己分配,速度较慢,容易产生碎片,不过用起来方便。...常见的高危函数 函数 严重性 防范手段 gets() 最危险 使用 fgets(buf, size, stdin) strcpy() 很危险 改为使用 strncpy() strcat() 很危险 改为使用...strncat() sprintf() 很危险 改为使用snprintf(),或者使用精度说明符 scanf() 很危险 使用精度说明符,或自己进行解析 sscanf() 很危险 使用精度说明符,或自己进行解析...fscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 改为使用 vsnprintf(),或者使用精度说明符...vscanf() 很危险 使用精度说明符,或自己进行解析 vsscanf() 很危险 使用精度说明符,或自己进行解析 streadd() 很危险 使用精度说明符,或自己进行解析 整数溢出 宽度溢出:把一个宽度较大的操作数赋给宽度较小的操作数

    2.6K10

    C语言缓冲区溢出详解

    在 32 位平台下,VC6 下默认为 1M,堆最大可以到 4G; 申请效率不同 栈由系统自动分配,速度快,但是程序员无法控制。 堆是有程序员自己分配,速度较慢,容易产生碎片,不过用起来方便。...常见的高危函数 函数 严重性 防范手段 gets() 最危险 使用 fgets(buf, size, stdin) strcpy() 很危险 改为使用 strncpy() strcat() 很危险...改为使用 strncat() sprintf() 很危险 改为使用snprintf(),或者使用精度说明符 scanf() 很危险 使用精度说明符,或自己进行解析 sscanf() 很危险 使用精度说明符...,或自己进行解析 fscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 使用精度说明符,或自己进行解析 vfscanf() 很危险 改为使用 vsnprintf(),或者使用精度说明符...vscanf() 很危险 使用精度说明符,或自己进行解析 vsscanf() 很危险 使用精度说明符,或自己进行解析 streadd() 很危险 使用精度说明符,或自己进行解析 整数溢出 宽度溢出:

    3.1K2219

    从解决开发环境问题聊聊为什么要看源码

    究竟是不是真的只是面试时装装逼,装完继续CRUD....本篇是为什么要看源码系列的第三篇.先交代一下背景 由于公司做的是海外业务,为了方便海外同事办公.我们把公司的开发服务器(以下简称sit环境)迁移到了海外.但是这样就产生了一个问题.由于服务器在海外,运维部表示由于政策原因...类比fastDFS学习 那么接下来我们就类比一下fastDFS 从上面两个图你就可以看出.在fastDFS中,Tracker Server就类似NameSever,Storage Server就类似Broker...所以Dubbo最简单的原理就是,生产者把本机的ip地址和暴露的接口信息在zookeeper上创建节点.因为本机的ip地址就可以确定请求的url地址,接口信息可以确定请求和响应的参数.然后消费者调用接口的时候...那么我们是不是装个逼秀一波操作,改源码的逻辑,让Broker注册的地址按照我们映射的192.168.X.XXX注册上去呢? 我只想说,年轻人,你这个思想很危险啊!

    53540

    当 WAF 遇到 RASP:不是取代,而是协同 —— 一种更聪明的应用防护新思路

    如果你做安全做久了,你会发现一个很现实的现象:WAF越来越强,但攻击也越来越花;RASP越来越精,但覆盖不了全场景。那是不是意味着——WAF+RASP应该“合体”,形成体系化联防?...但问题也非常明显:①WAF只能看到HTTP流量,看不到代码执行路径攻击者的payload即使很“疑似”,只要稍微绕一绕,WAF就可能判断不出来。...攻击者改一下:展开代码语言:TXTAI代码解释%27/**/OR/**/1/**/=/**/1--或者搞点分块传输、多层编码:展开代码语言:TXTAI代码解释%25%32%37%2F%2A%2A%2FOR...大部分人对RASP的误解是:“RASP=防御内核,WAF=防御外壳”RASP的核心特点是:看得见应用的内部行为——SQL执行、文件访问、反序列化、命令执行、反射调用……但问题来了:①RASP太依赖运行环境...──┐│WAF│───低风险───>通过└─────┬───┘│高风险流量标签┌─────▼──────┐│RASP│───行为异常→阻断└─────▲──────┘└────────→正常行为→放行是不是比

    20710

    DLL注入与安全

    伊始   安全与危险是共存的。如果我们了解危险的来源以及产生的过程,对于安全防护拥有很现实的意义。   本文主要介绍dll注入的方式,意在描述危险的来源,以及危险的执行的过程,以便于我们解决危险。...危险指数高,与1相比,我们要处理掉这个开辟内存,在往下看 内存写数据,我们自身应用程序也需要写内存。 获取API函数地址的API函数,我们应用程序中也需要调用dll呢。...我们发现是我们的目标程序处于不安全的环境中,被恶意的篡改了。也就是有可能加了一层壳。也就是说,这个涉及到了,当应用程序处于危险的环境中,应用程序如何自动识别,是否加了壳,是否含有非法操作。...思考:如何解决危险环境的带来的问题。   思考1:被修改前如何做?   不让出现危险的环境,这个或许很难做到,除非客户端电脑受到全面的监控,软件使用者需要共同维护安全环境。   ...结束语 作为使用者,我们要保证我们的环境是安全的。作为软件开发者,要假想如果不处于安全环境下,该如何保证软件的使用安全。让我们共同携手维护互联网安全。

    79320

    一天学会Chrome插件开发

    开门见山:一个chrome插件会包含哪些文件及文件夹 简单说明一下: html:存放html页面 images:存放插件图标 scripts:存放js文件 styles: 存放样式...Chrome插件就是一个网站类的应用,它是用html、javascript、css组成的一个webapp; 相比于通常的webapp, Chrome插件还可以调用更多浏览器层面的api,包括书签、历史记录...(PS:插件不要随便乱装哦,很危险滴!)...content_scripts会运行 } ], // 数组,声明插件所需要的权限,这里就是很危险的存在了,想干坏事的你是不是很激动!...chrome://extensions(或者单击多功能框最右边的按钮:打开 Chrome 浏览器菜单,并选择工具(L)菜单下的扩展程序(E),进入相同的页面)。

    1.1K50

    “偷梁换柱”的库打桩机制

    编译时打桩 编译时打桩在源代码级别进行替换。我们很容易通过#define指令来完成这件事情。...实际上你也可以通过仅仅预编译来很清楚的看到其中的变化: $ gcc -I ....小结一下前面的步骤: 打桩函数内部不要打桩,即mymalloc.c中要使用原始的malloc函数,不然会造成循环调用 通过#define指令,将外部调用malloc的地方都替换为mymalloc 分开编译.../main ptr is 0x245c010 实际上,你会发现,在设置了这个环境变量的终端下,这个打桩的动作对所有程序都生效: $ ls ptr is 0x1f1a040 ptr is 0x1f1a680...但是,需要特别注意的是,采用最后一种方式打桩时,最好避免打桩函数内部还调用了打桩函数,这样会导致难以预料的后果,另外由于这种打桩机制对所有程序都有效,因此也非常危险,需要特别注意。

    1.7K20
    领券