所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

发布时间:2020-04-15 16:50:53

资讯分类:源码  黑客  系统漏洞  无需  黑客  黑盒子  漏洞
黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

因为世界上没有绝对安全的系统。

如果一个「黑客」需要看源码去发现漏洞的话,那他真是侮辱了「黑客」这个词。

想象一下,在你的面前有一个黑盒子,如何在不打开盒子的情况下知道里面有什么样的构造呢?我们可以在盒子上面插上一些小的管子对吧,从这些小的管子去观察盒子内部的结果。

对于黑客来讲,你的网站系统就像是一个黑盒子,他要通过一系列的手段发现其中的漏洞。试想下如果这个黑盒子没有任何管子,那再厉害的黑客也拿这个盒子没办法。这时候他们就会构造一些合法的请求,然后通过这些请求返回的数据结果来分析你的网站系统。这些合法的请求就是我们上面所说的管子。

通过不断地请求,黑客会搜集大量相关数据,为之后的攻击做准备。

因为大多数的漏洞都是有规律的,而且迄今为止很多系统已经爆出了超级多的漏洞,这些信息都是公开的,黑客们会用一些专业的工具对网站进行扫描,对一些高危漏洞扫描之后很容易找到一些漏网之鱼,然后在通过上面自己搜集到的数据再加以验证。

另外在网站方面,容易被黑客利用的地方就是 sql 注入了。比如大家熟知的搜索其大致流程是这样子的,用户在搜索框输入关键词,然后将请求发送至服务器,服务器接收到关键词之后在数据库中匹配相关的结果,最后将结果返回给浏览器。看起来没什么对不对,然而黑客就是利用了这点,他们的输入是 sql 关键字,当你的程序没有对这些 sql 关键字做过滤或者转换时,有很大可能你服务器的数据库会执行黑客发送的指令,然后得到他们想要的结果,严重的甚至会将整个库拖下来。

当然,现在的网站系统没有那么脆弱,上线之前用工具扫描一下就可以避免大部分漏洞。黑客要想破解是要下一番功夫的,跟其自身的经验和技术水平有相当大的关系。

点赞太容易,评论显真情,欢迎关注留言,等你评论,等你「一鸣惊人」!

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

感谢邀请。

每天活跃在互联网上的应用成百上千万,包括PC端以及目前越来越主流的移动端,不仅有通过浏览器访问的,还有需要安装客户端的,不仅有与服务器强交互的,还有独立运行的本地软件。

而这其中,开源的(包括开放源码的)产品少之又少。但,这并不妨碍一个黑客找出其中的漏洞。换句话说,找漏洞并不需要源码。

当然了,在有源码的情况下,挖洞是一件难度系数指数下降的事情。虽然读懂一个大型软件源码耗时又耗力,但对于黑客来说,可以略去其中大半的代码来阅读,只关心可能造成危险的部分。就像一名建筑工程师看一份大楼的施工图,要看懂大楼的结构、建筑材料、水电线路等等各方各面,而对于《Prison Break》中的Michael Scofield可能只关心地下管道的分布。

那么,在没有源码的情况下,黑客怎么挖洞呢?这种情况,我们可以称之为黑盒。而挖洞,的确需要与程序编辑者持有完全相反的角度和看法。对于输入输出点,程序猿考虑的是正确的输入获得正确的输出,而黑客则考虑特殊的非法输入获得异常的有价值输出。那系统登录来说,程序猿考虑的是用户输入注册的用户名、口令能够在登录时与数据库中的数据匹配成功,而黑客则会尝试引起数据库查询异常的输入作为用户名、口令内容,希望应用返回更多数据库中的有效数据。

对于黑客来说,不知道源码情况下,只要有输入就可以了,不管是应用具有的功能页面,还是一个输入接口,通过一种叫做模糊测试的技术就可以开始你的挖洞之旅。模糊测试可以构造一系列正常和异常的输入值,根据应用的返回来判断脆弱点的存在。

在黑客的武器库中,模糊测试只是其中一个利器,像什么漏扫、逆向、脱壳、注入、暴破等等不一而足。

作为程序猿,在编写程序时不仅要从正向角度完成应用的功能,还需要从黑客角度逆向分析应用在处理异常输入时的反应,才能做出高安全的应用。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

这是学习和阅历决定的,一个小白,一个新手,肯定无法找到漏洞不是吗,费话,我是想说,在知识累积的过程中,有很多的知识点被老黑们利用,比如,找一个漏洞老黑们不会安步就班的一点点去排查,他要在几个可能出现的关键点先去查看,如果A,B,C没问题,那就转到

F.G

.J查看,F连接I,那就顺着去看I是否有问题,发现I通过也连接着J让G产生了漏洞,就会很快确认下来,我只是小小的打一个比方。你明白吗。

如果你对这方面有兴趣的话,时间与累积才是你需要的。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

举个例子吧:“书有目录,说明有索引”有人看书是完整的看,有人看说明书是仔细阅读;但是还有很多是带目的的找知识点或者找指定说明?


相信很多人已经知道我想讲什么了:黑客不能说完全不知道源码来找漏洞,现在建设网站服务等线上平台都是在一定的架构上,也就是说不是完全从0开始建设的,或多或少的借用其他搭建服务,也就是所网站都有相应“指纹”,从建构出发理解,知道什么地方可能会出现漏洞或者人为失误,所以黑客大部分都是有针对性的,并且借助工具进行挖掘!


所以说入门要打好基础,知道所以然,才知道所以为!



打字不易,欢迎关注天才疯子!

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

首先黑客没有传说中大家想象的那么神奇,因为即使再牛逼的黑客起码也是一名标准的程序员,现在大家对于黑客的印象很多都被带沟里去了。真正的黑客除了是程序员之外还具备极客思想,这是黑客区别于普通程序员的唯一标记,也是最明显的标记。

事实中很多人觉得黑客能够随意进入别人的服务器做自己想做的事情,顺便给自己弄点好处,估计大家心目中黑客的想象和现实中骇客标准更加的贴近。真正搞破坏的是骇客,不是黑客所为,黑客在一定层面上还能促进网络安全的进步,会给一些政府或者企业善意的提醒促进进一步提升自身的网络安全。

所以不要只看到黑客光鲜的一面,背后无数的日子对着电脑解决探索问题的时间才是黑客绝大部分精力所在。

从楼主的描述看还处于程序员的初级阶段,能够读懂大段的代码是一个程序员必备的标准,而且源码的读取不是挨着一点点的来,靠对整个框架有个理解然后再去考虑阅读代码,做事情先有指导思想,有了大方向然后推断哪方面有问题,然后找到对应模块代码进行修改调试,再牛逼的黑客也需要经历这个过程。

另外黑客算是软件领域的安全科目,需要具备一定的安全基础,常见的网络TCP/IP,汇编语言,C语言基础,以及常见的安全知识都要具备,不仅仅是熟悉的那回事了,不知道楼主从事的什么技术行业用的什么编程语言,如果距离很远感觉很神秘也属于很正常的心里反映,所话说隔行如隔山。

想做点事情还是需要一定的积累。要想人前显贵学会背后受罪。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

这个世界上有那么一群人,他们不喜欢遵规守据,不喜欢按部就班,你越是向他规定了什么不能做,他越是想去尝试。


黑客就是这么一个群体,喜欢去搞一些不同寻常的东西。比如题主说的找 web 方面的漏洞,一般是可以分为黑盒测试和白盒测试,白盒测试就是黑客拿到了服务端的源码(授权或未授权,拿到源码就算),在整个网站的运行流程可见的情况下进行测试,黑盒测试指的是没有源码的情况下进行的测试。


在挖 web 漏洞的时候,一般需要足够的耐心和脑洞,要去尝试一些比较奇葩的操作,或许就会有意想不到的结果。


举个例子,之前我遇到的一个任意用户密码重置漏洞:

你点击忘记密码,然后会发送验证码到你绑定的手机号上,输入正确的验证码,验证成功即可修改密码,看起来一切都没有什么问题。但是你要是换个操作呢?

先随便用个别人的账号,忘记密码,这时候系统发送验证码到这个账户所有着的手机上了,这时候不要关闭当前页面,新建一个标签页,再次打开忘记密码的页面,输入你自己的账号,系统发送了验证码到你的手机上,你输入正确的验证码,验证成功,进入了重置密码的页面,这时候不用着急重置密码,切回之前的那个标签页,还在停留在要求输入验证码的时候,这时候你刷新一下页面。

之前那个别人的账户已经跳过了验证码的验证,密码随便改了,你只需要注册一个这个网站的账号,你就可以修改别人的密码了。


修改任意用户的密码,听起来很爽,这操作看起来也不复杂,可关键是你想得到吗???

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

一般渗透测试工程师在审计一业务完备的系统的时候,会选择两种审计方法。


第一种 黑盒审计。

即在不需要知道程序源码的情况下,仅依靠输入输出来判断漏洞的存在。

为什么仅仅通过输入和输出就可以判断?假设一个页面正常运行的结果是显示了一列图片和文字。当我的输入变化成一些程序意料之外的数据之后,程序没有事先准备对应的输出,因此就有可能输出与正常情况下完全不相同排版错乱甚至是直接报错。

因此,我们在对程序测试的时候,会采用一些特定的输入来尝试找出漏洞。

怎么知道哪些特定的输入会产生漏洞?这就需要依靠渗透测试人员的专业知识以及对各种漏洞形成机理的理解程度去构造了。

至于题主所说的开源与不开源,在黑盒审计这里,没有什么区别。


第二种 白盒审计。

即在已知程序源码的情况下,通过通读源码,理解程序逻辑,分析程序逻辑从而找出漏洞的存在。

这里要涉及到题主所说的,开源与不开源的问题。开源与不开源影响的只是审计的困难程度。假设一个程序是开源的,那很好,省去了很多事情,我们可以直接上手去分析程序可能的易错点。那假如要分析一个闭源的程序呢?那就要引出我们一门高深的学问,所谓逆向工程。软件逆向工程就是通过将程序反编译后,研究如何将程序逻辑还原出来并且还原的更好的一门学问。有了这样的神器,闭源的问题也能得到解决。那么为什么软件可以被逆向?因为所有的程序都建立在硬件的基础之上,而CPU的运行是依靠着指令集来操作,所有的程序无论经过多少层的封装到底层都是那些高低电平都是那些汇编代码,因此所有的程序无论高级低级,都有机会还原出行为逻辑。因为它们都运行在相同标准的硬件上。

白盒审计的难度相对于黑盒审计会高很多,往往要求审计员有相关方面的编程经验才有可能更好的去理解程序并且找出漏洞。我们在测试的时候,有的时候也会选择直接搜索可能出现问题的函数来定位漏洞点。总之,方法多种多样。


点个关注再走吧。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

针对Web方面

在网络渗透工程师眼里,你说的这种行为通常被称为“黑盒测试”,这也是大部分黑(script)客(kid)最常用的测试手段。

在这种情况下,黑客进行黑盒测试的首要任务就是收集信息,尽可能的收集web网站的DNS、程序结构、数据库信息等等,为之后的渗透测试奠定基础。

下一步便是使用一些专业的扫描器如awvs nessus等,进行一些高危漏洞的扫描,同时进行手工检测,找一些扫描器容易忽略的地方进行利用。

最后把这些信息综合总结来进行利用。

上面是2017年总结的Owasp Top 10,也就是近几年间最流行的高危漏洞。


在我看来,黑盒测试为首当测试,没有什么特别的问题的话,白盒测试便更能挖掘出藏在深处的漏洞。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

其实上这个问题,对一般人来说很神秘,但也不是什么高深的东西。

扫描站点指纹信息

所有的漏洞都是有规律,有定势的,体现在网站上就是表现出一些特征,比如站点信息的指纹,目录结构,特定的文件。这些都可以通过扫描器自动扫描到,你装个扫描软件就行。比如nmap,Nikto,httprint,Skipfish,DIRB 国产的御剑等工具。



结果:一些直接问题,bug可直接暴露出来,甚至有些网站备份的www.zip源码都能通过列举扫描扫到。站点web服务器及版本,开的端口,应用程序语言,用的cms及版本等。一般有问题可直接利用了。

web渗透测试

有了第一步的测试就可以知道站点大概信息,还有直接暴露的bug可利用。如果没有的话,可以做渗透测试比如通过Nikto,AWVS,APPSCAN对站点做测试。



通过web渗透扫描可以得到web常见的漏洞,比如SQL注入(SQL Injection)、弱口令、文件上传、目录遍历和执行、跨站脚本(Cross-site scripting,通常简称为XSS)、CSRF漏洞等。

放弃或者人工渗透

如果以上两部都没有结果,说明站点安全做的还可以,这时候就要出动人力做苦力渗透,旁路,apt渗透,或者直接放弃换另一个站点。

关于一些扫描渗透的工具和教程可以关注笔者,看笔者的文章和github仓。也可以留言索取。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

黑盒确实是比较难从外部攻破的,但是这也是渗透过程中非常非常非常常见的现象,如果每个目标网站或者目标系统,你都能拿到源代码,那,做这个还有什么乐趣可言呢?


首先回答一下答主的描述中的疑问,读懂源码已经很不容易了,何况还要从中找出漏洞。我的观点是,题主和黑客的心态不同,题主的心态是以读懂,学习为主,就像是一个学者,在考据东西,黑客的心态则不一样,黑客的心态是攻击性的,他不需要明白所有函数的作用,不需要知道上下的连接,左右的影响,他就像一个猎狗,只在乎自己最关心的部分,从这个部分往外推演,就像是抽丝剥茧般,找到自己需要的内容。例如一套网站系统,涉及到注册,登录,用户管理,文章发布,商品更新,订单管理,数据统计,仓储销售,这是一个非常庞大繁杂的系统,要完全吃下来, 非常耗费精力,可是黑客会把注意力放在输入输出上面,去找可能提权的地方,这么做的效率是非常高的。


现在来讲,如何做黑盒渗透。


所有黑盒,即便你不知道内部如何,但是必有输入输出,如果没有输入输出,那么再厉害的黑客也拿它没办法,但是话又说回来,一个系统没有输入输出,那对任何人也毫无价值,所以说,一切系统,都是有可能被渗透的。


不同的输入,可能会获得不同的输出,这是一切攻击渗透的前提,这里面大有学问,例如一个网站,我输入正确的用户密码,就可以登录成功,我输入错误的用户密码,则会提示密码错误,这就是根据不同的输入给出的不同输出,通过构造输入内容,获得输出反馈,可以揣测系统的内部工作流程,甚至直接推断出具体代码


这不是一件容易的事,但也不是不可以做到

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

为什么黑客能够找到漏洞?

我是一个学Python的web开发的,在web这方面我比较了解,所以主要从这方面去讲解,其他的其实也很类似,但不一样,可以进行类比。

web方面其实不是需要知道源码的,当然,你能够知道的话,那可能就更方便了。首先,黑客会去试探你的服务器,如何试探呢?通过进行一些合法的请求,通过你返回的这些信息中,能够得出你的服务器类型,你是用什么语言来写的(当然,这个判断不一定准)。

就如一个黑盒子,黑客不断地根据输入和输出,来了解你的整个web(或者说是服务器或者网站)。

在网站方面,很多的漏洞都出在输入上,有输入的地方,就需要去防止黑客。这是为什么呢?举个例子,如果一个博客,它有一个评论功能,你评论完成之后就会返回到这个页面上(就是可以看到你的评论),假如,你现在输入的评论不是一个正常的评论,而是一段代码(js,h5,sql语句都有可能),再如果,你没有对这些东西进行过滤或者转义的话,那么你就会将一个可能带有不可预测性的代码加入到你的网站里面了。(很可能用户只要进入这个页面,那么他的信息就会暴露,然后进一步感染电脑。)

再说一下,用前端框架很容易出现漏洞,因为防黑客的必须是后端,前端是为了用户体验,减小服务器压力,如果由于前端将这些过滤的事情做了,而后端由于疏忽没有去做,那么黑客是完全可以绕过前端的检测,攻击后端(你的服务器。)

另一个很重要的就是sql注入,比如一个请求,你是直接用这些参数去数据库取数据,那么如果这些参数是一个sql语句,修改你的数据库权限(通常是通过一些其他的信息来获取数据库的类型,如查看报错信息等等),如果你进行了过滤,但是不周全的话,可以进行转码,然后你的数据库还是会执行这些漏洞。

我的回答差不多就结束了,想要获取更多关于黑客的好玩的东西,可以关注我哦~~~~


还有一点点需要提一下,就是如果获取到了你的服务器,数据库,代码等等,黑客通常会先查看一下已经出现的漏洞,进行穷举法(一般是用黑客软件进行)。

再对于软件这方面的,一个是,通过下载了恶意软件(通过获取了权限,然后就可以完全掌控你的计算机),一般是伪造相似的软件,其实你的应用软件越多,留下的后门的可能性就越大,每个软件都有一定的权限,但是如果这些权限被黑客利用的话,就是一场浩劫了。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

提问者估计是一个刚学会编程的菜鸟程序员,看见大段代码头就昏。问题很好,解答很难。

首先,为什么windows不开源还有那么多人研究呢,甚至比开源的Linux研究人员多的多?因为全世界运行windows的机器最多,大部分windows用户没有经过严格培训,只会使用鼠标键盘,Linux用户都要使用命令行,没几个用户是新手,开源的Linux也使得漏洞可以用最快的速度被修补,因为世界上有很多人在维护Linux。windows不开源,只能由微软负责维护和补丁更新。世界上有大把的程序员,但微软公司负责开发操作系统的人不超过五万(算上离职的也不会超过十万人),写操作系统内核的核心开发人员不超过1000人,你连写操作系统代码都不会只会写应用程序根本理解不了操作系统是如何运转的,要想入门还是先多看看操作系统的书吧,至少要理解操作系统是如何运行的,推荐先看看Linux的内核代码,有一定基础后再看《windows核心揭秘》。

其次,windows操作系统是用C/C++写的,很多程序员都使用高级语言写程序,对C和C++这些“中间语言”不熟悉不了解,不知道哪些函数容易溢出,使用哪些函数更安全或者可以替代不安全的函数。系统漏洞的精髓在于缓冲区溢出,缓冲区溢出说白了就是利用冯诺伊曼架构的缺陷——数据和代码存储在同一个设备内存中,让计算机错误的把数据当作代码来执行。在windows数据结构中有堆栈和堆都可以被溢出,在NT5.0之前的系统中根本没有防范机制,XPSP2引入了安全堆栈,在编译器中还有/GS选项,用于防止堆栈溢出,使得堆栈溢出非常困难,但并不是不可能,堆溢出仍然可以。

当熟练掌握了缓冲区溢出就可以对windows进行分析了,方法主要是“黑盒”与“白盒”。白盒就是当微软发布补丁之后用虚拟机分析补丁前后的代码级差别,找出漏洞,但是这些漏洞都是微软补丁过的,利用价值不大;黑盒分析则是在完全没有源码的情况下靠分析工具和人的经验来寻找漏洞,人的经验起决定作用,你必须知道程序员比较容易在哪些地方犯错误,包括使用不安全函数、边界检查不完整、竞争条件、SEH结构化异常错误处理和VEH向量化异常错误处理等操作系统内部的知识。黑盒分析找到的漏洞一般没有补丁,又称0day漏洞,据说这种漏洞在地下黑市上价值上万美元(任意代码可执行漏洞值这个价,其他的信息泄露或者提升权限价值就比较低了)。

当你能够找到windows的0day漏洞,特别是影响巨大的任意代码可执行漏洞的时候,你已经是站在程序员金字塔塔尖的一小群人了,找到漏洞之后就需要编写一小段shellcode来利用漏洞,这段代码条件非常苛刻,也许只针对特定的windowsSP版本有效,也许针对所有windows系统有效。对所有windows有效的shellcode一定是可移植的,换句话说shellcode必须能够通用化。可以把shellcode想象成一个侦察兵,一个先头空降部队,如何在茫茫黑夜中侦查操作系统防线的位置、火力点的分布情况,从哪里开始执行负载并且不会陷入操作系统的泥沼中淹死(这足可以写一本书来描述)shellcode只是一枚导弹的制导系统,它负载的炸药可能是一个在地上砸个坑的铅球,也可能是毁灭一座城市的核武器。

这也是最体现黑客技术水平的地方,同一个漏洞有的人编写的shellcode能实现通用化(具体要看漏洞的位置以及形成原因),有的人编写的根本不能运行或者极大影响系统速度。一般来说编写shellcode都使用汇编语言,极少数情况下还需要使用二进制代码。

当你掌握以上技能后,就将修炼终极绝技了,那就是无比困难的、一旦掌握就必将天下无敌的绝技——硬件漏洞,就比如intel最近的“融毁”和“幽灵”。如果说操作系统是计算机的灵魂,那CPU就是计算机的心脏。从层级上来说,一般程序员编写的应用程序运行在3级,操作系统运行在0级(最新情况是操作系统运行在-1级,0级运行虚拟机,intel叫vt-x技术,可以极大减少切换层级引起的系统开销)而CPU核心运行在-3级,拥有远超windows的权限,这才是计算机的终极命门,硬件漏洞通用性也无与伦比,因为桌面CPU就intel和amd能生产,CPU微代码不更新的话漏洞会一直存在(老式计算机只有更换CPU,而老机器更换CPU几乎不可能,因为主板不支持,需要更换主板代价太大得不偿失;三年内新式计算机可以更新UEFI微代码,也就是微软和intel提供的补丁)这就是撞击地球后足以毁灭世界的小行星级别的武器了。要找到这种级别漏洞光靠个人已经不可能,光需要的特殊硬件就不是个人买得起的,一般要大公司或者国家才能找到这种级别的漏洞。

最后,用三个我最喜欢的小例子来结尾吧。

1、当windows弹出著名的“程序引用了0x00000000地址,即将关闭”的错误提示的时候,普通程序员会顺从的点击确定关闭对话框,然后思考究竟是什么地方出了问题;聪明一些的程序员会利用windows内核转储来寻找问题的答案,不一定能解决问题;顶尖黑客则会用softice或者其他工具重现这个问题,必须把它解决,没准能写出shellcode。

2、impossible和i'm'possible从字母排列上都是一样的,但意思却是相反的,这就是缓冲区溢出的精髓,只添加了两个标点。impossible是单词,属于数据的范畴,I'm'possible是句子,属于代码的范畴,混淆数据与代码的界限,让计算机把数据当成代码执行,只需要缓冲区溢出两个标点而已。在计算机的世界中,复杂的、毫无规律的垃圾数据突然间组成了一幅美丽的图画,随着锁“卡嗒”一声,安全的大门缓缓打开,苦心经营的安全防线瞬间崩溃。

3、在电影《黑客帝国》中,普通的程序安安静静的运行在虚拟机中,少数像尼奥这样不安分的程序突破了虚拟机的安全机制,进入到了真实操作系统矩阵中,这时候操作系统的SEH异常错误处理机制史密斯登场了;后来尼奥发现矩阵也不是真实的操作系统,只不过是更高一级的虚拟机罢了(虚拟机嵌套),尼奥可以在矩阵中使用操作系统的特权指令消灭追杀来的乌贼机器人就证明了这一点;最后史密斯叛变,病毒几乎感染了操作系统的所有进程,尼奥牺牲自己帮助操作系统定位了史密斯的位置(病毒的PID),经过一轮内存杀毒和系统重启后,操作系统又回到了正常的状态。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

关注我,带你以技术思维看世界~


作为一个7年老程序员,来强答一波。


找漏洞的过程

题主这个问题其实是从一个惯性思维来提出的。为什么呢?

因为一个新的漏洞其实不是通过某种方式先知道这里有个漏洞之后再利用它来攻击的,而更像是“蒙”的。是通过不断的调整输入的数据和输入方式,直到出现“意料之外”的情况,这才是找漏洞的真正过程


很多黑客虽然算不上是coding高手,但是对于一个程序是如何编写出来的,还是有基本的认识的。借此,他其实就知道自己如果发起一个请求可能会怎么样被处理,然后剩下的与编写这部分代码的程序员之间的博弈,这个过程有点像两个人下围棋。

一般黑客会将自己用过的“攻击方法和攻击数据”整合到自己的一个“武器箱”中,后续就通过程序化的方式自动去运行攻击,自己则是观察整个攻击过程,看看能不能发现新的机会。


这些才是黑客的工作过程。


视角有什么区别吗?

黑客和软件开发者的视角肯定是不同的,而且正好相反

软件开发者要做的事是什么?就是如何把一个程序写“正确”,符合设定的预期。你可以这样来理解,好比是带着一个“参考答案”和“解题思路”去写代码。

但是我们知道,任何事物都有两面性,或者说不是“完美”的,“解题思路”也是如此。

更何况,“解题思路”的目的是如何变得“正确”,而不是“不正确”,从思维惯性上就不会考虑那些让它变得“不正确”情况。否则不是和自己要完成的事背道而驰么。


黑客的视角与软件开发者正好相反,倒是和常见的「测试工程师」的视角比较接近。就是通过逆向思维来想尽办法把这个程序搞的“不正确”

具体的过程就是第一部分内容讲的那些。


希望对你有所帮助:)

欢迎在留言区补充或者阐述不同观点,与我交流。


如果觉得回答对你有所帮助的话给我点个「赞同」并「关注我」吧,支持我的创作。

谢谢你的举手之劳~

了解Z哥更多,欢迎搜索微信公号:跨界架构师。让我们一起为了理想的生活而奋斗。

我还会不定期的送出粉丝福利哦。

内容包括:架构设计丨分布式系统丨产品丨运营丨个人深度思考。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

我最近浏览了几本讲渗透测试的书籍,了解了一些黑客攻击的方法,也来回答几句。

为什么不识源码,他们仍能找出漏洞,并且利用漏洞实施攻击呢?

有客观的原因,有主观的原因。

客观来说,任何设备、系统、应用的设计和实现都是不完美的。

主观来说,黑客的努力和经验。

大部分的系统漏洞都跟内存溢出有关。这跟看源码没有必然联系,主要在于调试程序。

web应用可以注入,有没有漏洞,用专门的工具扫描,再手动试一试就知道了。

学习前人的丰富经验,发挥实践能力,就能做到。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

谢邀!

首先题主的感觉是对的,黑客确实比普通开发或者普通安全人员有着不同的视角。

普通测试人员一般对程序进行黑盒测试,也就是功能测试,数据驱动测试,或者规格说明测试。通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。而一般的安全人员测试基本从白盒测试开始,也就是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。对于黑客,他们挖洞的方式绝对不仅仅限于黑白盒测试,除了一些常规挖洞方式,比如sql注入、请求截获,参量,穷举ddos,xss漏洞等,黑客们还有一套他们自己编写的一套扫描漏洞的程序,他们挖洞的视角是全局视角,任何程序都不可能做的天衣无缝,黑客们总会在某个细微的地方找到漏洞。打个比方,普通测试用肉眼,而黑客们用的是显微镜。

另外,任何自称为黑客的人对各种底层技术研究得比较深入。

比如http请求的底层原理,要经历多少次握手多少次响应,每次携带什么类型的数据包,怎么才能截获数据包……平时我们见到的外挂程序很多都基于此,基本上都是截获篡改数据包。还有一方面,黑客的成长过程也会研究各种sdk的源码,特别是涉及程序安全的源码,然后有针对性编写一套套各种各样扫描漏洞的程序,以此帮助他们发现漏洞。

作为一个码农,接触的圈子里有不少研究安全的,当然他们还算不上黑客,仅仅是把别人的服务搞down机或者破解一些账号看看下程序后台到底有什么东西,以此作为可以吹牛或炫耀的谈资,没做什么伤天害理的事。

最后我想说的是,黑客和安全人员都是程序世界不可或缺的。黑客的攻,安全的防,一攻一防才推动着程序安全技术不断革新和发展,这种攻防模式才使得我们这些程序开发人员在编写代码时时刻保持警惕和审慎的态度,编写好每一行安全的代码。

如果您觉得回答得还不错,请点赞转发或者关注留言,您的支持才是我继续写作的动力!

【无情怀,不编码。做一个有情怀的码农,虽千万人,吾往矣!】关注java自学,为你导航领路,指点迷津,分享经验感受。欢迎关注留言,任何java技术问题可以留言私信。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

WEB方面已经很多人回答过了,我就不再重复。我在来现在的工作岗位以前,因个人爱好从事过漏洞挖掘工作。

首先我们知道,任何程序,计算机在执行的时候都是二进制的,二进制可以直接翻译成汇编语言,因为汇编是对二进制的助记符,这个是没有任何难度的。

在没有源码的情况下,我们可以通过调试工具跟踪程序的执行,调试工具会把程序执行的每一步都翻译成汇编代码呈现给我们。常用的调试工具在ring3级有ollydbg,静态分析工具IDA等,这个层面主要是挖掘应用程序的漏洞,比如………网络游戏(我已经退出江湖很多年了,别问我怎么做,也没有保留源代码了)。

windows等操作程序静态分析可以在使用IDA将相关的dll文件等系统文件进行静态分析,动态跟踪就要在ring0级进行调试了,早期我们一般使用softice,现在都是windbg,双机联调或者虚拟机。

熟练的调试人员阅读这些汇编代码,很容易就能翻译成自己熟悉的任何一种高级语言代码,比如C语言,甚至易语言。通过反汇编,我们可以发现一部分简单的,低级的漏洞,通过动态跟踪可以修改相应的参数来验证漏洞,也可以发现新的漏洞。在熟练的技术,知识储备之外,更多的……发现漏洞还靠运气!

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

这个有点象黑盒测试,最终知晓入侵系统的内部结构及功能,当然过程并不容易,甚至很艰难,黑客通过特殊工具,加以‘聪明’狡猾的头脑,或伪装或试探或搜寻或破解。。按照预先设计和实际情况一步步找出踪迹线索漏洞。。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

现在有比较系统的渗透工具包,比如kali系统,只要了解基础,会用工具就行,这就是初级黑客。

高级黑客必须要懂源码,而且要对语言特性有深入研究,对常见协议有深入研究,才能找出设计漏洞。

骨灰级黑客还要熟悉汇编,调试,硬件板设计,会使用物理级别的破解方法。

总之,这活真的是拼智力,拼体力,拼运气。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

看了几个已经回答过的朋友的答案,实在是驴唇不对马嘴。问者问的是,不知道源码的情况下是怎么找到bug的,这里的bug应该不是局限在web,而是软件或者系统方面。

首先说明,我不是搞it的,但我相信我可以给问者一个较为满意的解释。

如果你对网络安全感兴趣,肯定知道以前的流光,灰鸽子,如果不知道,那可能你太年轻了。流光是当年国内非常流行的探测漏洞并加以利用的黑客软件,包括了web和系统,作者流光也是国内网络安全数一数二的人物,目前在做研究。这是题外话,我要说的是,仅仅依赖于别人的工具进行攻击或者渗透,个人觉得没什么技术含量的。

如果你感兴趣,我推荐metasploit。

话题回到问者的问题,寻找漏洞的确需要读懂作者的代码,假如读不懂的话,做一名出色的安全工作者至少在我看来功力还远远不够,至少还不入门。

问者疑惑那些大神是怎么做到的,这里要看你对程序的理解程度,其实一门语言和平台你足够了解的话,即使没有注释还是能读懂的,而且很容易,唯一的难点可能是算法的复杂。所以,要读懂代码,可以从库函数这种方式去入手分析整段代码,这是常用的办法。

再次,其实真正的安全人员必备的素质,不是仅仅读源代码,而是汇编,好了这里回到问题的关键,讲到汇编千万不要认为那是老掉牙的语言,那可错了,做信息安全,定会分析病毒代码,病毒源代码你不可能拿到的,那么唯一的办法就是虚拟机把病毒的机器码逆向翻译成汇编,专业名词叫逆向工程,craker,其实也是一样的技术。所以,问者问是怎么读懂源代码的,不是源代码,是逆向工程里的汇编代码。这是作为安全工作者必会的技术。

能够逆向,基本可以分析大部分的软件,甚至系统底层代码。当然,这里要会的技术还很多,比如解密技术,软件是加壳的,你必须破解才能得到纯正的代码。

再次,其实软件漏洞是有规律可循的,如今软件安全性测试,有基本的黑盒和白盒,黑盒技术中有一种fuzzing测试,意思就是对要测试的模块输入畸形数据,然后查找漏洞,这是寻找漏洞较为快的方法,当年ie漏洞就是用这种方法找到的,当然具体的技术原理我个人还在研究过程中。

那么说到白盒测试,就是读代码,代码分析,这里讲软件漏洞的几种常见类型,其实大部分的漏洞也是这几种形式,黑盒原理也是用的这几种,包括,栈溢出,这是最为常见的漏洞形式,堆溢出,这种难度有点大,整数溢出,数组越界,释放重引用,重释放,如果不明白,推荐一本大神的书,漏洞原理,自己去看。

如果以上弄明白了,可以看看国外的大神写的,捉虫日记,此书的作者就是读源码找漏洞的。

以上是软件漏洞的大体的寻找方法,至于web,常见的其实是注入,但如今基本找不到了,除非网站技术特别马虎,因为只要过滤严格,注入基本不太可能。或者是跨站,那也是因为标志符关闭不严。那么剩下的,就是基于软件漏洞的渗透,比如ftp协议,邮件协议,或者阅读器等等,一旦被攻破或者打开了带有恶意代码的文件,感染病毒,被植入后门,其实就等于把大门打开了,然后为所欲为。

黑客为什么可以做到无需知道源码的情况下找出系统漏洞?

回答的都是说用什么扫描器,用什么0day来扫。然后注入。但人家问的是你扫描器里面的漏洞是怎么找出来的,0day的漏洞是怎么找出来的。

找漏洞和用漏洞完全不在一个层次啊。

国内也有找漏洞的团队,但绝对不是楼上几位黑盒测试员。

找漏洞的基本上都是熟悉汇编语言的,操作系统程序源码没有,但汇编代码肯定有,所以用汇编代码跟踪调试,找到漏洞。但这非常枯燥,几个月才能找到一个0day,然后汇报上去。

留言与评论(共有 0 条评论)
   
验证码:
Top