VaspCZ软件详细介绍
一、VaspCZ软件简介
VaspCZ(VaspCheckbyZzd)是源码中科院上海应物所的张正德博士在读博期间为提高科研效率而开发的Vasp辅助程序。该程序包含软件部分和API部分。源码
/zhangzhengde/VaspCZ(VaspCZ)
软件部分提供了Linux字符串用户界面,源码用于在超算平台中快捷提交任务和检查结果。源码包含三个模块:结构优化和静态计算(OS)模块、源码stricmp源码过渡态计算(NEB)模块和测试(Test)模块。源码
API部分为软件部分的源码底层,是源码自己写的一个python库。为有python基础的源码研究者提供了调用相关功能的接口,可以实现自定义计算和编写上层应用。源码库名:VaspCZ.zzdlib,源码包含三个模块:shell模块、源码File模块和Vasp模块。源码API说明文档。源码
/zhangzhengde/VaspCZ/blob/master/docs/VaspCZ_python_API.md(API说明文档)
求githubstar中,如果你觉得本项目不错,烦请点击项目右上角Star,感谢!~反馈调试中,如使用中遇到问题,敬请上报到drivener@.com,再次感谢!~二、VaspCZ软件安装1.安装和卸载
代码下载:
gitclone/zhangzhengde/VaspCZ.git
或者访问githubVaspCZ网址下载,下载后解压:
unzipVaspCZ.zip
进入安装程序目录:
cdVaspCZ
默认VaspCZ安装配置为:
程序安装路径说明VaspCZ软件用户根目录/binlinux主程序vtst用户根目录/binVTST过渡态工具VaspCZ.zzdlib相应python3的site-packages目录pythonAPI接口Vasp.sh用户根目录超算平台PBS系统提交任务的脚本,需要自行准备拷贝到该路径下并命名为Vasp.shPseudoPotential用户根目录生成POTCAR所需的赝势文件的文件夹,需要自行准备并拷贝到该路径下,命名方式为~/PseudoPotential/[赝势名]vcz用户根目录/bin/VaspCZVaspCZ主程序快捷键
如需修改安装配置,请修改install.py第6-行对应设置再进行安装。
安装:
python3install.py
输入快捷键运行程序:
vcz
程序界面如图:
出现程序界面,说明安装成功。
如更新版本,安装前请先卸载:
python3uninstall.py
2.错误提示
(1)权限不足
如果安装时提示:
PermissionError:[Errno]Permissiondenied:'VaspCZ'
请使用管理员账号用以下命令安装。
sudopython3install.py
如无管理员账号,请给当前用户安装独立的python后再安装VaspCZ
源码安装用户独立python3教程
(2)缺少python库
VaspCZ运行需要的库有:
numpy
如果提示:
ModuleNotFoundError:Nomodulenamed'numpy'
使用pip3安装相应库即可:
pip3installnumpy
三、VaspCZ软件使用和示例
本章主要描述软件部分的使用方法和示例,PythonAPI接口部分仅描述功能,接口详细信息参见API说明文档。
1.VaspCZ软件部分(主程序)
软件部分提供了Linux字符串用户界面,用于在超算平台中快捷提交任务和检查结果。包含三个模块:结构优化和静态计算(OS)模块、过渡态计算(NEB)模块和截断能K点测试(Test)模块。
成功安装后输入快捷键即可进入用户界面:
vcz输入模块对应的选项即可进入相应模块。
(1)OptandSta模块
该模块提供了用于快捷进行结构优化(Optimization)计算和静态(Static)计算的功能。
用户界面:
包含功能:
功能标签功能名称1.1产生Vasp输入文件(示例)1.2修改INCAR为静态计算INCAR1.3产生赝势文件POTCAR1.4产生网格文件KPOINTS1.5产生提交任务脚本Vasp.sh1.6仅保留Vasp输入文件1.7前检查并提交任务1.8后检查并打印计算结果OS模块功能示例:
进入到项目自带的examples:(请将"/home/zhangzd/bin"替换你的VaspCZ安装路径)
cd/home/zhangzd/bin/VaspCZ/examples/
OS模块下1.1-1.7功能示例:进入1.1-1.7
cd1.1-1.7
该文件夹为空文件夹。输入:
vcz
1
而后输入1-7数字可以执行相应功能
1.1产生Vasp输入文件(示例)
会在该目录下产生Vasp的5个输入文件的示例:INCAR、POSCAR、POTCAR、KPOINTS和Vasp.sh
注意:生成Vasp.sh文件需要配置:Vasp.sh为PBS系统提交任务的脚本,因不同平台的脚本内容会有所不同,请将适合该平台的脚本正确拷贝到安装目录下,默认为:用户根目录,目录结构如下所示:
用户根目录(或配置的Vasp.sh路径)
|
|Vasp.sh
|...(files)
1.2修改INCAR为静态计算的INCAR
在当前路径的结构优化INCAR上修改为静态计算的INCAR。
修改项目:
SYSTEM=Static
IBRION=-1
NSW=1
#EDIFFG=-0.
1.3产生POTCAR
输入元素列表和赝势类型产生POTCAR。
默认产生适配当前目录下的POSCAR内的元素的POTCAR,默认赝势类型为PBE。
注意:将从安装VaspCZ时配置的赝势路径下读取数据,默认为用户根目录。使用该功能请将赝势文件夹命名为PseudoPotential并按如下目录安装。
用户根目录(或配置赝势安装路径)
|
---PseudoPotential
|
---PBE
||
|---H
|---He
|---...(dirs)
|
---PW
---LDA
---US_LDA_GGA
---...(dirs)
1.4产生KPOINTS
输入网格和方法产生KPOINTS文件。
默认网格为:。
默认方法为:Monkhorst。与Vasp官网一致,方法可只输入开头的字母如:M,可选方法有:M(Monkhorst),A(Auto)
1.5产生Vasp.sh
输入任务所需节点数、核数和任务名产生提交任务脚本Vasp.sh。cf挂房源码
默认:节点数:1核数:任务名:jobname
注意:将从VaspCZ安装时候配置的Vasp.sh路径下读取数据,默认为用户根目录。使用该功能前请正确安装Vasp.sh。
1.6保留Vasp输入文件
删除其他所有文件和文件夹,仅保留Vasp的5个输入文件(INCAR、POSCAR、POTCAR、KPOINTS和Vasp.sh),用于计算出现问题,重新算。
选择该功能后可输入文件名添加需要额外保留的文件。
1.7前检查并提交任务
准备好输入文件后,进行前检查,检查INCAR、POSCAR和POTCAR是否匹配,检查通过后将打印检查信息,并提示是否提交任务。
OS模块下1.8功能示例:退出1.1-1.7并进入1.8
cd..
cd1.8
该文件夹为计算好的Fe-Te体系不同情形下的结构优化结果。
输入运行1.8功能:
vcz
1
8
1.8检查结果
检查当前目录及所有子目录下的结构优化和静态计算的结果,如OUTCAR或者log中有错误(ERROR)或警告(WARNING)或提示所在位置。
输出如图所示:
检查所有路径计算是否完成,输出当前路径、完成状态、离子步数和电子步数。
检查完后,输出当前路径、能量、离子步数、磁矩、POSCAR和CONTCAR原子之间的距离、原子最大受力。
(2)NEB模块
该模块提供了便捷的NEB方法计算过渡态的功能。
用户界面:
包含功能:
功能标签功能名称2.1一键结构优化到静态计算2.2一键静态计算到过渡态计算2.3过渡态振动分析2.4仅保留结构优化输入文件2.5仅保留过渡态输入数据2.6检查过渡态受力情况2.7检查过渡态各态原子距离2.8检查过渡态计算结果2.9检查过渡态振动分析结果
过渡态计算的一般过程:先做结构优化,而后静态计算,最后过渡态计算,如需再振动分析。目录结果如下:
NEB计算目录
|...(files)
---ini
||...(files)
|---Opt
||...(files)
---fin
|...(files)
---Opt
|...(files)
在准备进行过渡态计算的目录下,创建文件夹ini和fin分别代表初态和末态,在它们之下再分别创建Opt文件夹。
计算步骤如下:
1、ini/Opt/下进行初态的结构优化。
2、fin/Opt/下进行末态的结构优化。
3、ini/下在结构优化完成后进行静态计算以获得更准确的能量。
4、fin/下在结构优化完成后末态静态计算。
5、当前路径下在两个静态计算完成后进行过渡态计算。
6、如需,过渡态完成后当前路径下进行振动分析。
NEB模块功能示例:
进入到VaspCZ安装目录examples文件夹下:
cd/home/zhangzd/bin/VaspCZ/examples
2.1一键结构优化到静态计算
如前过渡态的一般过程所示,结构优化完成后,自动进行初末态的静态计算。
进入2.1:
cd2.1
该文件夹下包含一般性的过渡态计算结构,且ini/Opt和fin/Opt下计算已完成。(可用OS模块的1.8功能检查结果)
调用vcz,选择功能2.1:
vcz
2
1
此时:选择1为当前文件夹下的静态计算到结构优化,选择2为一键提交ini/和fin/文件下下的静态计算。
输入节点数、核数和文件名提交任务。默认为:
参数默认值节点数ini/Opt/Vasp.sh中读取核数ini/Opt/Vasp.sh中读取任务名ini/Opt/Vasp.sh中的最后一位改为S2.2一键静态计算到过渡态计算
如前过渡态的一般过程所示,静态计算完成后,自动进行过渡态计算。
进入2.2文件夹:
cd2.2
该文件夹下包含一般性的过渡态计算结构,且ini/Opt、servlet的底层源码fin/Opt、ini/和fin/下计算已完成。(可用OS模块的1.8功能检查结果)
输入vcz调用程序选择功能2.2即可实现自动提交过渡态计算任务。
输入节点数、核数和文件名提交任务。
默认参数为:
参数默认值节点数~初末态结构原子距离和/0.8,取奇数核数ini/Opt/Vasp.sh中读取任务名ini/Opt/Vasp.sh中的最后一位改为N2.3过渡态振动分析
过渡态完成后,计算迁移原子在初态、过渡态和末态中三个自由度上的尝试频率。
使用初态和过渡态的尝试频率可以计算该迁移过程的有效率。
计算方法为:该原子在初态时三个自由度上的尝试频率之积比该原子过渡态时的两个自由度上(共三个自由度,其中一个是虚频)的频率之积。
进入2.3文件夹:
cd2.3
该文件夹下包含已经计算好的过渡态文件。(可用NEB模块的2.8功能检查结果)
调用vcz,并选择功能2.3
输入任务节点数、核数和是否包含末态振动提交任务。
默认参数为:
参数默认值节点数1核数8是否包含末态False
提交任务后会创建vibysis文件夹,内再创建inistate,sadstate和finstate,计算不同结构中迁移原子的振动频率(尝试频率)。
2.4仅保留结构优化输入文件
删除当前目录下的所有文件和文件夹,仅保留ini/Opt/下和fin/Opt下的5个输入文件(INCAR,POSCAR,POTCAR,KPOINTS和Vasp.sh)。
该功能用于过渡态计算错误时回滚到结构优化重新计算。
2.5仅保留过渡态输入数据
删除当前目录下的文件和文件夹,仅保留ini/和fin/文件夹下所有内容。
该功能英语过渡态计算错误时回滚到过渡态重新计算。删除后调用NEB模块的2.2功能即可重新提交NEB任务。
2.6检查过渡态受力情况
NEB计算完成或正在计算中,检查每一离子步,每个IMAGE下的受力状况。
例如:进入examples/2.6-2.9文件夹,调用vcz2.6功能:
cd2.6-2.9
vcz
2
6
输出如图所示:
第一列为离子步,第二到四列为插入态IMAGE、IMAGE和IMAGE在对应离子步下该结构中原子所受的最大力,第五列为前面的二到四列之和。如数据所示,第8步时所有插入态原子最大受力小于0.eV/?,达到INCAR中的收敛要求。
该功能用于检查过渡态计算不收敛时较为合理的结构。例:假如INCAR中设置NSW=,计算达步未收敛,通常第步并非合理的结构。借助此功能可找到最大受力和最小的步数,将该步的结构取出进行进一步分析和计算。
2.7检查过渡态各态原子距离
NEB计算完成或NEB计算生成插入态后,检查每个态之间原子的距离和。
例如:进入examples/2.6-2.9文件夹,调用vcz2.7功能:
cd2.6-2.9
vcz
2
7
选择需要检查的结构,默认为POS,代表POSCAR,可选为CONT,代表CONTCAR。
输出如图所示:
第一列是POSCAR或CONTCAR,第二列是IMAGE,第三列是原子距离和。其值来自于vtst工具,如第一行的值为:
dist.pl/POSCAR/POSCAR
计算前检查POSCAR,用于确保插入过渡态准备,线性插入时各态距离和应相等。
计算后检查CONTCAR,用于查看过渡态中是否有某个态弛豫到不可预测的结构导致过渡态不收敛。
2.8检查过渡态计算结果
NEB计算完成后或计算中,检查当前目录及所有子目录下的NEB计算结果(忽略静态计算和结构优化),如OUTCAR或者log中有错误(ERROR)或警告(WARNING)或提示所在位置,检查完成后输出结果。
例如:进入examples/2.6-2.9文件夹,调用vcz2.8功能:
cd2.6-2.9
vcz
2
8
输出如图所示:
每一个有NEB计算的路径都会输出计算结果。第一列为不同的粒粒筹系统源码IMAGE,第二列为原子最大受力,第三列为该IMAGE总能,第四列为以IMAGE作为参考原点是的能量差,最大能量差即为势垒,对应的IMAGE为鞍点。
如数据所示,该扩散过程(fccFe的自扩散)的扩散势垒为1.eV.
2.9检查过渡态振动分析结果
NEB振动分析结束后,检查当前目录及所有子目录下的原子振动频率(尝试频率)结果并计算有效频率。
例如:进入examples/2.6-2.9文件夹,调用vcz2.9功能:
cd2.6-2.9
vcz
2
9
输出如图所示:
如数据所示,[True,True,False]说明该子目录下包含初态和鞍点态振动分析,不包含末态。
第一个1f2f3f为迁移原子在初态结构中三个方向的振动,振动频率分别为6.,6.和4.THz。第二个1f2f3f为迁移原子在鞍点态结构中三个方向的振动,振动频率分别为6.,4.和5.THz,其中f/i表示第三个方向上为虚频。
该扩散过程原子的有效频率为:初态三个振动之积比鞍点态两个振动之积(排除虚频),结果为:6.THz。
本例是fccFe的自扩散,扩散前后结构等价,初态和末态相同,因此无需算末态振动。
通常体系中对称性不高,如有2个以上缺陷时,初态和末态是不等价的,此时反向方扩散的势垒就是以末态能量为原点时鞍点的能量,对应的有效频率为末态三个振动之积比鞍点态两个振动之积(排除虚频)。(在NEB模块2.3功能中输入参数包含末态时,2.9功能会自动计算反方向扩散的有效频率。)
(3)Test模块
通常,一个体系在大规模进行计算和分析之前,需要进行截断能测试和K点测试确定合适的ENCUT设置和KPOINS设置。
该模块提供了快捷的Vasp截断能测试和K点测试功能。
用户界面:
包含功能:
功能标签功能名称3.1截断能测试3.2K点测试Test模块功能示例:
进入到VaspCZ安装目录examples文件夹下:
cd/home/zhangzd/bin/VaspCZ/examples
3.1截断能测试
做截断能测试的目的是选取一个合适的截断能,截断能决定了Vasp计算过程中被作为赝势处理的电子波函数的范围。截断能太小,计算得到的体系总能不可信,截断能太大,计算中迭代需要花费大量资源。
准备好输入文件(INCAR,POSCAR,POTCAR,KPOINTS和Vasp.sh)后,输入参数即可快捷提交截断能测试任务。
例如:进入examples/3.1文件夹,调用vcz3.1功能:
cd3.1
vcz
3
1
输入参数有:任务名前缀、节点数、核数和截断能列表。
默认参数为:
参数默认值任务名前缀ENCUT_节点数1核数8截断能列表,,,,,,,,,,
注意:截断能列表以英文逗号隔开。
提交任务后会以截断能为名创建文件夹,在每个文件夹内修改INCAR文件中的ENCUT为对应值,而后提交结构优化任务,任务名为任务名前缀截断能。
计算完成后,可以使用OS模块的1.8功能检查各截断能时体系的总能,体系总能之差小于0.eV时,该截断能可选为合适的截断能。
3.2K点测试
做K点测试的目的是选取一个KPOINS设置,K点决定了Vasp计算过程中倒空间的网格分隔点数,体系越大,合适的K点网格一般越小。
准备好输入文件(INCAR,POSCAR,POTCAR,KPOINTS和Vasp.sh)后,输入参数即可快捷提交K点测试任务。8266socket源码
例如:进入examples/3.2文件夹,调用vcz3.2功能:
cd3.2
vcz
3
2
输入参数有:任务名前缀、节点数、核数和K点列表。
默认参数为:
参数默认值任务名前缀ktest_节点数1核数8K点列表,,,,
注意:K点列表以英文逗号隔开。
提交任务后会以K点为名创建文件夹,在每个文件夹内KPOINTS文件中的网格为K点,而后提交结构优化任务,任务名为任务名前缀K点。
计算完成后,可以使用OS模块的1.8功能检查各K点时体系的总能。
2.VaspCZpythonAPI
pythonAPI部分为有python基础的研究者提供了本项目同通用功能的接口。通过库便捷调用相关功能,以实现自定义高通量计算。库名:VaspCZ.zzdlib,包含:shell模块,File模块和Vasp模块
安装和导入
安装软件时自动安装库,安装说明见本说明第三章。
导入:进入python3交互界面或在.py文件中导入库:
importVaspCZ.zzdlibaszzd
此处只列出各模块功能,详细接口说明见API文档
(1)shell模块标签代码功能1.1VaspCZ.zzdlib.getshellResult(code)返回shell命令控制台输出的结果,由每一行组成一个元素的列表。(2)File模块标签代码功能2.1VaspCZ.zzdlib.File.openFile(path,[mode='r',data=None])读取文件或保存文件2.2VaspCZ.zzdlib.File.substitudeData(data,keywords,newline,[mode='default'])传入文件数据,给出关键词和新行,默认情形搜索出现第一次出现关键词的行并替换,mode不等于default是替换全部出现关键字的行,返回替换后的数据。2.3VaspCZ.zzdlib.File.getLine(data,keywords)给出关键词,招傲有关键词的第一行并返回,返回为字符串和所在的行索引。该功能用于获取特定想信息或者用于判断。2.4VaspCZ.zzdlib.getAllline(data,keywords)给出关键词,返回所有带有关键词的所有行,返回为列表。该功能用于选择性获得文件特定行。2.5VaspCZ.zzdlib.getline(data)获取文件数据中是空位的索引。2.6VaspCZ.zzdlib.Vaspsh_path获取VaspCZ软件默认的PBS提交任务脚本Vasp.sh所在的文件路径。(3)Vasp模块标签代码功能3.1VaspCZ.zzdlib.Vasp.decode_POSCAR(POSCAR)解码POSCAR,返回一个基矢、原子种类、原子数目、每个原子的位置(取前4位)3.2VaspCZ.zzdlib.Vasp.modifyPOSCARele(oldele,new_ele)修改当前路径下POSCAR的原子种类,适合批量修改。3.3VaspCZ.zzdlib.Vasp.gennerate_POTCAR([elements=None,pseudotype='PBE'])在当前路径生成POTCAR文件,需要在安装中正确是指赝势文件目录,默认赝势文件目录为用户根目录。赝势目录名为:PseudoPotential。3.4modifyPOSCARSelective_Dynamics(data,indexes)根据输入的数据和索引修改POSCAR,添加SelectiveDynamics,索引所在的位置设置为TTT,其他位置设置为FFF3.5modifyINCARforvibrationysis修改当前目录的INCAR为振动分析的INCAR并保存.3.6VaspCZ.zzdlib.Vasp.checkInputsVasp前检查。提交计算任务前,检查当前目录Vasp的各项输入文件,将计算信息打印到控制台,包含:计算路径、SYSTEM、截断能、ISIF、离子更新方法、是否有磁性、电子收敛标准、离子收敛标准、原子种类个数、POTCAR原子类型、KPOINTS方法、网格大小、任务名、节点数与核数、是否加急。3.7VaspCZ.zzdlib.Vasp.checkandqsub([need_input=True])检查前检查并提交任务。内部集成了上一个检查输入文件函数,使用中推荐该函数。3.8VaspCZ.zzdlib.Vasp.keepInputs([addfile=[],workdir='./'])删除工作目录下的文件,仅保留输入文件。默认保留文件为:INCAR,POSCAR,POTCAR,KPOINTS和Vasp.sh3.9VaspCZ.zzdlib.Vasp.checkNEBperiod遍历当前路径下的所有文件夹,如果发现有neb计算,判断ini和fin分别的计算周期,并返回四、其它说明
该项目已免费开源,开源许可。
欢迎开发和补充,如用于商业用途请注明出处。
如遇bug,敬请将说明、提示代码、截图等信息上报到drivener@.com。
如对程序有疑问,请联系drivener@.com。
作者水平有限,代码有诸多不足之处,还望斧正。
当前版本:1.0.1
Gitlab Cookie 反序列化漏洞研究
Gitlab Cookie 反序列化漏洞研究
在hackthebox的Laboratory靶机中,我遇到了一个利用Gitlab任意文件读取漏洞进行getshell的过程。尽管很多walkthrough提到了漏洞利用,但对getshell原理的解释不够详尽,这让我感到疑惑。因此,我决定深入探究。 漏洞源头始于Hackone上William Bowling (vakzz)的报告,指出UploadsRewriter函数的文件名验证漏洞,导致了任意文件读取。Gitlab最初评估该漏洞价值美元。然而,作者发现当cookies_serializer默认设置为:hybrid时,可能导致远程命令执行漏洞。他提供了一个代码示例,但对不熟悉Ruby的我来说,操作起来并不顺利。 作者通过发送数据包执行命令,结果在带有Gitlab的rails console上实现了命令执行。阅读作者的PDF文档,虽然英文有些吃力,但了解到cookie被分为两部分,第一部分是Base编码的session哈希,第二部分是用secret_token生成的签名。关键在于,客户端控制的cookie允许用户输入自定义序列化对象,只要能伪造签名,攻击者就能在服务器上执行任意代码。而secret_token的存在使这一过程变得可能,但其安全性取决于开发者是否妥善保管。 在Metasploit源码中,我寻找关于Gitlab cookie反序列化攻击的资料,但未果。最终,我直接分析了msf模块multi/http/gitlab_file_read_rce的执行过程。源码中的exploit函数和build_payload函数构建了反弹shell。经过多次测试和解码,我提炼出了Ruby生成payload的简化脚本,最终成功构造了能够执行命令的Cookie。 通过这次研究,我深刻认识到技术能力的不足耗费了大量时间。经过两天两夜的努力,我才解决了这个问题,也更加理解了Gitlab Cookie反序列化漏洞的原理。pwn基础— Got表劫持
随着技术的发展,攻击者越来越重视对软件的深入理解,其中对GOT(全局偏移表)的劫持技术成为了渗透测试中的一种重要手段。本文将对GOT表劫持的基础知识进行深入讲解,包括其原理、流程、检测方法、保护机制、源码分析以及利用脚本的编写和动态调试分析。
程序信息方面,我们以ELF程序为例。由于延迟绑定机制的存在,GOT是可以被修改的,这为攻击者提供了任意控制程序流程的可能性。劫持原理主要分为两步:首先,在未执行漏洞函数前,GOT中的特定地址存储着真实的函数地址;然后,通过执行漏洞函数,将该地址修改为攻击者想要的函数地址,如system函数,从而在再次调用原函数时,其行为被改变了。
检测保护机制时,通常使用检查安全工具来分析程序的安全性。在本例中,程序仅开启了Canary保护和部分RELRO保护,这意味着堆、栈、BSS段代码可执行,但GOT仍然可写。这为GOT劫持提供了条件。保护机制的全称为RELRO(Relocation Read-Only),通过设置全RELRO,可以防止GOT劫持,因为在加载时将所有函数绑定完成,GOT被设置为不可写。
分析源码是理解攻击流程的关键步骤。题目直接提供了源码,通过仔细阅读,我们可以发现puts@plt地址和全局变量name的地址,这是进行GOT劫持和shellcode注入的基础。
编写利用脚本是将理论知识转化为实践的环节。通过编写并执行exp脚本,成功实现了getshell,验证了攻击流程的有效性。动态调试分析提供了更直观的视角,通过在关键位置设置断点,观察内存内容的变化,确认shellcode的注入和目标地址的修改,最终实现目标函数的劫持。
综上所述,GOT表劫持技术是渗透测试领域中一种复杂且强大的攻击手段。通过深入了解其原理、流程、保护机制和利用方法,可以有效提升安全意识和防御能力。对于开发者而言,及时更新安全保护机制,如全RELRO保护,可以有效防止GOT劫持,保障软件的安全性。
网络安全之文件包含漏洞总结
文件包含漏洞属于代码注入漏洞,引入文件包含函数以减少重复代码编写,通过函数将文件包含进来。简单来说,文件内部包含其他文件或多个文件。 然而,除了常规代码文件,任何后缀文件在被包含时都可能被当作代码执行。因此,若允许用户控制包含文件路径,则很可能包含非预期文件,从而执行非预期代码,导致安全问题。 几乎所有脚本语言提供文件包含功能,但在PHP Web Application中居多,而在JSP、ASP中较少,问题在于语言设计的局限性。后续讨论以PHP为主。 文件包含漏洞分为本地文件包含和远程文件包含。 本地文件包含 (LFI):包含文件内容遵守PHP语法规范,任何扩展名都可被解析。 远程文件包含 (RFI):需要开启PHP远程包含功能(php.ini中设置),允许通过URL加载远程文件。无论扩展名如何,只要符合PHP语法规范,解析器都会执行。 PHP文件包含函数包括include()、include_once()、require()和require_once()。这些函数都能进行文件包含,但作用各异。 漏洞示例代码展示如何快速启动解析php的web server,测试LFI和RFI。 利用任意文件读取:如果内容不符合PHP语法,直接返回文件内容,相当于读取任意文件。 使用PHP封装协议:PHP内建URL风格封装协议,如php://filter,用于读取文件源码。 RFI getshell:开启远程包含功能后,直接加载远程文件即可实现getshell。 LFI+文件上传 getshell:利用LFI漏洞,通过上传包含恶意代码的任意文件,利用文件路径实现getshell。 LFI+日志文件 getshell:将恶意代码写入日志文件,通过文件包含漏洞执行。 LFI+/proc/self/environgetshell:利用CGI方式运行时的请求头信息实现getshell。 LFI+phpinfo getshell:结合LFI和phpinfo()页面,通过POST上传文件实现getshell。 LFI+session getshell:利用控制session内容实现getshell,通过检查session保存路径进行。 绕过指定前缀:使用../回溯符跳转到其他目录。 指定后缀:利用伪协议zip://和phar://绕过限制,或在php版本限制下使用长度截断。 修复建议:过滤特殊字符、关闭远程包含功能、使用open_basedir配置限制文件访问范围、设置文件白名单。 网络安全学习路线图:初期入门,掌握基本技术后,逐渐深入,包括视频学习、白帽子书籍、安全大厂内部资源、面试题、CTF题目、工具包、应急响应等。 网络安全学习资源:免费领取全套G学习资料包,涵盖入门到进阶的所有内容,详情请访问官方链接。记一次任意文件下载到Getshell
任意文件下载是一种常见的Web攻击技术,旨在窃取服务器上任意文件内容。攻击者利用程序漏洞,通过构造恶意请求,使程序将任意文件发送给攻击者。一旦成功利用漏洞,攻击者即可获取敏感信息。
在日常渗透测试中,应关注每个功能点,检查下载功能是否存在漏洞。此漏洞允许获取源码、数据库配置文件及系统敏感文件,为后续渗透测试提供线索。
开始测试时,首先访问首页资料下载页面,尝试点击下载功能。在测试过程中,发现敏感路径并尝试下载index.php文件,成功下载后,寻找ThinkPHP数据库配置文件。
通过搜索ThinkPHP3.2目录结构,最终在/Application/Common/Conf/目录下找到了数据库配置文件config.php。继续尝试连接数据库,获取账号密码。发现数据库端口已开放,成功连接数据库后,查看管理员账号密码。
在获取账号密码后,开始寻找后台入口。目录扫描未找到,转向前台深入查找。经过长时间的尝试,最终发现后台入口隐藏在数据库配置文件中,通过细致检查,成功找到后台。
进入后台后,寻找并记住功能点。使用Webshell上传功能,将jpg文件修改为php后上传,成功上传Webshell但未显示回显。在前台找到刚刚上传的分类,复制下载链接,得到Webshell地址。
至此,完成任意文件下载到Getshell的过程,渗透测试结束。
盘点那些渗透测试中的奇*技巧
总结下渗透测试中的一些小技巧,仅做总结。
0x php文件包含姿势
这类姿势国外黑阔早有总结,比如包含上传的文件,当然文件可控。利用php封装协议php://input和data://,包含post数据造成php命令执行,当然allow_url_include选项需要打开。包含log文件也是可以,当我们提交恶意代码时也会被记录,于是包含记录了恶意代码的log文件是个好主意。包含/proc/self/environ文件:这需要PHP运行作为一个具有cgion/proc伪文件的系统且PHP脚本有权访问这些伪文件。包含会话文件需要攻击者能控制会话中的任何字符串值(注入代码,例如phpinfo(),会话文件必须存放在serializedsession文件且PHP脚本能够访问会话文件(通常是/tmp/ sess_SESSIONID文件)。包含其他由php应用创建的文件,只要你能想到的,都可以尝试创建然后包含他,比如数据库文件,缓存文件,应用程序级别的日志。
0x .htaccess文件突破黑名单解析
因为是黑名单,自定义.htaccess上传,内容为test.jpg文件,没有扩展名,内容是一句话,这个时候就成功绕过。
0x php流封装绕过截断
主要利用了PHP的一个流封装特性,可以参考PHP官方文档中的Example #3。假设存在文件包含的代码,但%无法截断,只能包含 xxxx.html.php。首先新建hello.html.php,内容为phpinfo();然后压缩成zip,结构如下图。然后访问网址,成功包含压缩文件内的hello.html.php。把我们输入的变量和include后面的变量合起来就是zip://test.zip#hello.html.php,代表当前目录下的test.zip压缩包里面的hello.html.php,于是包含成功。
0x 通用防注入系统getshell
相信许多朋友渗透测试都遇到过这种情况,系统做了数据提交记录,通过阅读类似程序的源码得知数据记录在sqlin.asp。于是想到直接提交一句话木马,但没有成功。提交and 1= ,通过菜刀连接sqlin.php即可。
0x iis+php黑名单上传突破
在php+window+iis环境下,双引号(“>”)等价于点号(“.”),大于符号(“>”)等价于问号(“?”),小于符号(“<“)等价于星号(“*”)。虽然有这么多好玩的东西,但这特性只能用于文件上传时覆盖已知的文件,于是这特性便略显鸡肋。但通过一系列的测试发现,P牛已经给出完美利用的方法。首先利用特殊办法生成一个php文件,然后再利用该特性将文件覆盖。可问题来了,怎样生成php文件呢?如果可以直接生成php文件的话,干嘛还要利用那什么特性?别急,办法总是有的。我们知道在文件上传时,我们往往会考虑到文件名截断,如%等。对!有的人可能还会用冒号(“:”)去截断,如:bypass.php:jpg。但你知道吗?冒号截断产生的文件是空白的,里面并不会有任何的内容。虽然生成的php文件里面没有内容,但是php文件总生成了吧,所以我们可以结合上面所说的特性完美成功利用。按照上面提供的思路,实现本地测试地址:http://**.**.**.**/upfile.php 环境:Windows+IIS7.5。首先利用冒号生成我们将要覆盖的php文件,这里为:bypass.php,点击forward后,可以看见成功生成空白的bypass.php文件。利用上面的系统特性覆盖该文件,从上面已经知道“<”就等于“*”,而“*”代码任意字符,于是乎..我们可以这样修改上传的文件名,点击go..,即可成功覆盖bypass.php文件。
2024-12-28 23:57
2024-12-28 23:47
2024-12-28 21:53
2024-12-28 21:42
2024-12-28 21:35