1、安装fortify并以pikachu靶场为目标进行练习熟练使用fortify
安装
安装后
复制fortify-common-23.2.0.0023:
将fortify-common-23.2.0.0023.jar⽂件分别将下⾯路径的⽂件覆盖
C:\Program Files\Fortify\Fortify_Apps_and_Tools_23.2.0\Core\lib C:\Program Files\Fortify\Fortify_SCA_23.2.0\Core\lib
更新规则:
解压FortifyRules_zh_CH_2023.1.1.0001(离线规则库).zip 规则库,先删除C:\Program Files\Fortify\Fortify_SCA_23.2.0\Core\config⽬录下的ExternalMetadata和rules⽂件夹,然后把解压的ExternalMetadata和rules⽂件夹拷⻉到该⽬录下
运⾏:
C:\Program Files\Fortify\Fortify_Apps_and_Tools_23.1.0\bin 下的auditworkbench.cmd 即可开启GUI界⾯,可以通过⿏标右键将该⽂件的快捷⽅式发送到桌⾯
扫描后的界⾯
2、安装并使用rips、seay工具对pikachu进行审计
rips:
将rips文件复制到web⽬录,创建网站。
subdirs:扫描所有⼦⽬录。
verbosity level:选择扫描结果的详细程度,缺省为1(建议就使⽤1)。
vuln type:选择需要扫描的漏洞类型。⽀持命令注⼊、代码执⾏、SQL注⼊等⼗余种漏洞类型,缺省为全部扫描。
code style:选择扫描结果的显示⻛格(⽀持9种语法⾼亮)。
/regex/:使⽤正则表达式过滤结果。
输⼊⽬录后可以查看扫描结果:
seay:
新建项⽬并打开pikachu源码⽬录
点击"⾃动审计",然后点击“开始”,软件开始运⾏分析整个项⽬
查看扫描结果
3、复习php代码审计函数精讲相关内容,重点是SESSION验证绕过、urldecode二次编码绕过、str_replace绕过
SESSION验证绕过:
看关键的⼀⾏ if ($_GET['password'] == $_SESSION['password'])
需要session中的password值和⽤户传的⼀样,就可以成功拿到flag,所以只需要删掉session值,或者修改session值为⼀个不存在的session,这样服务器获取不到session,则password为空,然后传⼀个空的password的进去即可拿到flag。
利⽤原理如下:在PHP配置中的默认情况下,Session是⽤Session ID来确定当前对话所对应的服务器Session,sessionID可在cookie中找到,当删除cookie中的sessionID后,$_SESSION[‘password’]就会返回空,我们同样传⼊空的password就能绕过了。因此 payload 为 password= 且 删除 cookie的值。
urldecode二次编码绕过:
由于浏览器的⼀次urldecode,再由服务器端函数的⼀次decode,造成⼆次编码,⽽绕过过滤。 如%2527,两次urldecode会最后变成',我们将 flag 中第⼀个字符 m 进⾏url⼆次编码,URL编码为:%6d,⼆次编码为%256d,绕过http://下x.x.x.x?id=%256dagedu
str_replace绕过:
经常出现在字符过滤等功能逻辑中,由于仅仅过滤⼀次,因此容易被绕过。
..././../../过滤后:../
4、搭建并部署微商城系统并结合课件审计复习sql注入漏洞、文件上传漏洞
环境搭建
上传源码到⽹站根⽬录并解压
创建数据库mall并导⼊数据库⽂件到数据库
修改数据库链接⽂件:/Mao/common.php
sql注入漏洞:
下⾯代码中,直接使⽤户提交的search参数并拼接到了sql语句中,造成sql注⼊漏洞
goods.php id参数存在sql注⼊漏洞
⽂件上传漏洞:
下⾯代码没有过滤⽤户上传的⽂件,导致任意⽂件上传
5、搭建bluecms并分析sql宽字节注入漏洞原理
环境搭建
安装:http://bluecms/install/,根据导航⼀步步安装即可,但是最后⼀步会出现空⽩⻚⾯ ,可以注释掉下⾯⽂件中step5 中的incude代码
sql注⼊漏洞(宽字节):
由于默认使⽤的是gbk编码,我们已知当编码为gbk等双字节编码时,容易发⽣宽字节注⼊。(宽字节原理:两个字节以上叫宽字节,当测试的时候,输⼊“%df'”,这个时候如果php函数是使⽤的addslashes()的时候,会在冒号的前⾯加上’\’。也就变成了%df' 。对应的编码是%df%5c’.这时候⽹站字符集是GBK,mysql使⽤的是gbk编码的时候,默认认为两个字符为⼀个汉字。当⽹站过滤的机制是采⽤转义\的时候,我们可以在⽹站添加的转义符号前⾯构造⼀个%xx使得变成%xx%5c⽽被mysql认为是⼀个汉字,从⽽绕过转义。宽字节注⼊最常⽤的是%df。