2024年网络安全最新AFL++简单学习_afl++ iot(2),直面春招

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

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

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

make distrib还构建了 FRIDA 模式、QEMU 模式、unicorn_mode 等。如果你只想要普通的 AFL++:
make all
如果您想要编译一些辅助工具但对纯二进制目标不感兴趣,请选择:
make source-only

构建目标选项
  • all:主要的 AFL++ 二进制文件和 llvm/gcc 工具
  • binary-only:仅二进制模糊测试的所有内容:frida_mode、nyx_mode、qemu_mode、frida_mode、unicorn_mode、coresight_mode、libdislocator、libtokencap
  • source-only:用于源代码模糊测试的所有内容:nyx_mode、libdislocator、libtokencap
  • distrib:一切(适用于仅二进制和源代码模糊测试)
  • man:从程序的帮助选项创建简单的手册页
  • install:安装使用上面的构建选项编译的所有内容
  • clean:清理所有已编译的内容,而不是下载的内容(除非不在结帐时)
  • deepclean:清理所有内容,包括下载
  • code-format:格式化代码,请在提交并发送 PR 之前执行此操作!
  • tests:运行测试用例以确保所有功能仍然正常工作
  • unit:执行单元测试(基于cmocka)
  • help:显示这些构建选项
编译选项

STATIC - 编译 AFL++ 静态
CODE_COVERAGE - 编译代码覆盖率目标(请参阅 docs/instrumentation/README.llvm.md)
ASAN_BUILD - 使用内存清理程序编译 AFL++ 以进行调试
UBSAN_BUILD - 使用未定义的行为清理程序编译 AFL++ 工具以进行调试
DEBUG - 无优化、-ggdb3、所有警告和 -Werror
LLVM_DEBUG - 显示 llvm 弃用警告
PROFILING - 使用分析信息编译 afl-fuzz
INTROSPECTION - 使用突变内省编译 afl-fuzz
NO_PYTHON - 禁用 python 支持
NO_SPLICING - 禁用 afl-fuzz 中的剪接突变,不建议用于正常模糊测试
NO_UTF - 不要在状态屏幕中使用 UTF-8 进行线条渲染(回退到普通 AFL 的 G1 框绘图)
NO_NYX - 禁用构建 nyx 模式依赖项
NO_CORESIGHT - 禁用构建 coresight(仅限arm64)
NO_UNICORN_ARM64 - 禁用在arm64上构建独角兽
AFL_NO_X86 - 如果在非 intel/amd 平台上编译
LLVM_CONFIG - 如果您的发行版不使用 llvm-config 的标准名称(例如 Debian)

AFL++使用

测试目标及其说明

  • Binary-only: fuzzing_binary-only_targets.md
  • GUI programs: best_practices.md#fuzzing-a-gui-program
  • Libraries: frida_mode/README.md
  • Network services: best_practices.md#fuzzing-a-network-service
  • Non-linux: unicorn_mode/README.md

选择测试目标

例如: Cisco RV130 VPN 路由器的固件:https://software.cisco.com/download/home/285026141/type/282465789/release/1.0.3.55?i=!pp
该文件名为RV130X_FW_1.0.3.55.bin
使用binwalk提取二进制文件,jsonparse和xmlparser1二进制文件进行模糊测试,由于没有源码,所以需要使用qemu模式
例如:
TP-Link SR20路由器的固件,固件的下载地址如下:https://static.tp-link.com/2018/201806/20180611/SR20(US)_V1_180518.zip

$ binwalk -Me tpra_sr20v1_us-up-ver1-2-1-P522_20180518-rel77140_2018-05-21_08.42.04.bin

了解目标接受的输入

qemu-arm-static和 --help 参数运行xmlparser1会显示用法
在这里插入图片描述
我们可以创建一个测试 XML 文件并运行xmlparser1。
在这里插入图片描述

收集语料库

对于基于变异的模糊测试工具而言,需要为其准备一个或多个起始的输入案例,这些案例通常能够很好的测试目标程序的预期功能,这样我们就可以尽可能多的覆盖目标程序。

收集语料的来源多种多样。通常目标程序会包含一些测试用例,我们可以将其做位我们初始语料的一部分,此外互联网上也有些公开的语料库你可以收集他们做为你的需要。

关于语料库的主动性选择,这个更多需要你对fuzzing 目标内部结构的了解。例如你当你要fuzzing的目标对随着输入的规模内存变化非常敏感,那么制作一批很大的文件与较小的文件可能是一个策略,具体是否是否有效取决于你经验、以及对目标的理解。

此外,需要注意控制语料库的规模,太过庞大的语料库并不是好的选择,太过潘达的语料库会拖慢fuzzing的效率,尽可能用相对较小的语料覆盖更多目标代码的预期功能即可。

一些常见的在线样本集

https://files.fuzzing-project.org/
http://samples.ffmpeg.org/
http://lcamtuf.coredump.cx/afl/demo/
https://github.com/MozillaSecurity/fuzzdata
https://github.com/strongcourage/fuzzing-corpus
https://github.com/Cisco-Talos/clamav-fuzz-corpus
https://github.com/mozilla/pdf.js/tree/master/test/pdfs
https://github.com/codelibs/fess-testdata
https://github.com/google/honggfuzz/tree/master/examples/apache-httpd

精简语料库

在AFL++中可以使用工具afl-cmin从语料库中去除不会产生新路径和覆盖氛围的重复输入,并且AFL++官方提示强烈建议我们对语料库唯一化,这是一个几乎不会产生坏处的友谊操作。
具体的使用如下:

  • 将收集到的所有种子文件放入一个目录中,例如 INPUTS。
  • 运行 afl-cmin:

# 如果要通过模糊测试来调用目标程序 bin/target INPUTFILE ,请将目标程序将从中读取的 INPUTFILE 参数替换为 @@
afl-cmin -i INPUTS -o INPUTS_UNIQUE -- bin/target -someopt @@
# 如果目标从 stdin(标准输入)读取,只需省略 , @@ 因为这是默认值:
afl-cmin -i INPUTS -o INPUTS_UNIQUE -- bin/target -someopt

构建输入输出文件

需要自行构建输入文件夹:用来存储初始种子,即将上述种子存到一个文件夹中
需要构建输出文件夹:用来存储测试反馈与记录

运行AFL++

如果程序从 stdin 读取,afl-fuzz请像这样运行:

./afl-fuzz -i seeds_dir -o output_dir -- \
/path/to/tested/program [...program's cmdline...]

要添加字典,请添加-x /path/to/dictionary.txt到 afl-fuzz。
如果程序从文件获取输入,则可以将其放入@@程序的命令行中;AFL++ 将为您放置一个自动生成的文件名。
以上面目标为例:


$ QEMU_LD_PREFIX=./squashfs-root/ /home/iot/tools/AFLplusplus/afl-fuzz -Q -i squashfs-root/bmp-input/ -o squashfs-root/bmp-output/ -- ./squashfs-root/usr/bin/bmp2tiff @@ /dev/null # root权限下
# -Q:适用qemu模式
# -i:输入文件夹
# -o:输出文件夹
# @@:表示将用来替换的样本
# /dev/null:忽略错误信息

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值