zoukankan      html  css  js  c++  java
  • 破解密码,营救模式,初识脚本

    Linux密码破解步骤

    1. 重新启动系统
    2. 开机倒数时间内,敲任意键
    3. 按字母e去编辑
    4. 选择kernel 开头的行,再次按字母e 编辑 ,然后敲空格,输入数字1,再敲回车。进入单用户模式,破解密码。此模式绕过密码验证
    5. 按字母键b 去引导进入系统
    6. 直接passwd 修改root用户的密码
    7. 修改密码后,输入init 5或者init 3 进入系统,或者reboot重新启动系统

    vim /etc/inittab(必记!!)

    • 0 关机(不能把默认设置成这个);
    • 1 单用户模式 —》破解密码的时候(单用户模式还是要登录root)(绕过了shadow文件)(相当于windows中进PE模式);
    • 2 多用户模式。不能使用NFS功能(网络功能);
    • 3 完全多用户模式,可以使用网络功能。纯字符界面;
    • 4 unused 没有的;
    • 5 图形界面;
    • 6 重新启动(不能把默认设置成此项)。

    所以,在终端输入:

    • init 0 :关机 (/poweroff/halt/shutdown -h now都是关机)
    • init 6 重新启动(/reboot/shutdown -r now)
    • init 3 进入字符界面
    runlevel 查看当前运行级别
     会看到:1  S  ---》1代表开机进入的运行级别  S 代表当前的运行级别
     若是: S  3  ---》说明是从单用户切换到运行级别3

    营救模式

    eg:删除了/etc/passwd文件,进不去系统

    如何进入营救模式?(rescue mode )

    1. 使用光盘进入
    2. 设置从光盘启动(快速按下ESC键,选择从光盘启动) 注意!按一次ESC即可,注意,不好按!太快了!

    放入系统光盘;
    选择rescue installed system 进入营救模式
    (centos需要选择)rescue method –》local cd/dvd
    这里写图片描述
    (敲)

        chroot /mnt/sysimage  --》切换根环境到原来本身系统里的根
        cp /etc/passwd-  /etc/passwd
        exit
        reboot

    小结:

    单用户模式—》破解密码–》看/etc/passwd,不看/etc/shadow
    营救模式–》进入不了系统了


    写脚本

    作业1:
    写一个脚本新建5个用户,用户名的前缀为zhang 例如:zhang1 zhang2 到zhang5,5个用户的密码为123456zhang,家目录在/zhang目录下与用户名同名。

       1.需求分析
            1.使用什么命令来实现,什么功能算法
                useradd 、passwd 、for
        2.完善功能
        3.开始给脚本起名字
            create_user.sh
        4.运行调试
    方法一
    #!/bin/bash
    #function:create system user
    #author:cali
    #version:1.0
    mkdir /zhang
    for i in `seq 5`
    do
     useradd -d /zhang/zhang$i zhang$i
    echo "123456zhang"|passwd zhang$i --stdin
    done
    方法二(加强版)
    #!/bin/bash
    echo "please input system user name"
    read Name
    
    [ -d /zhang ]&&echo "now,beginning to create user"||mkdir /zhang
    for i in {1..5}
    #for i in `seq 5`
    #for i in $(seq 5)
    do
            if id $Name$i &>/dev/null
            then
                    echo "sorry,user $Name$i is exist,please input name again"
                    exit
            else
                    useradd -d /zhang/$Name$i $Name$i
                    echo "123456zhang"|passwd $Name$i --stdin &>/dev/null
                    echo "create $Name$i sucess!"
            fi
    done

    计时小脚本900秒。

    echo 实验开始
    for i in `seq 900`   ---》``反引号:优先执行反引号里面的命令:
    do
          echo 过去了$i秒
          sleep 1   --》暂停一秒
    done
    echo  timeover

    awk是linux下的一个文本处理工具,主要用来截取想要的文本。

    • -F : 是指定分割符号;
    • $1 $2 是第几个
    • cmd1 && cmd2 作用:如果cmd1命令执行成功就执行cmd2命令
    • cmd1 || cmd2 作用:如果cmd1命令执行不成功就执行cmd2命令
    • cmd1 &&cmd2 ||cmd3 作用:如果cmd1执行成功就执行cmd2,如果cmd1执行不成功就执行cmd3命令
    • (mkdir aa mkdir bb mkdir ccc) 小括号的作用就是看做一个整体,只要括号内最后一条命令执行成功,则echo $? 就等于0.

    if 命令

    编写2个脚本
    实现批量新建用户,可以自定义输入用户的名字、新建用户的数量、用户的密码。输入密码的时候不能显示出来。

    if [ 条件];then
            command1
            command2
            ......
    else
            command1
            command2
            ......
    fi

    [条件] 其实就是执行命令。当条件成立(命令执行成功),就执行第1个command1及后续命令;如果不成立,就执行else后面的command1及后续命令;
    $? 是上一条命令的返回值,其中 0 代表命令执行成功,非零值代表不成功;
    ;分号是 命令连接符,不管前面的命令执行成功与否都会执行后面的命令!!!

    执行脚本的方法

    • bash abc.sh
    • ./abc.sh
    • . abc.sh
      chmod +x adduser.sh  授予可执行权限
    # bash -x useradd_feng.sh  调试脚本。可以看到每条命令的执行过程

    练习:

    1.编写脚本实现如下新建用户的功能:
      1.接受用户输入的用户名,例如liu  ,将liu作为用户名的前缀
      2.接受用户输入的需要创建的用户数量,例如:20  ,意思就是要新建20个用户
      3.接受用户输入的想要给所有用户设置的密码,例如:123456a
    #!/bin/bash
    read -p "please input username:" name
    read -p "please input the number:" num
    read -sp "please input the passwd:" passwd
    for i in `seq $num`
    do
          useradd $name$i
    if [ $? = 0 ]
    then
          echo "useradd $name$i is OK"
    else
          echo "useradd $name$i failed"
          continue
    fi
          echo $num |passwd $name --stdin &>/dev/null
          echo "passwd $name$i is ok!"
    done

    2.如果root的密码忘记了,如何破解?—–》虚拟机里完成,密码破解。

    密码破解步骤
    1.重新启动系统
    2.开机倒数时间内,敲任意键
    3.按字母e去编辑
    4.选择kernel 开头的行,再次按字母e 编辑,然后敲空格 输入数字1,再敲回车。进入单用户模式,破解密码。此模式绕过密码验证
    5.按字母键b 去引导进入系统
    6.直接passwd 修改root用户的密码
    7.输入init 5或者init 3 进入系统,或者reboot重新启动系统

    3.编写删除用户的脚本。

      1.接受用户输入的用户名,例如liu  ,将liu作为用户名的前缀  
      2.接受用户输入的需要删除的用户数量,例如:20  
      3.要求有显示所有系统里用户的功能,删除前先显示下系统里所有的用户,然后接受用户输入的用户名,开始去删除。
      4.如果用户不存在给予提醒,不能删除不存在的用户
    #!/bin/bash
    #function:To delete the user
    #author:liupeng
    #version:1.0
    read -p "please input delete  username:" name
    read -p "please input the number:" num
    for i in `seq $num`
    do
            userdel -r $name$i
    if [ $? = 0 ]
    then
            echo "userdel $name$i is OK"
    else
            echo "userdel $name$i failed"
            continue
    fi
    done

    4.请编写一个脚本实现如下功能:

    在屏幕上显示uid 大于500的用户的名字和uid号及家目录的位置,例如下面的格式输出
     xiaoliu   uid is 500   home directory is /home/xiaoliu
     xiaohei   uid is 600   home directory is /home/xiaohei
     wuji   uid is 900   home directory is /home/wuji
      ......

    方法一:

    #cat /etc/passwd| sort -n -k 3 -t:|cut -d : -f1,3,6|awk -F ':'  '{if($2>=500)print "$1 "   uid is  "$2 "   the home dir is "$3"}'
    #cat /etc/passwd| sort -n -k 3 -t:|cut -d : -f1,3,6|awk -F ':'  '$2>=500&&$2<=1000{print "$1 "   uid is  "$2 "   the home dir is "$3"}'

    方法二:

    [root@teacher lianxi]# cat hecheng_gt500.sh
    #!/bin/bash                                                                    
    #function:Statistics  user uid great than 500
    #author:naige
    #version:1.0
    cat passwd |cut -d ":" -f 1,3,4,6 |sort -n -t: -k2 >tongji.txt
    cp -f /etc/passwd ./
    #username
    username=($(cat tongji.txt |cut -d: -f1))
    #uid
    home=($(cat tongji.txt |cut -d: -f4))
    uid=($(cat tongji.txt |cut -d: -f2))
    #gid
    #gid=($(cat tongji.txt |cut -d: -f3))
    #home
    echo "${username[$i-1]}  uid is ${uid[$i-1]}  home directory is ${home[$i-1]}"
    for i in `seq ${#username[@]}`
    do
         if ((  ${uid[$i-1]} > 500 ))
    
         then
         fi
    done        
  • 相关阅读:
    java一个字符串中出现次数最多的字符以及次数
    按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
    Java 替换空格
    Java中equals()和“==”区别
    ramfs和tmpfs的区别
    C语言中的nan和inf使用
    Abp中SwaggerUI的多个接口文档配置说明
    Abp中SwaggerUI的接口说明文档配置
    Abp中SwaggerUI的接口文档添加上传文件参数类型
    Abp中自定义Exception的HttpStatusCode
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546508.html
Copyright © 2011-2022 走看看