VulnHub之Aiweb1练习过程
靶机:aiweb1
URL: http://download.vulnhub.com/aiweb/AI-Web-1.0.7z
Windows10+VMware+kali
信息搜集
1. 导入虚拟机,不用做多余配置。网络设置为NAT,开启DHCP。
2、查看靶机IP:确认地址范围,使用Nmap进行地址段扫描,找到运行web服务的靶机ip
192.168.44.141
3、该靶机有http服务,访问80端口
4、敏感文件收集
使用kali自带的dirb工具,进行目录扫描,找到一个禁止爬虫爬取的规则文件robots.txt
发现了两个的目录,把他们都丢进dirb再扫一次,发现m3diNf0目录下有phpinfo文件,从这个文件里得到中间件版本和最重要的一个信息网站根目录
接着扫描第二个se3reTdir777目录
除了已知的uploads目录之外,存在一个index.php文件,浏览器打开
5、寻找漏洞点
输入一个单引号测试,报错,说明可能存在POST注入:
此时使用Burp,注意这里使用的是burp中的插件CO2,链接了sqlmap,如果你没有装这个插件,可以在BApp Store中安装,或者直接使用sqlmap,抓取到数据包后,单击右键——send to SQLMapper.
转到了CO2的选项中,首先进行配置,配置SQL和PYTHON的路径,再点击run即可:
得到数据库为aiweb1,表名为user,systemUser
上传shell
里面还是有些演示数据,但是并没有什么用,所以直接尝试shell
成功后得到sqlmap生成的文件上传脚本URL
kali自带的shell脚本位置/usr/share/webshells/(php/php-reverse-shell.php)
使用这个文件上传一个反弹shell到目标服务器:
上传之前修改ip和端口(攻击者):
上传成功:
访问shell的URL地址,同时使用nc -lvvp 4444监听4444端口,shell反弹成功
提权
whoami显示目前的登录账号为www-data,同时www-data用户对/etc/passwd具有写权限
那么可以通过修改/etc/passwd文件实现添加一个root权限的新用户来实现提权操作,另外因为后面需要用到的su,命令必须是在终端环境中才能运行,所以需要使用python的pty库实现一个伪终端操作。命令为python -c 'import pty; pty.spawn("/bin/bash")'
Linux中用户的密码保存在/etc/shadow文件内,但是一般情况下提权之前没办法读取到文件内容,且密码是加密的,所以现在需要向/etc/passwd文件中写入一个含有已知加密密码的具有root权限的用户信息,然后Linux会将这个用户信息更新到/etc/shadow文件内,即完成了提权操作。
/etc/shadow文件格式:
{用户名}:{加密后的口令密码}:{口令最后修改时间据原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令)}:{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}
crypt()函数原型char *crypt(const char *key,const char *salt);其中salt加密参数为某个固定长度的字符串:
截图中显示的都是双写的字母,不知道这个情况是怎么回事,但是命令还是可以执行,perl -le 'print crypt("10086","bb")'
这样就得到了一个加密后的密码,组合写入/etc/passwd文件中,su提权为root
echo "test:bbma0iajVxQUI:0:0:rootroot:/root:bin/bash" >> /etc/passwd
得到flag:
天接云涛连晓雾,星河欲转千帆舞。
仿佛梦魂归帝所。闻天语,殷勤问我归何处。
我报路长嗟日暮,学诗谩有惊人句。
九万里风鹏正举。风休住,蓬舟吹取三山去!