基于简单图论的自学习路径字典

Posted on 2025-08-23  65 Views


大伙在做攻防渗透的时候经常会遇到需要爆破路径的情况,这时就需要掏出老师傅的陈年佳酿,然后扫描器一顿突突

但是这样会有问题,就是服务器会很累,老师傅手里的字典是多年渗透经验汇聚而成的,比较大而全,一下干过去1-2万的请求,给人家体质弱的服务器都干成OOM了

那怎么解决虚弱的服务器呢?很简单,见人说人话,见鬼说鬼话;比如说今天下雨,在家准备出门,开始想OOTD的事情:下雨的环境给人启发式思考,那我今天就穿洞洞鞋吧

IMG_20250808_161531_995

有2个主要设计目标

  1. 总结出最常见的路径
  2. 根据上一段路径输出最有可能出现的下一段路径

艺术来源于生活,大伙在日常渗透的时候一定会遇到大量的HTTP请求,这些HTTP请求的路径是非常好的养料,将他们存储起来,日后一定能很好地滋润创作的土壤

是的,要做的事情很简单,就是把渗透遇到的路径都存起来,统计权重和层级关系,生成字典的时候根据权重排序输出即可

这样做能达成我们的设计目标吗?经过我召集自己的眼睛、脑子和嘴巴开会,调研之后觉得应该没问题。你看,我们存路径的时候不能简单存,要把它存成有向图,有向图能很好的表示路径的递进关系,显然大多数情况下,路径的上一级和下一级在冥冥之中是有某种联系的

Untitled Diagram.drawio

你想想是不是这样,我要扫描开头的第一个路径,我当然是把那些常见的开头路径都枚举一遍,比如/home/admin/main之类的;或者说我现在访问了/role/get路径,我想进一步测试/role,那我就可以根据常见的/role递进关系,获取下一级路径,比如/add/list之类的。什么?写代码没有章法,乱写路径?/api/duima/duideduide/a/buduibuduibdui/a/duideduideduide这种一般分类到密码学那边的,不在本文讨论范畴

你说停停,现在路径存好了,递进关系也存好了,那如果想获取常见的开头路径,该怎么办呢?

万事开头难,一件事刚开始做的时候,手边什么都没有,感觉很困难。有向图也是一样的,越是开头的节点,指向它的节点就越少,所以俺寻思可以用出度减入度大概表示“开头指数”

最后还有一个问题,就是所有路径不可能一模一样的,比如说/user,有可能会写成/users,这就需要依赖数据库的全文检索模块了,我这里使用的是嵌入式图数据库kuzu,这个数据库的全文检索功能就是一坨,只能凑合用用;不过kuzu支持向量检索,倒是可以考虑把路径字符串向量化之后存起来,向量化这一块不知道有没有什么高性能的算法,毕竟量比较大

没有了,效果好不好我也不清楚,前两天才做好的,不好用就删


你好