项目10:Stapler-1
##Nmap信息收集
---靶机IP:192.168.95.156

---全端口扫描,这里发现端口开放的挺多的(但是一些端口是关闭了)

---这里Ftp存在20和21两个端口:端口21主要用于传输控制信息,用于接收和传送FTP指令
---端口20主要用于传输数据,包括数据的上传和下载。
----在使用FTP传输数据时,客户端会首先使用21端口进行用户认证
----认证通过后,服务器会开启一个20的端口进行数据传输
---这里FTP存在匿名登陆

---SSH端口支持RSA、ECDSA和ED25519三种类型的密钥

---域名系统(英文:Domain Name System,缩写:DNS)主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送
---dns-nsid:支持DNS服务器信息传输协议,可以用于获取DNS服务器的软件版本等信息。
---bind.version: dnsmasq-2.75:DNS服务器软件的详细版本信息,即dnsmasq版本2.75
---dnsmasq是轻量级的DNS转发器和DHCP服务器,常用于家用路由器和小型网络环境中

---这里80/12380可能是Web页面
---3306是MySQL的远程登陆端口,可能使用MSF进行MYSql提权
---Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务
---NetBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能
---NetBIOS可以使用的四种类型的SMB(赋予Windows计算机本地文件重定向功能以便进入远端文件系统)
命令:话路控制命令,用于建立或终止与远程计算机上某个资源的逻辑连接
文件命令:用于远程文件访问
打印机命令:用于传送数据给一个远程打印队列,同时也检查该打印队列中各项任务的执行状态
消息命令:用于实现计算机之间的消息传送
---如果是Windows环境下,smb可能存在永恒之蓝漏洞(445端口)
---666端口,下面因该是一个jpg的图片(可以访问枚举)

---操作系统是Linux系统
---SMB是一种用于文件和打印共享的网络通信协议,通常用于Windows系统
---smb-os-discovery:表示靶机操作系统是Windows 6.1,但实际上是Samba 4.3.9-Ubuntu
---Samba是兼容Windows网络协议的开源实现,允许Linux与Windows之间共享文件和打印等
---smb2-security-mode:显示了SMBv2协议的安全模式信息。
---Message signing enabled but not required:表示SMBv2消息签名已启用,但不是必需的。消息签名是一种加密措施,用于防止SMB通信被中间人攻击和篡改
---Computer name: red:表示主机的计算机名称是"red"
NetBIOS name: RED:表示NetBIOS名称是"RED"。
NetBIOS user: <unknown>:未知的NetBIOS用户

##FTP匿名登陆

---查看内容收集到2个用户名(可以确定是Ftp账号):Elly John
---提示ftp里面还有信息,但是没有密码,先尝试Web页面枚举信息

##Web页面访问
---首页和前端源代码都没有发现信息

---dirb爆破敏感文件和目录,发现2个文件

---wget下载下来看看,隐藏文件需要使用ls -a

---查看cat .bashrc(这是一个Linux系统用户的 .bashrc
文件,它是在用户登录到系统后,每次打开一个非登录的交互式shell(例如打开一个终端)时自动执行的脚本。该文件包含了一些配置和别名,用于个性化用户的shell环境)
---可以理解成环境变量的配置信息(bash),没有什么特别的内容
---查看.profile
---这个文件主要用于设置umask、加载用户的 .bashrc
文件以及将用户的 ~/bin
目录添加到环境变量 PATH
中,以提供更好的用户体验和方便性
---总的来说,这两个没有什么有用的信息
##666端口的DNS协议(可能存在一张jpg图片)
---nc访问666端口(这里是TCP协议,所以只能nc访问),发现是一个zip文件
---至少需要zip2.0版本才能解压

---查看unzip的版本发现是6.0,解压发现是一张jpg的图片

---图片内容,看到了分段错误,可能会有缓冲区溢出

---binwalk和exiftool分析图片(没有什么有用的信息)
---信息1:如果你正在读这篇文章,你应该得到一个Cookie
---信息2:IPTCDigest不是最新版本。XMP可能不同步

##Mysql的3306端口尝试
---这里提示密码错误,但是因该可以使用root进行远程登陆

##12380的Web页面信息收集
---访问页面,没有什么有用的信息

---查看前端源代码,收集到用户名:Zoe ,加上之前的Elly John

---复制到base64.txt文件,进行base64解码发现是jpeg图片

---浏览器打开是这样,没有什么有用信息
------使用binwalk\exiftool\strings解析均没有获取什么信息

---dirb进行扫描,什么也没有扫描到

##漏洞扫描
---AWVS进行漏洞扫描192.168.95.156:12380/什么都没有扫描到

---采用xray webscan --url http://192.168.95.156:12380/ --html-output urlbg.html
---这也没有发现什么有用的东西

#使用nikto进行扫描
---Nikto是一个基于Web的漏洞扫描器,用perl语言编写的开源软件,目标是进行漏洞扫描
---去寻找已知有名的漏洞,能在230多种服务器上扫描出2600多种有潜在危险的文件、CGI 及其他问题,它可以扫描指定主机的 WEB 类型、主机名、特定目录、COOKIE、特定 CGI 漏洞、返回主机允许的 http 模式等
---扫描网站,但是我这里什么也没有扫描除了(可能是我的nikto版本太高了)

---在网上找了一张别人的2.1.6版本的nikto
--看到这里有SSL,说明是SSL访问,也就是HTTPS,http访问其他的页面会重定向

---访问告诉我们这里有一个xss漏洞

---这里是一个WordPress页面的网站,以及之前的用户名:john
---思路1.AWVS扫描 2.Xray扫描 3.WpScan扫描

---这里是一个PHPmyadmin的界面,root/root登陆不了
---思路1.hydra/BurpSuite爆破 2.特殊目录识别PHPmyadmin版本尝试万能密码绕过

---采用dirb再次爆破https://192.168.95.156:12380/blogblog/

#WordPress漏洞扫描
----AWVS扫描发现多个漏洞,结合之前信息可以看出WordPress是4.2.2版本

---使用Xray扫描没有发现漏洞,看来Xray不适合扫国外的

---使用wpscan漏洞扫描
---wpscan常用主要选项
---其它选项
-----disable-tls-checks ---因为会受到SSL对等证书/SSH错误临时用法
---因为这里是Https协议,所以要加disable-tls-checks绕过
---发现存在一些SQL注入、文件上传、XSS、CSSRF等漏洞

---使用--enumerate 枚举用户名,u 枚举用户名,默认从1-10
–disable-tls-checks #禁用SSL/TLS证书验证
---这里发现了文件上传目录和用户登陆目录
---https://192.168.95.156:12380/blogblog/wp-login.php?action=register
---https://192.168.95.156:12380/blogblog/wp-content/uploads/

---发现这里存在一些用户名,

---访问upload目录发现存在文件上传

---在插件目录下,advanced_video_embed.php文件存在漏洞
---注意:WordPress的漏洞主要源于插件

---也可以使用wpscan的--plugins-detection主动扫描存在哪些插件
---这里存在目录泄露漏洞,所以可以不用扫描插件,如果不存在则需要wpscan扫描插件
---插件越老越容易出现漏洞

---先查看查看的readme,发现版本是1.0

---在谷歌搜索,发现EDB-ID:39646

---searchexploit,发现插件存在文件包含漏洞

---查看exp(注意:这段代码是Python 2 的代码。urllib2
是用于处理URL请求的模块。在 Python 3 中,urllib2
被拆分成了 urllib.request
和 urllib.error
等模块)
---file_get_contents
是一个在PHP中用于读取文件内容的函数。它的作用是将一个文件的内容读取为一个字符串并返回
---这里$image_data = file_get_contents($thumb);就会读取传参的内容(构造恶意路径)
---PHP文件包含的函数

---由于这里是HTTPS协议,所以exp里面需要添加
ssl._create_default_https_context
: 用于创建一个默认的 HTTPS 上下文(SSLContext)对象。在Python 3 中,使用urllib.request.urlopen
。发起 HTTPS 请求时,会默认使用这个上下文对象来建立安全连接。这个上下文对象会验证服务器的证书,如果服务器的证书无效或有问题,连接将会被拒绝ssl._create_unverified_context
: 用于创建一个不验证服务器证书的 HTTPS 上下文(SSLContext)对象。在某些情况下,你可能会遇到服务器的 SSL 证书无法被正常验证的情况,例如自签名证书或者证书链上的某个证书未被信任
---构建exp如下:
---python2执行exp

---发现在upload目录下生成一张图片
---说实话这里我也不知到为什么会在这里生成一张图片

---去exploit-db上查看下源码(/inc/classes/class.avePost.php) Line 57:-——Line 78)
---这里会将thumb的内容获取,然后写入jepg的图片内

---将图片下载下来,--no-check-certificate 忽略证书

---file检验文件,获取到数据库的用户名root和密码plbkac
---这里还可以利用文件包含,读取/etc/passwd和/etc/shadow

---访问https://192.168.95.156:12380/blogblog/wp-login.php?action=register
---思路 1.弱口令或者密码爆破 2.PHP的strcmp绕过 3.SQL注入
---弱口令admin不能登陆,爆破可以使用之前收集的用户名使用hydra和Burp爆破
---但是这里是WordPress后台登陆,可以使用wpscan爆破密码

---使用wpscan爆破用户密码(-P指定爆破的字典)
---这里爆破出来4个用户名和密码

---但是我们之前获取到了数据库的密码(root/plbkac)
---而且3306端口开放,可以先登陆数据库查看(-h远程登陆)

---这里发现一些用户名和密码

---我们需要将使用awk命令拆分信息

---复制粘贴到1.txt,通过awk筛选
---NR > 2
确保只从第三行开始打印数据,以避免打印表格的标题行
---而 length($3) > 10
则检查第三个字段的字符串长度是否大于10,去除空格行
---效果如下

---同样的将用户名写入:username.txt

---hash-identifier识别数据库加密,发现是MD5加密

---采用john去爆破(注意:不要有空格)
---爆破出来一些密码,挨个尝试
---发现:john incorrect可以成功登陆

---当然,也可以在~/.john的john.pot查看爆破的历史记录

---密码登陆后,点击插件>添加新插件>上传插件
---发现这里支持ZIP格式的文件上传

##PHP文件上传的五种方法
---1.php-reverse-shell.php 2.weevely 3.webacco
---4.php/meterpreter_reverse_tcp 5.mysql INTO OUT文件上传
---其它:菜刀、冰蝎、蚁剑、哥斯拉
#方法1:php-reverse-shell.php
---修改反弹shell的IP地址

---上传PHP文件成功,但是这里目录因该是在之前插曲目录

---emmm这里一点文件上传的检验都没有

---直接访问,反弹shell成功,发现是python2的WebShell

#方法2:weevely
---weevely创建一个密码为passdayu,名为dayu.php的shell
---将dayu.php上传

---采用weevely连接:weevely URL 密码(确实好用,但是只支持PHP)

---相对于php-reverse-shell.php的好处是,weevely的代码经过混淆
---但是只混淆了传参的变量,没有混淆函数名,很容易能够被黑名单检测出来
#方法2:webacoo
---:-g 生成后门代码(需要-o);-o OUTPUT 生成的后门输出文件名

---这里还是混淆的变量传参,容易被检测
---webacoo连接后门:-t 建立远程“终端”连接(需要-u);-u URL 后门 URL
---没有成功,emmmm真垃圾

##方法3:php/meterpreter_reverse_tcp
---p指定payload,-f生成类型:RAW是未经处理、也未经压缩的格式
---这个后门和其它一句话不同的是,这是争对MSF框架的

---msfconsole进行监听利用
---比起普通的一句话,优点是可以使用MSF的强大模块

#方法5:mysql INTO OUT文件上传 INTO OUT(写)
---远程登陆靶机Mysql,发现是否具有文件导入和导出权限
---secure_file_priv用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限
---secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
---secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
---secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
----当然,这里也可以使用UDF进行提权(MSF直接提权)

---使用 into outfile将PHP的一句话写入Upload目录
---注意:shell_exec是系统命令执行函数(也可以使用反引号)
---然后在upload目录访问,并且通过GET传参进行系统命令执行

---系统执行Python的一句话反弹shell到Kail(GET传参)
---在Kail监听端口,接受到反弹shell
---并且使用python的pty和bash的stty进行SHEll切换

##提权信息收集
---uname/lsb_release -a进行内核/发行版本信息收集

---上传linpeas.sh脚本进行分析,这里存在系统版本漏洞

---这里发现peter用户存在Sudo的提权(可以拿之前的密码进行SSH爆破)

---这里SSH允许空密码(可以结合peter用户提权)

---这里的脚本具有写权限(环境变量)

---这里是SUID可能出现的漏洞(find/cp/vim之外的)

#总结
---1)Linux version 4.4.0-21-generic
---2)存在一些账户信息:peter存在sudo提权
---3)ssh:PermitEmptyPasswords yes(允许空密码登陆)
---4) path可写入:/usr/local/sbin/cron-logrotate.sh
#内核系统漏洞提权
----根据内核信息:searchsploit Linux Kernel 4.4.0

---根据版本信息和内核信息一起
---注意区分是32位系统还是64位系统

---也可以使用谷歌搜索最方便

---linux/local/39772.txt可以利用,但是exploit-db里面是txt格式
---直接去github:https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip(但是已经找不到了404)
---当然也可以使用cve-2021-4034-poc.c,直接通杀

#SSH登陆内核提权
---进入/home目录,使用grep -rn "ssh"递归搜索包含ssh的文件
---这里分别获取到peter/JZQuyIN5和JKanode/thisimypassword

---这个文件因该是JKanode用户的bash的历史记录

---直接使用ssh peter@10.211.55.37
JZQuyIN5进行登陆

---但是这里是ZSH的shell,可以在ssh登陆的时候,命令执行切换bash

#计划任务写入提权
---查找计划任务
---我这里2>/dev/null失效(因该是环境变量)

---在cat /etc/cron.d/logrotate里面,存在每5分钟执行一次的脚本
---计划任务的路径:crontab -l(当前用户的计划,没有什么用)
----/var/spool/cron/用户名(存在各个用户的计划任务,但是查看不了)
---/etc/cron.d目录下的文件
---名为/var/log/cronlog文件
---这里每五分钟以root执行一次:/usr/local/sbin/cron-logrotate.sh

---可以看到cron-logrotate.sh文件,其它用户也具有写权限

---插入代码
---将/bin/bash复制到/tmp目录,赋予SUID权限
---将 /tmp/exploit
的所有者更改为 root
,所属组也更改为 root
---发现写入,但是执行后没有提权成功
---这里需要写入dash,然后在/tmp使用dash -p直接进入root(但是我失败了)

##smbd拿Shell
---nmap全端口扫描,发现139端口开放是smbd协议(局域网文件传输)
---Samba使Linux系统充当文件服务器,以与Windows客户端共享文件和资源:
文件共享: Samba允许将Linux文件系统上的文件和目录共享给Windows客户端,就像在Windows文件共享中一样。这使得用户能够通过网络访问和编辑位于Linux服务器上的文件。
打印共享: Samba还支持在Linux服务器上共享打印机,使Windows客户端能够通过网络连接和打印到这些共享的打印机。
用户身份验证: Samba允许在Linux系统上验证Windows用户,这意味着用户可以使用其Windows凭据登录Linux共享。
域控制器: Samba还可以充当Windows域控制器的角色,使得Linux系统能够在Windows域中提供用户身份验证、组策略等功能
---NetBIOS(Network Basic Input/Output System)是一种早期的计算机网络通信协议,用于在局域网(LAN)中进行数据交换,后来被微软采纳并集成到Windows操作系统中
命名服务: NetBIOS允许计算机在网络上使用16个字符的名称进行标识。这些名称用于识别计算机、打印机和共享资源。每个计算机可以有一个主机名和若干服务名。
会话服务: NetBIOS会话服务允许计算机
数据报服务: NetBIOS数据报服务允许计算机通过数据报(独立的消息块)进行通信。这种通信方式类似于UDP协
名称解析: NetBIOS使用名称解析来将人类可读的计算机名映射到网络上的IP地址。这有助于实现
---然而,随着网络技术的发展,NetBIOS已经逐渐被更现代的协议和技术所取代,如TCP/IP、DNS(Domain Name System)和Active Directory
---NetBIOS协议存在一些安全漏洞,因此在更安全的网络环境中,通常会采用更安全和更现代的通信方式

---使用Enum4linux信息收集:139的Samba信息
---(用于枚举来自Windows和Samba系统的信息的工具)
---这里发现一些文件,有2个目录可以进去:
---kathy和tmp两个信息非常活跃!可以用smbclient连接!

---这里收集到一些用户信息

---复制粘贴到name.txt,采用cut命令拆分
---cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出
-d:分隔符,按照指定分隔符分割列。与 -f 一起使用
-f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思(列号,提取第几列)
-c:以字符 (characters) 的单位取出固定字符区间
-b:以字节为单位进行分割
---这里先以/拆分一次,然后使用空格再拆分一次
---将通过筛选剔除后,获得正常的用户名:user_dayu.txt

---根据这个用户名当成字典进行SSH爆破
---发现一个用户名和密码:SHayslett

#smbclient访问文件夹
---SMB与CIFS为服务器通信协议,常用于Windows95/98/NT等系统。smbclient(samba client)可让Linux系统存取Windows系统所分享的资源
----显示服务器所有资源,不用输入密码直接回车

---指定路径登陆,发现一个todo-list.txt文件和wordpress的源码
---这里可以进行代码审计,---打开todo-list.txt发现没有很重要的信息

##Linux永恒之蓝漏洞
---搜索关键词:searchsploit Samba 4.3.9
--查看提示需要用到MSF(CVE-2017-7094)
---影响范围:所有介于 Samba 3.5.0 ~ 4.6.4之间的版本,(4.6.4/4.5.10/4.4.14版本)不受影响

---msf尝试搜索永恒之蓝模块

---直接提权成功

##知识点总结
---1.Nmap主机发现、端口扫描、端口版本扫描
---2.Ftp匿名登陆、80端口页面获取用户名
---3.nc访问DNS的666端口,下载文件,file识别文件,unzip解压文件
---4.binwalk、exiftool、strings查看图片隐藏文件
---5.nikto、dirb扫描Web敏感目录,AWVS、Xray、WpScan扫描漏洞
---6.wpscan的disable-tls-checks绕过https,-e u 枚举用户名,-e u -P指定字典爆破用户密码
---7.WordPress的wp_content目录存在文件路径泄露,大部分高危漏洞在插件里面
---8.WordPress的advanced_video插件文件包含漏洞,$image_data = file_get_contents($thumb)读取传参内容,然后读取网站的Config文件获取数据库用户名和密码(也可以读取/etc/passwd和/etc/shadow)
---9.Python2代码,绕过HTTPS协议
---9.根据root和密码远程登陆mysql,获取用户名和密码
---10.awk和cut命令对于每行打印进行拆分
---11.也可以基于收集的用户名和密码,爆破ssh、ftp、mysql
---12.文件上传获取WebShell:weevely,php-reverse-shell.php,php/meterpreter_reverse_tcp,mysql INTO OUT文件上传(写)
---13.Linpeas.sh信息枚举:1)Linux version 4.4.0-21-generic2)存在一些账户信息:peter存在sudo提权3)ssh:PermitEmptyPasswords yes(允许空密码登陆)4) path可写入:/usr/local/sbin/cron-logrotate.sh
---14提权:Linux的内核|版本提权、ssh爆破+sudo提权、MySQL的UDF提权、计划任务提权(/etc/cron.d/logrotate,/var/log/cronlog)、Linux永恒之蓝提权
---15.smbclient命令登陆访问samba,enum4linux -a枚举samba信息
