Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-t 参数值 必须指定协议吗 #372

Open
solarpeng502 opened this issue Feb 10, 2025 · 12 comments
Open

-t 参数值 必须指定协议吗 #372

solarpeng502 opened this issue Feb 10, 2025 · 12 comments

Comments

@solarpeng502
Copy link

solarpeng502 commented Feb 10, 2025

背景
我这边写了一个mysql probe规则,对一个mysql端口进行服务指纹探活,命令如下
./observer_ward -t x:3306 --probe-dir FingerprintHub/service-fingerprint/mysql/ --debug --mode all
规则内容如下

id: mysql
info:
  name: MySQL
  author: nmap,cn-kali-team
  tags: detect,tech,mysql,service
  severity: info
  metadata:
    product: mysql
    rarity: 0
    vendor: mysql
    verified: true
    version: $1
tcp:
- name: 'null'
  inputs:
  - data: ''
  host:
  - '{{Hostname}}'
  extractors:
  - name: mysql
    type: regex
    regex:
    - mysql_native_password

没有识别出任何结果,且debug 模式显示没发送数据包
如果-t的参数值前面加上tcp
./observer_ward -t tcp://x:3306 --probe-dir FingerprintHub/service-fingerprint/mysql/ --debug
就可以识别出结果

问题
我想要确定一下,-t的参数值前面必须指定协议吗?如果是的话,将来能否在工具里内嵌入tcp/udp/http协议的判断,并允许用户在参数指定模式?如果不是,我的用法问题在哪里?

@cn-kali-team
Copy link
Member

是的,需要协议,如果没有协议默认补充http和https

pub fn run(&self, target: Uri) -> BTreeMap<String, MatchedResult> {
debug!("{}: {}", Emoji("🚦", "start"), target);
let mut runner = ClusterExecuteRunner::new(&target);
match target.scheme_str() {
None => {
// 如果没有协议尝试https和http
let schemes = vec!["https", "http"];
for scheme in schemes {
if let Ok(http_target) = set_uri_scheme(scheme, &target) {
runner.target = http_target;
self.http(&mut runner);
if !runner.matched_result.is_empty() {
break;
}
}
}
}
// 只跑web指纹
Some("http") | Some("https") => {
self.http(&mut runner);
}
// 只跑服务指纹
Some("tcp") | Some("tls") => {
if let Some(tcp) = &self.cluster_type.tcp_default {
if let Err(_err) = runner.tcp(&self.config, tcp) {
return runner.matched_result;
}
}
self.tcp(&mut runner);
}
// 跳过
_ => {}
}

@solarpeng502
Copy link
Author

这个后面可以自动识别端口的协议吗?通常我们把端口交给工具的时候,是不知道端口的协议的

@solarpeng502
Copy link
Author

按照现在的方式,如果需要指定协议,就需要我在工具外先做一层判断,或者直接将所有协议遍历一边扫描,但这样比较麻烦,还会造成无效扫描

@cn-kali-team
Copy link
Member

其实一开始是默认判断tcp,但是大部分人用这个工具是做web指纹识别,所以默认是加了https和http,如果添加了tcp的可能会拖慢web的识别速度,我不我给你加个参数

@cn-kali-team
Copy link
Member

@cn-kali-team
Copy link
Member

等这跑完了,你在后面加--mode all参数就可以了

@solarpeng502
Copy link
Author

将来能否内置一下协议识别,非HTTP的端口不扫HTTP的规则?

@cn-kali-team
Copy link
Member

不能,因为不知道那些是非http端口,服务也可以用http协议访问的

@solarpeng502
Copy link
Author

好的,我还有个问题,我们的observer_ward 支持使用UDP协议吗?有些应用的指纹是UDP实现的,比如snmp,tftp

@cn-kali-team
Copy link
Member

nuclei的模板支持吗?

@solarpeng502
Copy link
Author

solarpeng502 commented Feb 11, 2025

@solarpeng502
Copy link
Author

solarpeng502 commented Feb 11, 2025

但我个人感觉规则模版这样设计,有点太复杂了,理论上应该和TCP保持一致的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants