4.修改环境变量前,查看当前环境变量。
使用export方法添加环境变量如下:
使用task5打印环境变量,并过滤出其中含有PATH的环境变量。
观察结果:ADD_PATH PATH均成功加入子程序,但是LD_LIBRARY_PATH并没有成功传入。
Task6:The PATH Environment Variable and Set-UID Programs
1.编写如下程序,使用system()调用ls方法
根据提示,我们需要将/bin/sh链接到/bin/zsh绕过安全检查机制。
未进行Set_UID之前,task6正常执行 ls,结果如下:
将程序设置为root用户下的进行Set_UID程序。
我们将要执行我们的恶意指令,这里使用pwd。首先查看/bin文件下的pwd指令,找到它的位置。我们将pwd的命令程序复制到我们的目录下,并为其取名为ls。再修改PATH,再环境变量PATH的开始添加我们的目录,这样一来,再执行程序时,将先到我们的目录下查找到我们包装过的恶意指令。
执行程序,可以看到此时该程序已经运行我们包装过的恶意指令pwd。
Task7:The LD PELOAD Environment Variable and Set-UID Programs
1.编写mylib.c程序如下
将mylib.c编译成动态链接库,并且设置LD_PRELOAD环境变量为我们的动态链接库。
2.编写myprog.c程序如下,并且直接编译运行。
可以看到很短的时间内直接打印处结果,说明我们成功将sleep函数和我们定义的链接库链接到了一起。
3.将myprog程序的有效使用者修改为root,设置为Set-UID程序。重新运行程序,程序运行了大概一秒,但没有输出任何结果。
4.升级为root用户,在root用户下修改环境变量。此时再在root用户下执行该代码,可以看到很短的时间内就输出了结果。
5.使用sudo adduser命令新建用户***:
查看此时的myprog的有效用户,仍然时root,我们将其修改为新创建的用户***,再次执行代码,程序运行了大概一秒钟后没有输出任何结果。
分析:
1中,有效用户和真实用户均为seed,因此并没有忽略自定义的环境变量LD_PRELOAD,此时链接到的是自定义的动态链接库,ibmylib.so.1.0.1,输出打印结果。
2中,有效用户为root,真实用户为seed,真实用户与有效用户不同。此时环境变量LD_PRELOAD就被屏蔽(这正是动态链接器的防御机制),链接到的是原先的标准库libc,此时执行了sleep()没有输出。
3中,有效用户和真实用户均为root,因此并没有忽略自定义的环境变量LD_PRELOAD,保护机制没有生效。此时链接到的是自定义的动态链接库,ibmylib.so.1.0.1,输出打印结果。
4中,有效用户为***,真实用户为seed,真实用户与有效用户不同。此时环境变量LD_PRELOAD就被屏蔽,链接到的就不是自定义的动态链接库,而是原先的标准库,此时执行了sleep()没有输出。
Task8:Invoking External Programs Using system() versus execve()
1.修改catall代码,使得程序执行system(command);
编译catall.c程序并且运行,将程序设置为root用户下的进行Set_UID程序。
可以看到程序成功运行并且成功打印出catall.c的内容。
在root用户下,在目录中创建一个myfile文件,此文件的所有者是root,只有他对文件又执行修改权限。
返回seed用户,在catall的参数后面添加想要执行的指令,我们发现普通用户也可以对该文件执行删除操作。
回到root用户下,发现刚才创建的myfile已经被删除。在catall的帮助下我们可以成功删除。
2.修改代码,使得代码执行execve()函数。
编译catall.c程序并且运行,将程序设置为root用户下的进行Set_UID程序。
可以看到程序成功运行并且成功打印出catall.c的内容。
切换到root用户下,新建测试文件test.txt,回到seed用户,使用与之前相同的方法删除该文件,发现无法删除。
分析:这是因为system()本质上是调用shell执行指令,没有对代码和数据做区分,可以将两条指令分开执行,但是execve()函数实现了数据和代码的分离,他将我们输入的字符串理解为一个文件名,所以返回错误,并不存在这样的文件或者目录。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算