软安测试实验

实验三

软件安全测试实验:使用AFL++对c代码程序进行模糊测试

在我的服务器上安装AFL++

对afl_test进行测试,创建输入输出文件夹:fuzz_in和fuzz_out,用来存放程序的输入和fuzz的输出结果

准备开始对这个有漏洞的c文件进行模糊测试

AFL++ 检测到系统设置中,/proc/sys/kernel/core_pattern 文件的内容会将崩溃的核心转储(core dump)发送到外部程序(通常通过管道 | 指定的路径)。这会导致 AFL++ 在检测崩溃时出现延迟或误判。为了正常运行,AFL++ 要求直接将核心转储写入磁盘。 使用 AFL++ 提供的环境变量来跳过 core_pattern 的检测:

export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1
afl-fuzz -i fuzz_in -o fuzz_out ./afl_test

再次开始

几秒钟跑完了…

发现是内存占用太多被OOM鲨了,按gpt说的弄了个啥交换空间

可以去输出目录里看相关情况

对curl进行fuzz

找到了入口程序是src/tool_main.c

AFL_INIT(argc, argv); 放在 main() 函数的最开始处,在进行任何其他初始化之前。这样,AFL++ 将能够在程序开始时就对命令行参数进行模糊测试。

处理完依赖问题通过下面的命令,构造makefile,之后make生成curl

CC=afl-gcc ./configure --disable-shared --with-ssl=/usr

提示说gcc过时了让使用clang

CC=afl-clang-fast ./configure --disable-shared --with-ssl=/usr

make得到curl,创建测试参数,只测试-A

 echo -en "-A\x00" > ./in/testcase

en 选项用于确保 echo 不添加额外的换行符,并且 \x00 表示字符串的结束符(null 终止符) 开始进行fuzz

afl-fuzz -i ./in -o ./out ../curl/src/curl

通过设置 AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1,可以跳过崩溃信息的收集,避免因外部处理导致的延迟。 跑一晚上看看实力

早上起来看了一眼,好像效果还彳亍

想挂后台

export AFL_AUTORESUME=1
afl-fuzz -i ./out/default -o ./out/default ../curl/src/curl
不太成功

afl-fuzz -i - -o ./out/default ../curl/src/curl 这个可以/

看了一下引发崩溃的样例,都没什么实际意义貌似,还是转回第一个一开始的程序了

afl-clang-fast -g -fprofile-arcs -ftest-coverage afl_test.c -o afl_test

使用 -t 参数来限制单个测试用例的最大执行时间,避免程序长时间占用 CPU 资源。afl-fuzz -i ./fuzz_in -o ./fuzz_out -t 1000 ./afl_test

跑了半小时

功保存了 8 个崩溃样本。测试过程中没有超时问题,且当前没有发现 hang(卡死)

实验二 dirty COW

应该不用交报告

修改只读文件/zzz

匹配11123修改为******

运行几秒后ctrl+c,成功(一开始试了几遍11111不知道为什么没成功,可能是因为11111有多个匹配?)

获取root

创建用户test111

尝试将uid从1001修改为0,打开的文件替换为/etc/passwd

好像不能直接写0为什么从1001改成0001了,试一下0000

修改成功

实验一

软件安全测试实验一:SEED Labs-Shellshock Attack

查看IP地址为192.168.88.142

按要求给出myprog.cgi

给足755权限后curl它输出Hello World

再给出myprog_environ.cgi

使用culr时的-A选项可以更改环境变量HTTP_USER_AGENT

尝试获取/etc/shadow

curl -A “() { echo Shellshock;};/bin/ls -l” http://192.168.88.142/cgi-bin/myprog.cgi

curl -A ”() { echo Shellshock;}; echo Content-type:text/plain; echo; /bin/ls -l” http://192.168.88.142/cgi-bin/myprog.cgi

对两个cgi都行,不过对于第二个cgi攻击成功后不会再打印环境变量

执行cat命令打印、etc/shadow权限不足,

为啥现在不行了

居然是因为大括号后面没有空格,之后再去细看原因吧

另开一台虚拟机,准备远程反向shell,首先确保kail(192.168.88.140)可以访问Ubuntu(192.168.88.142)

方便起见后面都在kali操作了

果然,我是www-data,没有高级权限去直接获取shadow

尝试远程shell

攻击机监听

下面的命令可以建立连接。但是现在还是没有提权

由于是老版本,尝试一下通过内核漏洞提权阿巴

我的虚拟机网络配置还是有问题,之后有时间看看,这次的解决方式是外部下载dirtyCOW的代码zip拖入攻击机后通过在攻击机开通http服务器让反向shell获得的www-data下载pokemon(马上用来提权的内核漏洞代码)到/tmp目录下

给pokemon加一个执行权限

目标机上给sudoers备个份,怕玩坏了

好像不太行。明天再看看

换了个方法,还是内核漏洞,cve-2017-16995

找了个c测试运行的时候被杀掉了,换一个试试

换回dirtycow了

ubuntu靶机打不开了。。

重装了,下次记得点快照,这次不知道怎么不小心点到关机了,当时应该是改变了什么系统设置没保存,还好之前下载了八小时的压缩包没有删除,

重装后的新分配ip是192.168.88.143

重新连接上了,继续试一下dirtycow

将cc1添加到环境变量后编译成功了

好像成了

成不了一点

打开一个伪终端后可以提权,root密码是seedubuntu

,ganjieyoudianmianxiangjieguozhaodaanl

对于bash

-A依旧可以修改,但是不再能成功攻击