安全漏洞漫谈 【http://luoluo.cnblogs.com/】

GOOGLE HACKING 系列文章 【FreeXploiT整理收集】 本文涉及作者 swap(慕容小雨),zhaohuan(Xfocus),snipe(4ngel)信息安全的隐患-GoogleHacking原理和防范作者:zhaohuan@phack.org 来源:www.phack.org技术天地:GoogleHacking是利用Google的搜索引擎快速查找存在脆弱性的主机以及包含敏感数据的信息,最近这种以前由黑客手动进行操作的攻击手段可以通过一种新的蠕虫病毒来 阅读详情

每天,当我们打开bugtraq邮件列表,一个个的新漏洞不停的被发掘出来,让我们眼花缭乱:缓冲区溢出,Sql注入,XSS跨站脚本……,于是黑帽子们纷纷就这些公布的细节开始分析漏洞,编写攻击代码并测试之;白帽子们同样也要分析这些漏洞,并写漏洞扫描规则或者防范规则。黑帽子们的攻击代码很快就会在网上流传,脚本小子们也开始忙碌起来,他们不厌其烦的利用这些漏洞取得世界各地的具有漏洞的主机的控制权限,有时候病毒和蠕虫编写者也会来凑凑热闹,把攻击代码制作成病毒和蠕虫,在互联网上传播。

而我,作为一个应用开发工作者,似乎不那么关心这些网络安全事件,我们按照我们的规律同样在我们的圈子里面周而复始着,每天只想着,自己的这块进度能不能赶上,如何运用更好的方法论和模式来改善我们的开发过程。也许在我们看来,前面提到的那些人,不过是些义务代码审核人员。我们依旧会不假思索的把用户发送过来的字符串不加检查的拷贝到我们自己定义的变量,仍然会通过拼接字符串来构造我们的SQL查询语句来做我们的查询,也不会多考虑用户在页面里提交的内容是否会另外给我们的网页增加些特效。没有什么比能简单有效的完成自己的任务更重要的事情了,想的那么多简直是吃力不讨好的,甚至会让你为此而损失掉奖金或者领导对你的信任。

说了这么些,似乎已经背离了我想写这篇文章的主题,现在回到正题,就是安全漏洞,安全漏洞何以成为安全漏洞,透过那些纷繁复杂的技术分析,我们会发现漏洞大体都有共同的特征,第一种就是用户提交的数据被执行,第二种就是用户提交的数据导致程序流程的改变。这两个特征可以用来概括这些年来流行的主要漏洞类型,比如:缓冲区溢出漏洞就是因为用户提交的数据超长而覆盖了某些重要的指针引起程序流程的跳转从而导致用户提交的数据被执行,SQL注入漏洞的成因是把用户输入的字符串当作SQL命令来执行,XSS跨站脚本漏洞同样也是浏览器把其他用户提交的数据执行了。

于是我们发现解决安全漏洞的关键就在于阻止数据被当作代码执行,Windows 2003 Server的DEP数据执行保护就是一个很有针对性的解决方法;对于XSS漏洞,我们可以用HTML编码来把用户提交的要在浏览器显示的数据进行HTML编码,以阻止其在浏览器中执行;最后作为一个Web程序员,我稍多花点笔墨谈下SQL注入,在数据库编程中以下代码几乎已经成为一种经典的方式,在各种书籍教材里也不鲜见:

strSql  =   " SELECT * FROM [users] WHERE [uid]=' "   +  strUid  +   " ' " ;
execute(strSql);


这种方式就是通过拼接出来的SQL语句来执行查询,如果strUid是用户输入的话,这里就有了数据被当作代码执行的可能,很多文章都提出利用梳理用户输入的方式来阻止这类漏洞,下面例子把单引号过滤成T-SQL里的单引号的转义字符双单引号:

strSql  =   " SELECT * FROM [users] WHERE [uid]=' "   +  strUid.replace( " ' " " '' " +   " ' " ;
execute(strSql);


但是梳理用户输入并不符合我们的阻止数据执行的根本思想,要想用户输入的数据不被执行,我们只有彻底抛弃这种拼接SQL语句的方式,取而代之的应该是把用户输入作为参数传递给SQL语句,这也就是很多文章说用存储过程会更安全的原因,因为存储过程一般会把用户输入作为参数传递进去,可是存储过程也不是一定安全,如果你在存储过程内部进行了SQL语句拼接,就和上面的程序是一个道理了,见下面的例子:

CREATE   PROCEDURE   [ dbo ] . [ test ]
(
    
@id   int ,
    
@username   varchar ( 30 )
)
AS
DECLARE   @strSql   varchar ( 300 )
SET   @strSql   =   ' SELECT * FROM [users] WHERE [id]= '''   +   str ( @id +   '''  AND [username]= '''   +   str ( @username +   ''''
EXEC   @strSql
GO


这样的存储过程因为违反了上述的原则,所以同样是个有漏洞的存储过程。说到底,只要彻底杜绝拼接SQL语句,就可以彻底杜绝SQL注入漏洞,而有人会问普通的SQL查询怎么办,都用存储过程吗?不需要,java和.net都提供了参数式的SQL语句查询创建的方式,下面给个.NET的代码片断作为例子:

strUid  =  Request.QueryString[ " uid " ].Trim();
strSql 
=   " SELECT * FROM [users] WHERE [uid]=@uid " ;
sqlParameter 
=   new  SqlParameter( " @uid " , SqlDbType.VarChar);
sqlParameter.Value 
=  strUid;
sqlCommand.Parameters.Add(sqlParameter);
sqlDataReader 
=  sqlCommand.ExecuteReader();

 (注:java程序里请参考java.sql.PreparedStatement接口)

乍一看这里没有过滤输入好像有漏洞的样子,其实这里已经从根本上杜绝了注入的环境,不信你去试试看,:)从现在开始养成一个好的习惯吧。

西西,说是漫谈,结果谈到最后变成了防止SQL注入的古老话题,希望能对做相关开发的人一点启发,最终我们在BugTraq上面能少看见一些漏洞。这样似乎又有些厚此薄彼了,黑帽子朋友们不要拿鸡蛋砸我,同样我们也可以通过这样的特征来审核代码挖掘漏洞,当然对于这些东西,你肯定比我更在行,我就不班门弄斧了。

螺螺的blog

JavaThings:共享与Java相关的东西-Java安全漫谈笔记相关内容 JavaThings-Java安全漫谈笔记相关 《 Java安全漫谈》是我在写的一点Java学习相关的随笔,不是很严谨,也不是啥高科技。这个存储库主要是记录并整理一下,附加一些代码。 Java安全漫谈目录 人口统计 字节码: 远程字节码加载: 系统默认的defineClass加载字节码演示: 使用TemplatesImpl加载字节码演示: 使用BCEL加载字节码: 反序列化: 最简单的Transformer演示: 我简化的 ,更方便大家理解 利用TemplatesImpl构造的Transformer演示: 无InvokerTransformer的Transformer演示: 我 立即下载

相关推荐

P神-Java安全漫谈

Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制,如访问控制、类加载验证、沙箱模型等。这些机制确保代码在运行时不会执行恶意操作或访问未经授权的资源。 身份认证和访问控制:Java安全包括用户身份认证和授权机制,以确保只有经过验证的用户可以访问受限资源。常见的身份认证方式包括用户名密码验证、令牌(Token)验证和双因素认证等。 数据加密和传输安全:Java提供了丰富的加密算法和API,可用于对敏感数据进行加密,以保护数据的隐私和完整性。同时,Java还支持安全的网络传输协议,如HTTPS,以确保数据在传输过程中的安全性。 安全漏洞和漏洞修复:Java安全也涉及对已知安全漏洞的修复和防范。Java开发人员需要及时更新和升级Java平台和相关组件,以确保应用程序不受已知漏洞的影响。 安全审计和监控:Java应用程序的安全性还需要进行定期的审计和监控,以检测异常行为、潜在的攻击和安全事件。安全审计和监控工具可以帮

Java安全入门

Java安全入门

Yb_140的博客 3297

Java安全漫谈 - 03.反射篇(3)1

对于可变长参数,Java其实在编译的时候会编译成一个数组,也就是说,如下这两种写法在底层是等价的(也就不能重载):也由此,如果我们有一个数组,想传给hello函

JAVA安全之JAVA服务器安全漫谈

0x00 前言 本文主要针对JAVA服务器常见的危害较大的安全问题的成因与防护进行分析,主要为了交流和抛砖引玉。 0x01 任意文件下载 示例 以下为任意文件下载漏洞的示例。 DownloadAction为用于下载文件的servlet。 1 2 3 4 5 6 7 8 9 10 11 12 13 <code>#!html <servlet>

swordheart的博客 1213

小叶子 http://www.xiaoyezi.com

{ZHUAXIA4be5849e848103ff948d3c4942a00e92Union} 小叶子 http://www.xiaoyezi.com

fanjava 2517

JAVA安全漫谈1-8笔记

classloader就是java的类加载器,告诉虚拟机如何加载这个类。默认情况下根据类名来加载类,类名必须是完整路径{}括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!其实初始化块就是构造器的补充,初始化快是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!好处是可以提高初始化块的复用,提高整个应用的可维护性。

wfz2333的博客 1484

Java 安全研究初探

Java 安全,通常指代的是 Java Web 安全。在刚开始学习的一段时间里,面对众多的框架和名词,比如 Spring、Weblogic、EJB、AKB,等等,总感觉狗啃泰山无从下嘴。于是就有了这篇文章,旨在记录学习过程中遇到的所有问题,希望也能对像我一样的初学者有所帮助。

有价值炮灰 388

p牛java安全漫谈学习笔记(1)_反射与RMI(基础)

关于反射 获取类的⽅方法: forName 实例例化类对象的⽅方法: newInstance 获取函数的⽅方法: getMethod 执⾏行行函数的⽅方法: invoke public class TrainPrint { { System.out.printf("Empty block initial %s\n", this.getClass()); } static { System.out.printf("Static initial %s\n", TrainPrint.class); } publ

qq_35976649的博客 4364

p牛java安全漫谈学习笔记(3)_CommonsCollections1(cc1)分析

cc1链(jdk6) 简化cc1-仿 使用p牛的简化cc1进行分析: package ysoserial.payloads; import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import

qq_35976649的博客 4621

Java安全漫谈 - 01.反射篇(1)1

Java安全漫谈 - 01.反射篇(1)1

Java安全漫谈 - 02.反射篇(2)1

不过,我们有时候在写漏洞利用方法的时候,会发现使用 newInstance 总是不成功,这时候原因可能是:1. 你使用的类没有无参构造函数2. 你使用的类构造函

Java安全--篇1-反射

看了好多文章,一直没搞懂反射是什么,然后闲着无聊搜了视频,一看就懂了好多,这里浅说一下。很多顺序是跟着P神的文章走的,把自己看不懂的百度出来记录一下。

qq_64201116的博客 1015

Java安全漫谈 - 06.RMI篇(3)

这是代码审计知识星球中Java安全的第六篇文章上一篇我们详细说了如何利用codebase来加载远程类,在RMI服务端执行任意代码。那么,从原理上来讲,codebase究竟是如何传递进而被...

离别歌 1083

p牛java安全漫谈学习笔记(2)_反序列化与urldns链(基础)

关于反序列化 ysoserial下载分析地址:https://github.com/frohoff/ysoserial php反序列化主要是魔术方法,与java反序列化类似,主要是把对象进行json或者xml的序列化和反序列化。 php主要是可以控制对象的属性利用控制的对象的属性在后续代码中进行危险操作 java的话是因为很多反序列化的代码是由开发者进行开发的,再加上java的应用十分广泛,所以java的反序列化攻击面为最广的。 python的话p牛只提了一嘴,大致意思就是python反序列化是在执行基于栈

qq_35976649的博客 4587

Java的安全性(通过故事来学习)

开发人员可以使用这个系统来定义程序的安全策略,比如哪些类可以被加载和执行,哪些资源可以被访问等等。这种细粒度的安全控制可以保证程序仅仅执行它被允许的操作。有一天,他写了一个非常重要的程序,用来处理公司的财务数据。最后,Java还有一个内置的安全管理器,可以监控程序的行为并防止它们对系统造成损害。首先,Java有一个非常严格的安全模型,它可以限制代码对操作系统和硬件的访问。小明非常担心他的程序被黑客入侵,于是他开始了解Java的安全性。他惊奇地发现,Java有许多内置的安全机制,可以确保程序运行时的安全性。

pcaidong_2的专栏 187

Java安全第一篇 | 反射看这一篇就够了

什么是反射? 文章首发个人公众号 《小艾搞安全》 Java安全可以从反序列化漏洞说起,反序列化漏洞又可以从反射说起。反射是⼤多数语⾔⾥都必不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有),拿到的⽅法可以调⽤,总之通过“反射”,我们可以将Java这种静态语⾔附加上动态特性。可能说完这一两句话大家还是不知道反射是个啥玩意,现在为了让大家容易理解,先为大家提出一个需求,通过这个需要来引出反射。需求如下: 根据配置文件re.properties指定信息,创建对象并调用方法。 cl

weixin_48202759的博客 3765

java安全学习笔记(一)

JAVA审计——第一周目 JAVA基础 https://www.liaoxuefeng.com/wiki/1252599548343744/1260451488854880 Tips: 反射的一大目的就是绕过某些沙盒。 ClassLoader *** 类加载模式 classloader的层级关系 java依赖JVM的开发语言,java程序运行过程: java程序–>编译成class文件–>调用hava.lang.ClassLoader加载类字节码–>ClassLoader调用

qq_45674677的博客 2746

JAVA漫谈反序列化篇——笔记

java// 将多个良性代码组合成攻击链// 第一步:获取Runtime类// 返回Runtime.class// 第二步:获取getRuntime方法// 获取getMethod// 第三步:调用getRuntime// invoke// 第四步:执行命令// exec命令。

Lucky小小吴的小屋 681
上一篇: 不借助第三方程序 无需ie拨号 自动实现adsl拨号上网【ALLyeSNO】
下一篇: 卅年史诗!地球上出现过的CPU完全收藏 - (30) 回顾过去为的是成就未来 国货CPU也很有希望 【完】
freexploit
博客等级 码龄22年 315粉丝 778原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值