AFLNET lightftp项目报错解决方法

news2024/11/17 6:51:19

在学习AFLNET的时候,本人尝试对示例项目中的lightftp进行fuzz,而后出现如下报错:

AFLNet - the states hashtable should always contain an entry of the initial state

在github项目issue里看到了有人的问题和我一摸一样,Stack Overflow里也有人问题和我相同,但是始终没有找到解决办法:
在这里插入图片描述

作者的建议是去看一下AFLNET和服务端通信的流量是不是出什么问题了,于是用tcpdump截取流量查看了一下,的确发现了问题,我的种子文件是一段和lightftp服务端正常通信的流量:
在这里插入图片描述

但是抓取到的AFLNET与server的流量如下:
在这里插入图片描述

连接上服务端之后给出的信息不是ready二十表示连接已达到最大限制数量,所以导致没有任何有效状态返回给AFLNET,最后AFLNET爆出上图所示的错误。

随后在fftp.conf文件中找到最大登录用户数量限制:
在这里插入图片描述
默认为10,按理来说应该是够的,改成一百之后试了一下,错误仍然存在,没有得到解决。

于是阅读了一下lightftp的源码,查看其中的ftpserver.c文件:
在这里插入图片描述

通过搜索报错信息找到这里,然后发现应该是rv!=0导致的报错,后来增加了一句调试代码之后发现只打印了一次,那么就意味着不是maxuser不够用,而是出现了其他问题导致rv不是0,然后break之后执行了patch进去的两行代码,导致程序直接退出了。所以尝试将这两句注释掉

在这里插入图片描述
但是执行之后还是不行,此时发现,如果自己开一个server,然后去启动AFLNET是可以跑得,界面如下:
在这里插入图片描述

但是仍然有问题,total path那里一直是1,也就是说虽然AFLNET和服务端交互了,但是由于是自己启的服务端,所以并没有任何的覆盖率反馈和路径检测,虽然从启动的服务端能够看出来的确在fuzz,但是效率必定很差,并且能否检测出crash也说不好。继续对lightftp源码进行调试,既然问题出在pthread_create的返回值上,那么就将其返回值记录下来看看,继续对源码进行如下修改:
在这里插入图片描述

然后去查看log,发现返回值一直是11,并不是0,11表示的是线程已满,不能再继续新建线程,按理来说这种报错应该去pthread_join,但是对于作者给出的patch能够看出来,显然我们希望的形式是这个server每执行一次就关闭一次,所以按理来说这里的线程应该只有main里的一个和ftpmain里的一个,也就是最多两个线程才对,既然能走到这里,可以确定的是main里的线程是正确创建了的,为什么fftp这个程序连两个线程都创建不起来呢?

后来猜测也许和AFLNET的运行机制有关,AFLNET会通过fork的形式启动fftp,也就是服务端,猜想会不会是fork出来的进行对线程数量以后特殊要求呢?

既然如此,反正我们每次也只需要一个线程,那干脆将ftpmain里的线程去掉,直接去调用ftp_client_thread,不通过线程的方式,于是将源码修改成下面的形式:
在这里插入图片描述

这里注意已经将之前作者的patch又改回来了,即原作者的patch文件不作任何修改。

然后再去启动AFLNET,此时并不需要我们额外手动去开启服务端,直接就可以正常运行了

在这里插入图片描述
可以看到除了有些慢之外一切都已经正常了,并且也生成了较为漂亮的状态转换图:

在这里插入图片描述

看到这里其实已经明白,在使用AFLNET的时候无论是在fuzz ftp协议还是dns协议还是其他什么,出现开头那种报错的原因,很有可能是服务端采用了多线程的工作方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript随手笔记---轮播图(点击切换)

💌 所属专栏:【JavaScript随手笔记】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

【服务器数据恢复】Vsan逻辑架构出现故障的数据恢复案例

服务器数据恢复环境: VMWARE VSAN包含三台服务器节点; 每个服务器节点上配置2块SSD硬盘和4块机械硬盘; 每个服务器节点上创建两个磁盘组; 每个磁盘组采用1个SSD硬盘作为缓存盘,2个机械硬盘作为容量盘,三个服…

TypeScript快速入门———(二)TypeScript常用类型

文章目录概述1 类型注解2 常用基础类型概述3.原始类型4 数组类型5 类型别名6.函数类型7 对象类型8 接口9 元组10 类型推论11 类型断言12 字面量类型13 枚举14 any 类型15 typeof概述 TypeScript 是 JS 的超集,TS 提供了 JS 的所有功能,并且额外的增加了…

成为 Seatunnel 源码贡献者保姆级教程

Apache SeaTunnel 是下一代高性能、分布式、海量数据集成平台,已经在 B 站、腾讯云等 100 家公司生产使用。目前处于 incubator 阶段。作为公司内部使用的 ETL 工具,Seatunnel 可以基于已有的 Spark、Flink 计算平台进行数据交换也可以运行在 k8s 平台上…

【ESP32+freeRTOS学习笔记-(八)资源管理】

目录1、 资源使用概况2、互斥方法之一:基本临界区2.1、taskENTER_CRITICAL_FROM_ISR() 和taskEXIT_CRITICAL_FROM_ISR()3、互斥方法之二:挂起或锁定调度程序3.1 vTaskSuspendAll()3.2 xTaskResumeAll()4 互斥方法三:互斥信号量(和…

模式识别 | MATLAB实现DNN深度神经网络模式分类识别

分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测 目录 分类预测 | MATLAB实现DNN全连接神经网络多特征分类预测基本介绍任务描述程序设计参考资料基本介绍 DNN的结构不固定,一般神经网络包括输入层、隐藏层和输出层,一个DNN结构只有一个输入层,一个输出层,输入层和输…

C++类和对象,初见类

坚持看完,结尾有思维导图总结 这里写目录标题C语言和 C 的区别类的定义类的初认识类的内容访问限定符类的作用域类的实例化类中的 this 指针总结C语言和 C 的区别 C 的祖师爷除了在 C语言的基础上化简了一些复杂操作 更为重要的是,两个语言实现的过程是…

智慧校园源码:电子班牌,支持手机移动端以及web端对班牌设备的管控

▶ 智慧校园系统有源码,有演示! (电子班牌)设备管理: 1、 管理员查看全校电子班牌设备信息:含有(班级信息、软件版本、设备型号、开关机信息、班牌截屏信息、教室编号、设备ID、设备描述、在线状态、离线状…

MySQL数据库调优————创建索引的原则和索引失效及解决方案

创建索引的原则 建议创建索引的场景 select语句,频繁作为where条件的字段update/delete语句的where条件需要分组、排序的字段distinct所使用的字段字段的值有唯一性约束对于多表查询,联接字段应创建索引,且类型无比保持一致 避免隐式转换 …

技研智联云原生容器化平台实践

作者简介:郑建林,现任深圳市技研智联科技有限公司架构师,技术负责人。多年物联网及金融行业经验,对云计算、区块链、大数据等领域有较深入研究及应用。现主要从事 PaaS 平台建设,为公司各业务产品线提供平台底座如技术…

如何将Python项目部署到新电脑上运行?

如何将Python项目部署到新电脑上运行? 在工作中,可能需要在新服务器上部署项目代码,例如新增服务器、把测试环境的代码部署到生产环境等。 在生活中,也会遇到换新电脑,需要将自己在旧电脑上写的(项目&…

Linux内存分区(swap)

目录 1、使用物理分区创建内存交换分区 2、使用文件创建内存交换文件 当硬件的设备资源充足的话,那么swap是不会被我们的系统所使用到的,所以swap会被利用到的时刻通常就是物理内存不足的情况 我们知道CPU所读取的数据都来自于内存,那么当…

硬件系统工程师宝典(7)-----信号完整性分析中的时序设计

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。 上篇我们说到信号的串扰以及减小串扰的方法。今天我们来看看信号的时序设计需要考虑什么? 信号的时序设计 信号的时序要求就是数据信…

【JavaGuide面试总结】Redis篇·上

【JavaGuide面试总结】Redis篇上1.Redis 除了做缓存,还能做什么?2.Redis 可以做消息队列么?3.如何基于 Redis 实现分布式锁?4.Redis 常用的数据结构有哪些?5.String 的应用场景有哪些?6.String 还是 Hash 存…

【AI/NLP】InstructGPT数据标注问题

文章目录1 背景介绍2 标记员筛选2.1 标记员筛选标准3 数据集及其标注3.1 预训练3.2 微调3.2.1 SFT-demonstration data3.2.2 RM-comparison data3.3 数据集大小4 模型实现1 背景介绍 ChatGPT的训练过程与InstructGPT相近,大致分为三步: SFT&#xff1a…

基金详细介绍

投资回报率 利润 / 投资总额(第一次投资回报率 5%) 关注南方理财 60 天债券 B(202306)万元收益 50—60 元 购基七步曲: 风险测试基本知识交易指南查看业绩了解评级在线下单赎回 基金类型: 积极成长型基金…

svg转png

svg转png写了一个spring boot项目,支持传入svg文件转出png图片,并且自定义转出png的宽和高。主要代码如下:所需依赖如下:演示如下:首先,运行项目使用接口调用工具调用接口发送请求,提取文件1000…

日本机载激光雷达测深进展(一)日本启动测量90%沿岸水深项目

海洋地图项目利用航空测深绘制日本90%沿海20m以浅区域,是日本海道协会(JHA)和日本财团的一个联合项目。 迄今为止,只有不到2%的日本沿海水域得到了测绘,严重拖累了在海洋事故、防灾减灾、篮碳以及生物多样性保护等领域…

数据结构——第二章 线性表(1)——顺序结构

线性表1. 线性表1.1 线性表的定义1.1.1 访问型操作1.1.2 加工型操作1.2 线性表的顺序存储结构1.2.1 定义顺序表数据类型方法11.2.2 定义顺序表数据类型方法21.3 顺序表的基本操作实现1.3.1 顺序表的初始化操作1.3.2 顺序表的插入操作1.3.3 顺序表的删除操作1.3.4 顺序表的更新操…

Windows环境下使用Pycharm运行sh文件

博主在调试一些程序时,时常遇到 .sh文件,这是Linux中的shell脚本文件,那么这种文件在windows下如何运行呢,其实我们可以通过git来实现,接下来看我操作。 首先我们需要安装Git,关于其安装过程可以参考博主这…