IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

安全

共 396 篇文章

IT 2016-03-07 23:34:07 / 累计浏览 3,988

深入解析DLL劫持漏洞

这篇文章深入剖析了DLL劫持这项古老但依然实用的技术。作者从Windows DLL加载机制的核心漏洞出发,对比了Windows XP SP2前后搜索顺序的关键差异,特别是SafeDllSearchMode开启与否对“当前目录”优先级的影响。 文章重点区分了三种主流的利用场景:针对应用程序安装目录的劫持(需要写权限,常用于持久化或“白加黑”免杀)、针对文件关联的劫持(只需用户打开特定文件,如PDF,条件最简单),以及针对安装程序的劫持。通过Notepad++安装包的ProcMon抓包实例,具体展示了如何识别和利用漏洞。 此外,文章还结合了HaifeiLi关于Chrome/Edge浏览器“自动下载”漏洞的案例,拓展了DLL劫持在现代软件环境中的攻击面,并简要提及了新版Edge对DLL注入的缓解措施。整体来看,它系统梳理了从原理、挖掘(如使用ProcMon过滤)到利用的完整链条。

本机暂存
IT 2016-03-02 00:02:05 / 累计浏览 4,209

12行代码的浏览器DoS攻击分析及防御

这篇讲的是如何用12行JavaScript代码让主流浏览器甚至移动设备陷入DoS崩溃。作者从pjax技术所依赖的`history.pushState`接口切入,剖析了其工作机制:该接口允许无刷新修改URL并记录历史状态。 攻击的核心在于一个循环:代码通过上万次调用`history.pushState`,不断向浏览器历史堆栈中堆积记录。这会导致页面地址被无意义的长字符串覆盖,CPU与内存占用率在短时间内飙升至100%,最终造成Chrome、Firefox、Safari等浏览器崩溃,甚至引发iPhone重启或Android应用闪退。作者在虚拟机环境中的实测数据,清晰展示了循环次数与系统资源耗尽之间的关联。 在剖析原理的同时,文章也给出了面向用户的直接防御建议——保持安全意识,不轻易点击来源不明的链接。更深层次地,它提醒我们,现代Web API在提升体验的同时,也可能被滥用为攻击向量。开发者在使用这类接口时,需要考虑其潜在风险与边界情况。

本机暂存
IT 2016-03-01 23:44:21 / 累计浏览 2,847

看见CSRF我不怕不怕了

这是一篇典型的故障排查与实战经验分享。作者从自身接手安全项目时遇到的CSRF(跨站请求伪造)问题出发,坦诚自己之前因不理解而一直采用屏蔽或绕过的“鸵鸟策略”,最终在Django+Jinja2的实际环境中不得不直面解决。 文章首先清晰地拆解了CSRF是什么、为何危险以及其攻击原理,为后续实战奠定了理论基础。核心价值在于后半部分的解决方案详解:从Django中间件的配置原理,到在模板(包括Jinja2)中正确植入csrf_token的具体代码,再到处理AJAX异步请求时的注意事项,都给出了可操作的步骤。作者不仅讲了“怎么做”,也解释了中间件检查的“为什么”,比如必须置于SessionMiddleware之后等细节,让读者知其然也知其所以然。 对于曾对CSRF一知半解、或在Django项目中遇到同样困扰的开发者来说,这篇文章提供了从概念扫盲到落地修复的完整路径,是克服安全“踩坑”经历的一份实用参考。

本机暂存
IT 2016-03-01 13:55:18 / 累计浏览 7,658

WiFi 万能钥匙原理和危害探究

这篇讲的是,作者从一次偶然发现入手,探究了WiFi万能钥匙这类软件背后令人不安的运作逻辑与潜在风险。 他发现,即便自己从未主动使用,手机的WiFi列表也可能被软件打上“一键免费连接”的提示。分析指出,软件的核心在于一个庞大的云端数据库,它通过获取用户设备上保存的明文或弱加密密码,将每个用户的1-10个WiFi信息(如MAC地址、密码)上传汇总。凭借数亿用户,这个数据库的规模相当惊人。 连接时,软件会申请位置权限,以缓存附近WiFi信息并可能用于广告投放。它主要通过三种方式尝试联网:利用更精准的MAC地址进行密码匹配、对弱口令(如常见数字组合)进行撞库,以及可能在后台静默尝试暴力破解。 文章强调,真正的隐患不止于网速变慢。一旦网络被具备技术能力的攻击者蹭上,他们可能进一步尝试破解路由器管理密码,从而在同一局域网内实施欺骗、投毒等控制手段。作者最后给出了一些实用建议,如为访客单独设置受限的WiFi子网络,或隐藏SSID广播,来防范这种“无感知”的蹭网行为。

本机暂存
IT 2016-02-29 23:47:16 / 累计浏览 5,058

HTTPS证书生成原理和部署细节

这篇讲的是 HTTPS 是如何保障通信安全的,以及我们该如何亲手生成和部署证书。文章从一个生动的电信用户遭遇 DNS 劫持、被注入广告的案例切入,点明了在 HTTP 明文传输下隐私暴露的风险。 作者详细拆解了 HTTPS 的核心安全机制:它在 HTTP 基础上增加了加密、认证和鉴定。通过一张流程图和清晰的步骤,文章描述了客户端与服务器如何通过交换随机数并生成会话密钥(session key)来建立安全通道。同时,文章也指出了仅有非对称加密不够,必须引入受信任的第三方 CA 来签发数字证书,以防中间人攻击。 文章进一步科普了 CA 证书的三种验证等级(DV、OV、EV),并提供了实操部分:使用 OpenSSL 命令从生成密钥对、创建 CA 根证书,到最终签发服务器证书的完整流程。最后,对于个人或小型站点,文章也提到了自签名证书这一低成本解决方案。 整体上,这是一篇从原理到实践的指南,既解释了“为什么需要 HTTPS”以及“它是如何工作的”,也手把手教你“如何自己动手做”。

本机暂存
IT 2016-02-29 23:39:07 / 累计浏览 3,370

你所不知道的 HSTS

这篇讲的是HSTS(HTTP严格传输安全)这个容易被忽略但至关重要的安全机制。作者从在淘宝首页意外看到罕见的307状态码切入,揭示了HTTPS网站面临的一个实际威胁:中间人利用HTTP(80端口)的首次请求进行劫持,替换广告或注入代码。 文章核心指出,HSTS通过服务器响应头中的`Strict-Transport-Security`字段来强制浏览器使用HTTPS,能有效堵住这个缺口。一个关键细节是,HSTS触发的跳转会使用特殊的307内部重定向状态码,这与常规的302跳转不同——它不会改变请求方法(如POST不会变GET),并且跳转可以被缓存,节省了额外的请求。 同时,作者也指出了HSTS的“坑”:它对纯IP地址或非标准端口无效;最危险的是,如果HTTPS未配置好就启用了HSTS且设置了长期`max-age`,可能导致用户无法访问网站。总体而言,文章清晰阐明了HSTS的工作原理、实际价值与部署风险,对于全站HTTPS化有直接的实践参考。

本机暂存
IT 2016-02-29 23:28:09 / 累计浏览 3,437

简述 OAuth 2.0 的运作流程

这篇技术文章用一次具体的 GitHub 登录授权经历,拆解了 OAuth 2.0 认证流程的核心逻辑。 作者以“访客在网站上用 GitHub 账号留言”为场景,将复杂的认证流程分解为四个直观的步骤:网站与 GitHub 预先协商权限、用户确认授权并获取临时凭证 code、网站使用自身凭证换取最终访问令牌 access_token,最后用该令牌获取用户信息。文章通过“门票”、“盖章”、“绿卡”等生动比喻,把 Client ID/Secret、授权码、访问令牌这些抽象概念及其作用解释得非常清楚,特别是强调了每一步的安全考量——比如为何不能直接用 code 访问数据,以及令牌的权限范围与有效期管理。 对于想理解 OAuth 2.0 “为什么这么设计”以及“各环节如何衔接”的开发者来说,这篇短文提供了一个从理论到实践的清晰视角,能帮助快速建立对该协议运作机制的全局认知。

本机暂存
IT 2016-02-21 22:58:19 / 累计浏览 2,951

Linux安全之SYN攻击原理及其应对措施

这篇讲的是Linux系统面临的经典网络层攻击——SYN Flood。文章直接切入TCP协议固有的缺陷,解释了攻击者如何利用伪造的SYN包耗尽服务器的连接队列,从而瘫痪正常服务。理解了原理后,关键在于防御。文章没有停留在理论,而是给出了四种可立即操作的系统调优方案:通过调整`tcp_synack_retries`等参数减少无效等待,启用强大的SYN Cookie机制来抵御伪造包,适当扩大半连接队列容量,以及用iptables规则对异常流量进行限速。每条措施都附带了具体的`sysctl`或`iptables`命令,从内核参数到防火墙规则,覆盖了从缓解到防御的多层次思路。对于需要加固服务器网络安全的运维人员,这些直接可用的配置点很有参考价值。

本机暂存
IT 2016-02-20 16:43:41 / 累计浏览 4,575

对Linux初学者的一些建议

这篇讲的是一位经验丰富的前辈对Linux新手的“避坑指南”。作者从端正学习态度开始,强调Linux本质上是解决问题的专业工具,而非炫技的玩具。他犀利地指出了初学者常陷的误区,比如过度迷信QQ群、陷入无意义的Windows vs Linux争论,以及被低质量技术文章消耗时间。 对于最让新手头疼的发行版选择,作者的建议很实在:别空谈“哪个好”,而是根据用途来选。比如追求稳定就看CentOS系列,想尝鲜就考虑Ubuntu或Fedora。他甚至出人意料地推荐了LFS,因为跟教程一步步编译整个系统,能让人最快理解Linux的内在构造和模块关系。 在具体学习路径上,作者给出了硬核建议:一开始尽量别用桌面,通过虚拟机搭配命令行来模拟真实的服务器环境。他反复强调要珍惜每一次提问的机会,先学会独立搜索和阅读文档,再去邮件列表观察高手是如何高效提问的。这些建议的核心,是帮助新手把精力聚焦在Linux真正擅长的领域,快速构建扎实的系统认知。

本机暂存
IT 2016-02-16 22:18:10 / 累计浏览 2,102

Android安全–Dex文件格式详解

这篇讲的是 Android 系统里 Dex 文件格式的深度解析。作者从一个简单的 Java 程序生成 Dex 文件开始,聚焦分析了文件头这个核心区域的内部构造。 文章详细解读了魔数、校验码和 SHA-1 等关键字段。特别是为了确保文件安全,系统设计了双重校验机制:先用 Adler32 快速筛查文件是否损坏,再用 SHA-1 进行高精度的完整性验证。这种分层的设计思路既高效又可靠。 此外,文章还剖析了文件头中字符串索引的存储方式。作者指出,Dex 文件使用了 uleb128 变长编码来表示字符串长度,这种精巧的编码能在绝大多数情况下节省空间,是针对移动端场景的务实优化。 通过对这些底层细节的拆解,文章揭示了 Dex 文件如何兼顾执行效率与安全性。理解这些格式规范,是深入进行 Android 应用安全分析和性能调优的基础。

本机暂存
IT 2016-02-16 21:16:37 / 累计浏览 3,369

老生常谈,安全上你不该犯的错!

这篇文章聚焦于Web开发中几个老生常谈却依然常见的安全漏洞:SQL注入、XSS攻击与猜测URL攻击。作者从实际案例出发,剖析了漏洞存在的根源——核心问题都在于未对外部输入进行充分验证与处理。 对于SQL注入,文章以一段直接拼接参数的查询代码为例,展示了攻击者如何通过构造`?ID=1 OR 1=1`获取全表数据,并指出了使用ORM框架或参数化查询是根本的解决方案。针对XSS攻击,文章解释了恶意脚本如何通过URL或数据库存储窃取用户Cookie,并强调了对所有输入进行HTML编码的重要性。至于猜测URL攻击,则是通过遍历参数来越权访问数据,建议采用无规律ID、增加权限校验或添加校验字段来防范。 文章最后提出了一个关键观点:安全是一个系统工程,其首要原则是“不要相信任何输入”,需对包括URL参数、Cookie、Header在内的所有外部信息保持警惕。同时,配合使用安全扫描工具进行检测,能进一步提升系统安全性。

本机暂存
IT 2016-02-16 21:15:15 / 累计浏览 6,321

什么是DNS劫持和DNS污染?

你可能遇到过这样的怪事:输入正确的网址却跳到运营商广告页,或者明明翻了墙某些网站依然打不开。这些问题的共同根源往往是网络层面的DNS干扰。这篇技术讲解就厘清了其中两种最常见、但原理不同的手段:DNS劫持与DNS污染。 文章的核心在于对比。DNS劫持,可以理解为“结果被篡改”。它发生在DNS服务器层面,攻击者或运营商控制了服务器,直接修改了域名对应的IP地址。你的查询请求是真实的,但收到的回复是假的,导致你被引导到错误的网站。其典型症状是首次拨号上网时总会弹出运营商的门户页面。 而DNS污染,更像“过程被污染”。它利用DNS查询基于不可靠UDP协议的特点,在数据传输的途中进行拦截和伪装。当你的查询请求途经被监控的节点时,系统会提前伪造一个虚假的IP地址返回给你,根本无需你的请求到达真正的DNS服务器。这通常用于实现对特定境外网站的封锁。 因此,它们的应对策略也不同。对于DNS劫持,修改本地DNS服务器地址为公共DNS(如文章中列举的阿里DNS、114DNS等)是直接有效的解决方法。但对于工作在传输层的DNS污染,单纯更换DNS往往无效,通常需要借助VPN或远程解析等更复杂的方式。 文章不仅讲清了原理,还给出了从选择公共DNS到Windows系统下手动修改的完整操作指南,是一篇从现象认知到动手解决都很完整的实用科普。

本机暂存
IT 2016-02-16 20:47:25 / 累计浏览 2,298

也来谈谈沙箱逃逸技术

这篇讲的是作者基于过往经验,总结的一系列针对在线沙箱检测的逃逸技巧。核心观点是:沙箱因其环境特征,反而可能暴露出独特的“指纹”,而绕过检测的关键在于识别并利用这些差异。 文章首先从进程检测入手,指出直接明文比对进程名(如vmtoolsd.exe)会触发监控,而用加密后的密文进行比对则是一种有效规避。接着,作者详细列举了多种沙箱指纹特征:例如特定的Windows ProductId(如Anubis沙箱的76487-640-1457236-23837)、有规律的ComputerName(如某些沙箱环境以“xiaochen”开头)、固定的内存大小(Anubis 128M、火眼512M),以及固定的样本路径(如Comodo沙箱的C:\TEST\sample.exe),这些在不同厂商间存在明显差异。 此外,文章还探讨了如何在不联网的情况下泄露沙箱数据,比如将文件内容写入注册表,或更巧妙地将二进制数据编码到图片像素中,利用沙箱截图功能来传递信息。最后,作者总结道,逃逸的核心思路在于找到“沙箱有的而别的机器却没有的”特征,以及开发“你有的而别人没有的”绕过方法,为攻防双方提供了具体的实战视角。

本机暂存
IT 2016-02-11 23:22:08 / 累计浏览 3,573

Android安全–一次简单的脱壳Dump dex实践

这篇讲的是作者对一个加壳Android应用进行手动脱壳、还原出完整dex文件的完整实践。APK的dex文件只有1KB多,显然代码被加密保护了,真正的内容需要在运行时解密和动态加载。 作者的核心思路是“在运行时拦截解密后的代码”。他没有用一键脱壳工具,而是通过经典的调试器组合来亲手捕获。具体流程是:先部署IDA的android_server进行远程调试,通过adb和jdb完成进程附加,然后在关键的动态链接库`libdvm.so`中,找到了负责加载dex文件的`dvmDexFileOpenPartial`函数并下断点。这个函数在程序运行时会被调用,其参数就包含了内存中解密后的dex文件地址。 断点命中后,通过查看寄存器R0的值,就能在内存中看到完整的dex数据结构。最后,利用一个简单的IDC脚本,根据dex文件头部记录的文件大小信息,将这段内存区域完整地dump出来,就得到了一个可用的dex文件。 整个操作像一次精密的追踪:从静态分析发现异常,到动态调试定位关键函数,再到内存取证完成“抓捕”。它演示了一种不依赖特定脱壳工具、而是基于对Android运行时机制理解的通用思路。

本机暂存
IT 2016-02-11 22:59:35 / 累计浏览 1,860

Joomla反序列化漏洞的查漏补缺

当2015年Joomla曝出高危的反序列化漏洞时,安全社区迅速展开了分析。但这篇来自绿盟科技的技术复盘,却质疑了当时主流分析中的一个共识——“漏洞源于Joomla自定义了SESSION序列化机制”。作者通过源码分析指出,Joomla虽然注册了自定义的session处理函数,但其write方法并未改变PHP默认的序列化格式(键名+竖线+serialize值)。问题根源不在于此。 文章随后将矛头指向了更底层的问题:PHP本身的SESSION序列化处理器配置。它引用ryat的经典研究,说明当系统配置中写入SESSION(如php_serialize处理器)与读取SESSION(如php处理器)使用了不同的处理器时,会导致数据解析出错,从而触发反序列化对象注入。Joomla的漏洞正是利用了这种配置不一致。 这篇文章的价值在于“查漏补缺”,它引导读者跳出对应用层“奇技淫巧”的讨论,重新审视PHP底层机制本身可能埋下的坑。对于安全研究者和开发者而言,这是一个重要的提醒:漏洞的根源有时藏在更基础的依赖配置之中。

本机暂存
IT 2016-02-11 22:37:04 / 累计浏览 1,940

Burpsuite插件开发之RSA加解密

这篇讲的是如何为 Burpsuite 开发一个处理特定混合加密格式的插件,核心目标是解密数据包、注入测试 payload 后再加密回传,主要用于针对自定义加密通信的 APK 进行安全测试。 作者面对的数据包是典型的“RSA+DES”混合加密结构:一个 JSON 串中包含用 RSA 加密的 DES 密钥(encryptKey)和用该 DES 密钥加密的数据(data)。插件开发的核心,在于正确实现了 `InsertionPoint` 接口,以支持这种非标准格式。具体思路是,在 `getInsertionPoints` 方法中,插件会解析请求参数,识别出特定的加密参数(如参数名“c”),随后依次用配置的 RSA 私钥解密得到 DES 密钥,再用该 DES 密钥解密出明文 JSON 内容。最后,将解密后的明文 JSON 中的各个键值对分别构造为独立的注入点,从而让 Burpsuite 的扫描器和 Intruder 模块能够直接对原本不可见的加密数据内部进行模糊测试或漏洞探测。 这个插件的价值在于,它将一个需要手工逆向分析加解密流程才能进行安全测试的场景,自动化为了一个可复用、可配置的插件。实现的关键在于透彻理解目标应用的加解密协议,并利用 Burpsuite 的 `InsertionPoint` 扩展点,巧妙地将加密解密逻辑无缝嵌入到测试流程中。

本机暂存
IT 2016-02-11 14:59:15 / 累计浏览 1,937

IOS安全—阻止tweak注入hook api

这篇讲的是如何通过一种简单的编译设置来阻止iOS应用被Tweak注入和Hook。作者从网上看到一个通过添加特定Linker Flags来防止dylib注入的方法,并动手进行了验证。 他先用Theos编写测试Demo,在不添加任何flags的情况下,成功Hook了viewDidLoad方法并打印日志。随后,在Xcode的Other Linker Flags中加入`-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null`并重新编译。再次测试后,发现注入的dylib无法加载,Hook失败。通过MachOView可以看到,二进制文件中多出了一个名为`__RESTRICT/__restrict`的段。 文章深入分析了其原理:根据dyld源码,当主可执行文件包含此特定段时,系统会忽略`DYLD_INSERT_LIBRARIES`等环境变量,从而阻断了动态库注入的途径。这是一种轻量级的防护手段。然而,作者也展示了攻防的动态性——他使用010 Editor手动修改了这个段的名称,重新签名安装后,应用又能够被成功注入了。这清晰地揭示了该防护机制的核心依赖于段的特定名称,为安全研究提供了有价值的视角。

本机暂存
IT 2016-02-11 14:48:09 / 累计浏览 2,196

JAVA序列化和反序列化及漏洞补救

这篇从最近一起Joomla高危漏洞事件讲起,探讨了由此延伸出的Java序列化与反序列化的安全风险。文章首先用通俗的语言解释了什么是对象序列化——即将内存中的对象转换为可存储或传输的字节流,以及其反向过程。 重点在于,作者揭示了反序列化过程中的一个致命风险:当应用接受并反序列化外部输入时,如果缺乏检查,攻击者可构造恶意字节流,在服务器端触发任意代码执行。即便代码未直接使用危险类,只要运行环境中存在如Apache Commons Collections这样的依赖库,漏洞就可能被利用。 对此,文章给出的补救方案包括:升级Apache Commons Collections至3.2.2及以上版本,并通过配置默认关闭那些不安全的Transformer类序列化支持;同时,参考RedHat等厂商发布的针对具体产品(如JBoss)的补丁。文章还提到一个更根本的思路:通过限制JVM执行外部命令的能力,来降低未知漏洞的危害。 最后,作者点出这类问题的本质常在于反射的滥用,提醒开发者在跨网络传输序列化数据时,必须将安全性作为核心考量。

本机暂存
IT 2016-02-10 23:17:17 / 累计浏览 1,962

如何hook一个系统调用

这篇讲的是如何通过hook系统调用来定位一个隐蔽的bug。作者从一个具体问题出发:他们使用的某个库会断言socket的文件描述符必须大于0,但系统运行一段时间后这个断言会失败,意味着有人错误地关闭了标准输入(fd=0)。 面对这个难题,作者没有选择在每个close调用处手动添加日志(工作量大且易遗漏),而是利用了Linux下动态链接的一个精妙特性:`LD_PRELOAD`。文章详细展示了如何编写一个名为`my_close.c`的共享库,在其中重新定义`close`函数。这个函数会先检查传入的fd是否为0,如果是则直接让程序崩溃(coredump),否则通过`dlsym`获取并调用原始的`close`函数。 通过设置`LD_PRELOAD`环境变量指向这个自定义库,程序在运行时就会优先加载它,从而劫持所有的`close`调用。这样,一旦程序中有代码试图关闭标准输入,就能立刻被定位到。整个过程巧妙地利用了系统机制,将原本需要大范围排查的问题,转化为了一个精准的触发点,是调试动态库和大型程序时一个非常实用的技巧。

本机暂存
IT 2016-02-09 23:09:08 / 累计浏览 1,495

iOS安全—dumpdecrypted APP砸壳

这篇讲的是iOS应用逆向工程中一个关键步骤:如何给从App Store下载的加密应用“砸壳”。作者从dumpdecrypted这个工具出发,详细拆解了整个解密流程。 文章首先点明背景:商店下载的应用都带有加密壳,阻碍了class-dump或IDA这类静态分析工具的使用。核心方案分三步走:首先在本地下载并编译dumpdecrypted源码,生成一个dylib动态库;接着,通过Cycript等工具定位到目标应用的沙盒目录——因为只有沙盒内才有读写权限;最后,将生成的dylib上传至该目录并注入,启动应用即可完成解密。 其巧妙之处在于原理的简洁:通过DYLD_INSERT_LIBRARIES环境变量,强制让App加载这个自定义的dylib。动态库在初始化时便会执行dump操作,从而在运行时将解密后的二进制数据导出。整个过程清晰地展示了如何利用系统机制与沙盒环境来实现对加密应用的动态脱壳,为后续的深度分析扫清了障碍。

本机暂存