ღ Miranda

Python反弹Shell分析

在漏洞利用时使用了一段python反弹shell代码,用到了一些python的模块。

整段代码如下:


一、

前面几行导入了模块,定义了变量,接下来看主函数,首先判断了参数个数,不是两个就退出程序:


二、

新建socket连接:


三、

这里使用了os模块的dup2函数和socket模块的fileno函数。

socket.fileno()

fileno函数返回套接字的文件描述符,如果从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,1与进程的标准输出相关联,2与进程的标准错误输出相关联。

os.dup2(f1, f2)

dup2传入两个文件描述符,f1和f2(f1是必须存在的),如果f2存在,就关闭f2,然后将f1代表的那个文件强行复制给f2,f2这个文件描述符不会发生变化,但是fd2指向的文件就变成了f1指向的文件。这个函数最大的作用是重定向,参考下面的python代码:

参考简书

代码中的三句话应该就把命令的回显传给了socket显示在攻击者的屏幕上。


四、

这里涉及了修改和获取环境变量。

os.unsetenv(varname)

删除一个环境变量varname,该修改会影响创建的子进程的运行环境。

os.putenv(varname, value)

设置环境变量名为varname的值为value,这样设置环境变量会影响以os.system(),os.popen()或os.fork()和os.execv()创建的子进程。

这几句应该做了清除痕迹的工作。


五、

新建进程,最后关闭连接,pty的spawn()函数生成一个进程,并将其控制终端与当前进程的标准输入输出连接。这往往是用来阻挡程序,坚持从控制终端读取。

发表评论

电子邮件地址不会被公开。