最近学习网路攻防,却不知道该怎么看到程序的漏洞,希望有人能提供一点建议。可以推荐一下书目,或者是有用的网路课程。举个例子吧

代码能看懂就是不会操作漏洞,十万火急,速来,跪谢!!


泻药。。

你随便写一个名字叫做env echo and now what? 的脚本放了/usr/bin下面。。。不就会执行任意程序了吗= =


emmmmm,思维方式得靠练习的,多看看就知道了。问题中这种就是典型的代码执行时可能会被混入其他的东西或被其他东西替代,像SQL注入之类的也是同样的原理。


有源码吗?审计审计,一些逻辑错误什么的,多看看多学学,挖洞不易,加油。

end


解题思路

1、首先观察该程序的执行效果,结果为输出and now what?

2、分析程序源代码,我们可以看到程序调用setresuid()设置调用进程的真实用户ID,有效用户ID和保存的set-user-ID,调用setresgid()设置真正的GID,有效的GID和保存的set-group-ID;但上面这些并不是重点,关键点在于system("/usr/bin/env echo and now what?"),程序使用system函数执行指定的shell命令,而此处存在的漏洞在于echo是由env定位找到;因为env用来执行当前环境变数下的命令或者显示当前的环境变数,也就是说env会依次遍历$PATH中的路径,执行第一次找到的echo命令,所以我们只要修改$PATH,就可以欺骗env,继而使得代码中的system执行我们的命令。

3、由于/tmp目录对任何用户都有完整的许可权,因此我们可以使用命令ln -s /bin/getflag /tmp/echo让/tmp/echo链接到/bin/getflag上

4、使用命令export PATH=/tmp:$PATH修改环境变数,将tmp路径放在前面,这样env会首先在/tmp下找到echo并执行


没有什么印象了,看到now what就感觉这好像是Exploit-Exercises的原题吧?

要学会多用百度Yo~

关于黑客教程的话

欢迎搜索腾讯掌控安全学院


1. gets

gets()函数不检查缓冲长度,可能导致漏洞。调用函数gets(buffer),会把用户输入的内容放在buffer中,但是对这个内容没有检查长度。如果用户输入内容过长,就会覆盖在buffer之后定义的变数,也就是说用户可以随意更改一些程序中的变数。

使用fgets()函数更好一些。首先你要用malloc为buffer分配一部分固定的空间,然后调用fgets的时候传递进去预计长度的值,这样就不会造成溢出了。

2. strcpy

这个家族有三个函数:strcpy、strcat和strcmp,都有溢出问题,因为不检查长度。一种对应方法就是,在使用这些函数前加入检查长度的语句。还有一种方法是使用strncpy、strncat和strncmp,是会检查长度的版本,不过这种方法的问题是,如果截取了长度,不能保证字元串以』 』结尾,所以可能需要添加一些代码判断一下。

3. sprintf

这个函数的问题也是不检查长度。使用snprintf更好一些。这个函数不仅能够避免缓冲区溢出(检查长度),还可以返回传递字元串的长度,以供判断是否需要处理截取后的』 』结尾问题。

4. printf及相关函数

这一类的漏洞与字元串格式攻击相关,也就是我们常说的利用格式化字元串漏洞进行攻击。这种攻击通常会导致信息泄露、覆盖内存(%n)等等。这个漏洞可以被以下函数触发:printf, fprintf, sprintf以及snprintf。这些函数的共同特点就是,都以格式化的字元串作为参数,即百分号之后的格式约定。

这种漏洞的应对方式就是,记住一定要硬编码格式化字元串。

5. 文件打开

打开文件的时候要特别小心。文件处理可能有多种被攻击的方法,这里只介绍几个例子。

一般来说我们在打开文件之前都会先确认文件是否存在,但是攻击者可能会建立一个文件(甚至只是建立了一个重要系统文件的符号化链接),在你的检查和实际使用文件之间的时候。open函数比fopen要更安全一些。在打开文件前,unlink文件以消除符号化链接。先用open函数生成一个文件描述符fd,如果fd为-1则打开文件失败。然后再用fdopen来打开这个文件描述符所指的文件,如果之前有符号化链接,那么因为被消除,这个文件就不能打开。


求黑客大牛或者团队联系方式


推荐阅读:
相关文章