项目四:Tr0ll-1
#nmap信息收集
---探测主机:192.168.95.130

---扫描全端口和操作系统版本:nmap 192.168.95.130 -sS -sV -p- -O
---存在3个端口Linux系统:思路1:cewl网站获取爆破字典,使用hydra爆破ssh
---思路2:查看ftp是否存在匿名访问搜集信息

---使用nmap -A查看详细信息,发现21端口ftp存在匿名登陆,具有读写执行权限
-ftp还存在者一个可写入的2014 lol.pcap文件
---80端口的Web下存在/secret目录和robots.txt文件存在一个不允许的目录

---直接在谷歌收拾apache2.4.7 和openssh 6.6.1的exp,发现没有命令执行漏洞

#Ftp匿名登陆信息收集
---登陆靶机的ftp:账号和密码都是Anonymous

---dir是查看ftp下的文件的信息,get是下载文件到当前目录,put是上传文件(只需要这三个命令就行):

---在kail查看文件:Pcap(Packet Capture),是一种行业标准的网络数据包捕获格式
---通常使用 Wireshark、Tcpdump 或 WinDump 等捕获TCP/IP 数据包,而抓包后存盘的文件格式就是 .pcap 文件

---pacp包的组成

--- wireshark lol.pcap(只能在kail里面,因为要弹出图形窗口)
---这里的流量,都是10.0.0.12和10.0.0.6之间的交互

---点击追踪TCP流:发现Wireshark数据包里面的信息
---这里发现了一个文件secret_stuff.txt,以及“目录列表”关键词

---显示过滤器中输入表达式 tcp.stream eq 0 筛选出第一个TCP流(包含完整的一次TCP连接:三次握手和四次握手)

--- tcp.stream eq 1/3 筛选出后面的TCP流

---在tcp.stream eq 2中给出了提示,但是没有挖掘到什么实质性的敏感信息
---收集到敏感信息:sup3rs3cr3tdirlol,后面的 :-P应该是表情包

#80端口Web信息收集
---浏览器访问没什么信息,前端源代码也只有一张图片(第一思路是去剖析图片收集信息)

---根据前端源代码获取下载地址:192.168.95.130/hacker.jpg下载进行图片信息分析

---binwalk(路由逆向分析工具):分离图片,看图片里面是否包含了隐藏的另类文件

---exiftool(图虫):分析图片的信息,如大小、描述、修改时间等

---查看图片的存储形式:strings(识别动态库版本指令):将图片的信息还原成ASCII码
---上面的图片分离、图片描述、图片存储的剖析都没有收集到敏感信息,需要转换思路

---利用ftp收集的敏感信息文件secret_stuff.txt去访问(失败)

---用http://192.168.95.130/sup3rs3cr3tdirlol/进行访问,发现目录遍历漏洞
---下载roflmo的文件

---file命令:识别文件类型,也可辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的
---这里是一个32位的elf文件,类似的就是Windows的32位的exe文件(所谓的32位是指的32位寄存器),而elf文件就是Linux的可执行文件

---file命令的相关参数
---通过exiftool查看elf文件的描述信息(比file命令更好用)

---binwalk查看是否存在隐藏文件,不存在隐藏文件

---strings查看文件的在计算机的存储格式(这里应该是以UTF进行编码,然后以二进制存储在计算机),然后将二进制数据以ASCII码的形式,进行字符串打印
---这里说:找到了程序的地址:Find address 0x0856BF to proceed

---根据这个提示访问Web的目录

---访问good_luck目录下的which_one_lol.txt文件
---根据/0x0856BF/下的password目录,可以推测这是一堆账号的用户名

---同样访问password目录存在一个密码,思路:可以通过账号和密码爆破ssh
---但是这个Good_job_不是密码(文件路径以及Pass.txt很可能是密码)

---将之前的用户名写明name.txt

---将可能的密码组成爆破字典

---九头蛇的常用参数
----hydra -L name.txt -P pass.txt 192.168.95.130 ssh
---L是指定用户名字典,-P是指定密码字典;
---用户名:overflow;密码:Pass.txt

---ssh登陆,登陆密码

---将ssh的shell转换成/bin/bash,发现是普通用户需要进行提权
----Linux版本3.13.0,而且ssh断开一次(这里因该是有脚本,隔一段时间执行一次断开操作)

---这里应该是执行了计划任务,在一个时间段内断块shell链接

#提权思路
---1.谷歌搜索Linux 3.13.0的exp进行提权(也可以searchsploit linux ubuntu 3.13.0搜索exp)
---2.通过linux-exploit-suggester搜索可能存在的exp进行提权(本次靶场不存在数据库,存在数据库优先查看UDF提权)

---将exp存放到当前目录

---gedit查看exp:gcc ofs.c -o ofs直接编译就可以执行执行
---在Kail开启http服务
----靶机下载exp

---直接编译exp之后执行文件,发现获取root权限,但是很快就弹出去了
---直接进入/root目录,就可以查看flag

#计划任务的破解
---cron的日志文件存储为 /var/log/cronlog ,可以看到最近执行的定时任务信息
---*/2
表示每隔两分钟执行一次任务,* * * * *
表示每分钟都会触发任务,cleaner.py
是要执行的具体任务或脚本的名称(计划任务的文件可能具有root权限)
---cleaner.py
是删除/tmp目录下的一切文件(由于之前exp放在/tmp目录,所以进入root后由于exp被强制删除,exp的进程也就结束)
---注意:这个并不是把我们踢出ssh的脚本,功能只是删除/tmp 目录里面的文件

---计划任务:
at命令 : 由atd守护进程来执行,atd进程会定期检查系统上的 /var/spool/at 目录,获取at命令写入的任务
---绝对计时 : at 时刻 日期

---相对计时: at now+count time-units, 这个count的单位就是后面的time-units来指定。可以是miuntes,hours,days,weeks

---atq 命令查看有哪些定时任务

crontab 命令:at命令只能执行一次,周期性重复执行命令,使用cron命令
---执行机制:会先搜索/var/spool/cron 目录下,以 /etc/passwd 文件中用户名命名的crontab文件,注意不是叫crontab文件。同时也会搜索 /etc/crontab 文件
---使用 crontab -l查看是否已有定时任务

---crontab -e,编辑配置文件,这个就是设置要执行的定时任务命令
---crontab 文件中,每行都包括6个域,其前5个域是指定命令被执行的时间,最后一个域是要执行的命令

---每个域之间使用空格进行分割,六个域每个字段对应的单位:

---day-of-month :表示每月的某日,其它同理

---这里/var/log/cronlog和crontab -l的区别
---/var/log/cronlog
是一个文件路径,代表 cron 的日志文件。当 cron 作业执行时,相关信息和输出将被记录在这个文件中
---crontab -l
是一个命令行工具,用于列出当前用户的 crontab 文件中定义的 cron 作业。运行 crontab -l
命令将显示当前用户的 crontab 文件的内容
#常见的日志
---记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息

---与定时任务相关的日志信息:
/var/log/cron
或 /var/log/cron.log
是一个日志文件,用于记录计划任务(Cron Jobs)的执行情况和相关信息
---访问
/var/log/cron
或 /var/log/cron.log
文件通常需要 root 或管理员权限
---
/var/log/cron.log
文件记录的是所有用户的计划任务执行日志,而不仅仅是当前用户的计划任务
---记录了系统上所有帐号最近一次登入系统时的相关信息。lastlog命令就是利用这个文件所记录的信息来显示结果

---记录邮件的来往信息,其实主要记录SMTP和POP3(IMAP)协议提供者所产生的信息
---
记录了系统发生的所有错误信息(或者是重要的信息),所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一
---一般用来记录安全相关的信息,记录用户和工作组变换情况、用户登陆认证情况
---该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看
---直接cat的话是乱码

---last命令查看更直观

---记录Linux登陆失败的用户、时间以及远程IP地址

---记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件
#
补充常见中间件的日志位置:
#ls(list)命令的参数(常用:ls -al 仅列出目前短格式的时间)
----ls -l的显示

---我以为计划任务是root权限,所以因该是rwxs权限,结果不是(但是用户是root)
---这里其它用户具有读写和执行权限

----由于我们登陆是普通用户,需要查找存在写入权限的可执行文件

---这里可以优化一下,/o=wx
表示其他用户具有写和执行权限
---枚举:-perm -o+w
:表示搜索具有"其他人"写权限的文件
----v
:grep
命令的选项,用于反转匹配,即只输出不包含 /proc
的行

#知道了计划任务和py脚本可写入,以及py的位置后,接下来演示三种方法:
---原理:Linux的计划任务(Cron Job)允许用户在预定的时间间隔内执行特定的任务,如果是root用户使用sudo crontab -e
编辑计划任务脚本,那么脚本具有root权限
1)反弹shell
2)创建root可执行程序,获得root权限
3)写入ssh rsa,ssh登录root用户
---1)反弹shell
---先准备好反弹shell的代码
---使用nano打开脚本,将exp写入:nano /lib/log/cleaner.py

---nano的快捷键(可以在nano中使用CTRL + G来查看快捷键)
---在kail查看发现接受到shell

---2)创建root可执行程序,获得root权限:
---nano /lib/log/cleaner.py 修改计划任务的脚本

---发现/tmp目录下新建了一个dayu1的文件,本质是/bin/sh
---id命令发现是root权限:
---uid=1002(overflow)
: 表示当前用户的用户 ID(User ID)值为 1002,用户名为 "overflow"
---gid=1002(overflow)
: 表示当前用户所属组 ID(Group ID)值为 1002,组名为 "overflow"
---euid=0(root)
: 表示当前用户有效用户 ID(Effective User ID)值为 0,用户名为 "root",这意味着当前用户具有 root 用户的权限
---groups=0(root),1002(overflow)
: 表示当前用户所属的附加组(Additional Groups)的 ID,该用户属于两个组:组 ID 0即 "root" 组,以及组 ID 1002,即 "overflow" 组

---或者编辑脚本以将用户溢出添加到sudoers文件中可以sudo su到root用户:
---cat /etc/sudoers 查看SUID的写法:用户名 ALL=(ALL) ALL

---将overflow用户赋予sudo权限:
os.system('echo "overflow ALL=(ALL:ALL) ALL" >> /etc/sudoers')

---但是我这里不知道为什么失败了(这里不能直接登陆当前用户,也不能直接su root)

---网上查了下,需要使用sudo su命令或者sudo su root都可以不用输入命令

---3)写入ssh rsa,ssh登录root用户
---ssh-keygen
(kail生成)命令生成的SSH密钥对的文件名为id_rsa
(私钥)和id_rsa.pub
(公钥)。这是OpenSSH工具包中的默认命名约定
---私钥文件(id_rsa
)是你的私有密钥,用于进行身份验证和解密加密的通信。请务必妥善保管私钥文件,并确保只有你有权限访问它。
---公钥文件(id_rsa.pub
)是你要分享给其他人或远程服务器的公钥。远程服务器将使用该公钥来验证你的身份。将公钥文件(id_rsa.pub
)复制到远程服务器的~/.ssh/authorized_keys
文件中,以便进行身份验证(一直默认回车)

---发现在kail的/root/.sh目录下生成了公钥和私钥

---我们的目的是把公钥写入靶机的:~/.ssh/authorized_keys
---先查看公钥

---构建系统执行命令:
---1.在root目录下创建.ssh目录并且赋予当前用户和用户组读写可执行权限,赋予其它用户读和执行权限(读权限r:值为4;写权限w:值为 2;执行权限x:值为 1)
---2.将ssh的公钥写入/root目录下文件/authorized_keys
(这里是root权限,所在root目录下的.ssh,普通用户在根目录下写入)
---将代码写入计划任务的Python脚本执行的命令函数中

---nano看不清,使用Vim打开

---在Kail上使用ssh进行登陆
---我这里失败了,登陆root发现/root/.ssh/authorized_keys里面是写入了公钥,但是就是链接的时候提示输入密码,可能是我没有快照的原因,

#总结知识点
---1.Nmap使用-A参数识别21端口的Ftp匿名访问漏洞
---2.Tcp流数据包的lol.pcap的格式:全局报头、数据包
---3.使用WireShark对pcap文件进行TCP流的追踪,获取Web的敏感信息(文件/目录)
---4.三大图片分析工具(文件也可以,如elf可执行文件):binwalk对图片分离;exiftool获取文件描述信息;strings将文件的存储数据转化为ASCII的格式显示获取敏感信息
---5.爆破字典的来源:Web页面分词,Web的文件名,Web的URL,Web的文件内容
---6.Hydra爆破SSH服务
---7.uname -a获取Linux内核版本,searchsploit Linux Ubuntu 内核版本 获取exp提权
---8.计划任务at(一次)和cron(多次)的设置,root用户设置的计划任务(cronlog)位置查找
---9.查找cronlog中的具有root权限的脚本,nano修改计划任务提权
---10.计划任务提权方式:1.通过python反弹/bin/bash的shell提权2.通过修改/etc/sudoers添加用户的sudo权限,以sudo su root提权3.通过ssh-keygen生成ssh的公钥和私钥,将公钥上传到靶机的/root/.ssh/authorized_keys文件
