HTML5技术

Linux编程之给你的程序开后门 - 冠军的试炼(2)

字号+ 作者:H5之家 来源:H5之家 2017-01-16 15:00 我要评论( )

fd = fopen(, ); if (fd == NULL){MY_LOG(DEBUG, );pthread_exit( 0 );}fprintf(fd, , global .debug_level,n); 这样我们在debug center产生的打印都输出到文件debug_log2上了。 2.利用脚本读出内容且将内容写入fif

fd = fopen(, ); if(fd == NULL) { MY_LOG(DEBUG, ); pthread_exit(0); } fprintf(fd,,global.debug_level,n);

 

  这样我们在debug center产生的打印都输出到文件debug_log2上了。

 

  2.利用脚本读出内容且将内容写入fifo

  要做到这点需要shell编程的简单知识,我们怎么将我们的输入放到fifo呢?我们怎么把log文件的内容读出来显示在显示屏呢?我想到首先是再写个client,进行进程间通信嘛,将命令写到fifo,同时也读出log文件的内容。但是,我发现利用shell就可以做到以上的事了,而且只需花费几行代码。

 

#!/bin/bash my_inp_fifo=/vob/ljsdpoenew3/exercise/debug_log # 指定fifo文件 stty erase ^H while [ true ]; do read inp #循环读入用户输入 == ];then #quit代表结束该界面 exit $inp > $my_inp_fifo #写入fifo cat debug_log2.txt #显示log的内容 done

 

 

那看看这个命令行界面跑起来是怎么的吧!

 

首先我们运行server进程

 

sever进程不断产生消息并处理消息。

 

我们打开另一个窗口,并执行脚本./test.sh,进入界面

 

 

 

 

我们使用了d d命令看到了程序此时的debug级别,用d q看出了程序消息队列的情况。

 

 

 

我们使用了s d指令将debug level设置为0,此时屏幕没有任何打印输出,当我们在使用s d指令将level设置为-1(即将所有位置一),此时所有打印级别都打开了,屏幕又开始疯狂打印了。也就说,我们通过后门操控了程序,这里我们只是仅仅修改了程序的log级别,当然我们还可以做更多的事,只要依照这个框架往里面加指令,以及对应的处理操作,就可以实现了。

 

五、总结

所谓后门,就是一个可以操控程序的接口,这个接口仅仅用于开发者调试开发,不会开放给客户。所以这个后门的作用非常巨大,所以是开发者调试程序的一大利器。有人会想,我想用socket来代替fifo进行进程通信可以不,这样就可以做到远程主机操控程序了。我觉得是可以的,但是感觉利用telnet到目的主机再运行脚本操作比较安全。

 

 

 

最后给出源代码框架

1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <sys/types.h> 6 #include <sys/stat.h> 7 #include <sys/prctl.h> #include Queue_t MsgQueue; 12 extern dashboard_t global; MAX_NUM_ARGS 20 16 #define MAX_ARGS_SIZE 56 args[MAX_NUM_ARGS][MAX_ARGS_SIZE]; get_args(FILE *inputFile,FILE *fd) 21 { 22 char tmpBuffer[100]; 23 char tmpBuffer2[100]; 24 char *line = tmpBuffer; ; 26 char *token; 27 int i; 28 char eof; num = 0; 31 32 eof = !fgets(line, sizeof(tmpBuffer), inputFile); 33 if (eof) 34 return num; 35 36 memcpy(tmpBuffer2,tmpBuffer,100); token = strtok(line, separator); 40 while (num < MAX_NUM_ARGS && token) 41 { 42 strcpy(args[num], token); 43 num++; 44 token = strtok(NULL, separator); 45 } (i = num; i < MAX_NUM_ARGS; i++) 48 args[i][0] = 0; (num > 0) 51 { , tmpBuffer2); 53 } num; 56 } help_manual(FILE* fd) 60 { ); ); ); 64 } show_MQ(FILE* fd) 67 { ,abs(MsgQueue.head-MsgQueue.rear),MsgQueue.head,MsgQueue.rear); 69 } show_debug_level(FILE* fd) 72 { , global.debug_level); 74 } debug_center() 79 { 80 int rc,num,n; 81 FILE* fp; 82 FILE* fd; ); system(); ); , 0666); 90 if(rc < 0) 91 { ); 93 pthread_exit(0); 94 } , ); 97 if(fp == NULL) 98 { ); 100 pthread_exit(0); 101 } , ); 104 if(fd == NULL) 105 { ); 107 pthread_exit(0); 108 } fprintf(fd,); ); ); 114 help_manual(fd); (1) 118 { 119 fflush(fd); ); 121 num = get_args(fp,fd); 122 if(num < 1) 123 { , , fp); 125 fflush(fd); 126 continue; 127 } ); 129 switch(args[0][0]) 130 { : (args[1][0]) 133 { : show_MQ(fd); 136 break; : show_debug_level(fd); 139 break; : 142 help_manual(fd); 143 break; 144 } 145 break; : (args[1][0]) 149 { : n = atoi(args[2]); ,global.debug_level,n); 153 global.debug_level = n; 154 break; : 157 help_manual(fd); 158 break; 159 } 160 break; : 163 help_manual(fd); 164 break; 165 } 166 167 } 168 }

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何为你的微信小程序体积瘦身? - 腾讯攻城师lee

    如何为你的微信小程序体积瘦身? - 腾讯攻城师lee

    2017-01-03 13:00

  • Web Worker javascript多线程编程(一) - PeakLeo

    Web Worker javascript多线程编程(一) - PeakLeo

    2016-12-27 10:00

  • 怎样实现前端裁剪上传图片功能 - 会编程的银猪

    怎样实现前端裁剪上传图片功能 - 会编程的银猪

    2016-10-19 13:00

  • 【绝对干货】仿微信QQ设置图形头像裁剪,让你的App从此炫起来~ - 南尘

    【绝对干货】仿微信QQ设置图形头像裁剪,让你的App从此炫起来~ - 南

    2016-10-17 10:00

网友点评