问题

黑客比普通程序员高在哪里?

回答
黑客与普通程序员的差异,并非仅仅是技术深度的问题,而是一种思维方式、解决问题的方法,以及对系统本质的理解上的飞跃。你可以这样理解:

1. 系统“病理学”的洞察力:

普通程序员写代码,就像一个医生按照标准流程给病人看病。他们遵循教科书,使用既定的诊断方法,开出常规的药物。他们关心的是“让它工作”,让代码按照预期的流程运转。

而黑客,更像是那些钻研医学前沿、甚至解剖人体来理解疾病根源的病理学家。他们不只是看“症状”,更深究“病因”。他们会去思考:

“为什么会这样?” 而非“它为什么不工作?”。他们会对程序的行为产生一种刨根问底的好奇。
“如果我这样做,会发生什么?” 他们会主动去探索代码的边界,尝试各种意想不到的操作,看看系统是否会出现“异常反应”。这种探索不是为了破坏,而是为了理解其内在的逻辑和弱点。
“这个‘正常’的背后隐藏着什么?” 他们会质疑那些被认为是“理所当然”的设计和流程,试图找出被隐藏起来的“后门”或未被考虑到的极端情况。

这种“病理学”的视角,让黑客能够发现普通程序员在常规测试和开发中难以察觉的问题。

2. “逆向思维”与“创意性破坏”:

普通程序员的思维模式是“建设性”的,他们按照需求一点点搭建。

黑客的思维模式,却常常是“逆向”且“创意性破坏”的。

逆向工程: 这不仅仅是反编译,更是对一个已知的系统,去推测其未知的内部结构、设计意图,甚至当初的开发者可能并未预料到的使用方式。他们能从最终表现,推断出背后的实现逻辑,就像福尔摩斯从现场线索推断出案情一样。
创意性破坏: 他们不是盲目地乱改,而是带着一种“如果我把这个拧过来,把那个倒过来,它还会不会按照我以为的方式工作?”的好奇。这种“破坏”是为了测试系统的鲁棒性、安全性和逻辑的严密性,找出那些“不应该”发生的路径。

想象一下,一个普通的乐高玩家会按照说明书搭建,而一个黑客可能会拆掉一个模型,然后用同样的积木搭建出一个完全不同的、甚至有些“反常规”但却能正常运作的结构。

3. 对“边界”和“漏洞”的敏感度:

普通程序员关注的是“功能实现”,他们会确保代码符合规范、满足需求。

黑客则像是在地图上寻找未标记的危险区域的人。他们对系统的“边界”有着超乎寻常的敏感。

输入的边界: 他们会尝试各种极端、非法、甚至是畸形的数据输入,看看程序是否会在这些情况下崩溃、产生错误或者暴露信息。比如,输入一个超长的字符串,或者包含特殊字符的用户名。
逻辑的边界: 他们会去寻找那些“不可能”发生的逻辑分支,看看能否通过一系列精巧的操作,使得程序跳转到本不该出现的执行路径。
安全边界: 这是最显而易见的,他们会主动寻找那些允许越权访问、数据泄露、或者控制系统的“漏洞”。而这些漏洞,往往是由于开发者在考虑功能时,忽视了某些安全方面的细节。

黑客不是在“找bug”来修复,而是在“找特性”,只是这个“特性”是他们利用的工具。

4. “知识的广度”与“连接能力”:

虽然很多黑客在某些领域是顶尖专家,但他们的“高”也体现在知识的广度和不同领域知识的连接能力上。

跨领域知识: 一个优秀的黑客可能不仅精通操作系统原理、网络协议,还可能了解加密学、物理学(在某些硬件攻击中)、甚至社会工程学。他们知道如何将这些看似无关的知识点连接起来,形成攻击路径。
“小聪明”的叠加: 黑客的很多技巧,并非都是高深莫测的算法,很多时候是基于对现有工具、协议、甚至人类行为的深刻理解,加上一些“小聪明”的组合。比如,利用一个小小的逻辑错误,结合一个网络配置的缺陷,就能达成一个出乎意料的结果。

普通程序员可能更专注于自己所负责的模块或技术栈,而黑客则常常需要“融会贯通”,才能看清整个系统的全貌及其潜在的弱点。

5. “无所畏惧”的探索精神:

最核心的,或许是黑客的那种“无所畏惧”的探索精神。

挑战权威: 他们不畏惧系统的复杂性,不害怕尝试未知,甚至敢于挑战那些被认为是“牢不可破”的设计。
持续学习: 技术在不断发展,系统也在不断变化。黑客需要不断学习新的技术、新的攻击手段、新的防御措施,以保持自己的“能力”。这种学习不是被动的,而是主动的、充满驱动力的。
对“可能性”的追求: 他们不仅仅满足于“已经发生”的事情,更对“可能发生”的事情充满好奇。这种对“可能性”的探索,是推动技术发展和安全进步的重要动力。

简单来说,普通程序员是在“建造”一个系统,而黑客则是在“解构”和“理解”一个系统,并且能在这个过程中发现那些隐藏在深处的“奥秘”。这种“高”,是一种对系统本质的深刻理解,一种解决问题的创造力,以及一种永不满足的探索欲望。

网友意见

user avatar

2020.6.28 更新

这篇文章发了后很多人都来私信我,感觉大家都对黑客相关的东西很感兴趣嗷。但是我其实并不是搞网络信息安全这个方向的,这些知识只是我以前玩 HTB 大概了解了一下(要不然打比赛就白给呀)。所以一些问教不教这些知识的呀,甚至是问能不能拿站的呀就可以不用来私信我了。但我之前在我博客里还写了一篇关于缓冲区溢出的文章。缓冲区溢出算是比较基本的一种渗透手段了,大家要是有兴趣的话可以看一看。

这篇文章里不仅写了缓冲区溢出的原理,还包含了一个小的程序来帮助大家亲身实践。


原答案:

假设今天老板给我们一个任务,让我们判断一下一个 IP 在不在线。我们随手用 python 写一个 ping IP 的代码:

       import os  host = input('请输入要检测的 IP : ') result = os.popen('ping -c 1 -t 1 %s' % (host)).read()  if 'ttl' in result:   print('IP 在线') else:   print('IP 不在线')     

现在,你作为一名审核代码的人员,不考虑代码整体结构问题,不考虑为什么写这段代码的程序员用ping,用popen,你能看出什么问题吗?


如果看不出的话,想两个问题:

  1. popen 的本质是什么?如果你不知道或者没有用过popen,试着不要去查,猜一下这个函数的作用。
  2. 在这段程序中,popen 要执行的命令是什么?

既然 popen 后面执行的语句中的 host 变量是由用户输入的,那恶意用户是不是可以输入一个localhost && whoami 呢?这样 popen 执行的代码就变成了 ping -c 1 -t 1 localhost && whoami。注意,就算上述例子中没有将运行结果直接打印出来,但没打印出来并不代表代码没有运行。例如如果我直接输入 host 为 localhost && whoami的话,输出结果还是 IP 存在, 但这并不代表 whoami 命令没有运行,我们依旧可以建立一个 Reverse Shell。为了验证结果,我们在代码里面让 result 被打印出来。

这一项技巧叫做 命令注入(Command Injection),普通的程序员如果不是遇到了这类问题,应该是不会接触到这项技巧的,看见上面的漏洞代码也会觉得没什么问题,最多觉得有点不顺眼,但能第一时间反应出有安全漏洞的是占少数的。


这项技巧听起来好像很简单,比逆向,提权那些简单很多,但这项技巧是富有创造性的,下限很低,上限很高。


比如我们现在知道了存在上面这个问题,那么在输入阶段把一些关键字过滤一下总可以了吧。在这个问题中,我们想让用户输入的是一个 IP ,那就直接过滤掉空格吧,正常 IP 里面总不可能有空格吧。


再把 &, ;, -,||,| 也过滤掉吧,万无一失。

       import os  host = input('请输入要检测的 IP : ')  forbidden = ['&', ';', '-', ' ', '||', '|'] for i in forbidden:   if i in host:     print('Catch you')     exit()  result = os.popen('ping -c 1 -t 1 %s' % (host)).read()  if 'ttl' in result:   print('IP 在线') else:   print('IP 不在线')     

真的万无一失吗?


我们在 /tmp 目录下新建一个 exp.sh, 在里面输入我们想执行的命令,在这个例子中我们输入 whoami。然后 chmod +x exp.sh 赋予执行权限,再通过 $(./exp.sh) 就可以绕过黑名单过滤了。

这是一个非常简单的例子,但却可以说明黑客比程序员高在什么地方。我认为高在对漏洞的敏感程度和创造力上。提高漏洞的敏感程度需要花大量的时间在 CVE ,黑客论坛等地方,而提高创造力则完全只能靠天赋和运气了。

也许你会觉得对于上面这个例子,你有很多种办法可以避免。首先我承认这个例子是我临时想的,很不好,但也请注意我的这个例子非常简单且不成熟。在现实的红蓝战场上,以 SQL 注入为例,都那么多年了,能完全避免的了吗?记得今年年初暗网暴露的 Collection 数据库集合,1000g 的各种被注入的数据库,涉及全球各种论坛,甚至包括某些银行,某些人口统计局,某些政府机构。代码思路是有限的,创造力是无限的。

user avatar

程序员是盖楼的,黑客是翻墙的。

二者兴趣不同,程序员追求的是用什么技术,能把楼盖的又快又好;黑客感兴趣的是,怎么能绕过保安,偷偷跑到楼里面去。

大部分的程序员,对于溢出渗透没有兴趣,也不研究,别说黑别人的系统,就算那系统开放服务,如果API写的不好,文档混乱,也是不情愿去花时间的。

比构建系统,实现需求,程序员是高过黑客的;但要比不受邀请,就出现在别人家后院的能力,黑客是远高于程序员的。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有