Code Monkey home page Code Monkey logo

xiaofeixia-sec's Introduction

使用注意点

强调

本文使用的工具和方法仅限学习交流使用,请不要将文中使用的工具和渗透思路用于任何非法用途,对此产生的一切后果,本人不承担任何责任,也不对造成的任何误用或损害负责。

使用注意点

  1. 只要不删除、增加、修改poc的文件名,都不需要“-up”。
  2. 增加、删除poc,或者修改poc的文件名,都需要执行“-up”
  3. 可以在poc目录下移动poc至你认为合适的目录下,只要在移动后执行“-up”即可
  4. 由于个人精力有限,现有poc未一一验证,存在误报或poc错误的情况;

用法

一、准备工作

安装python模块

pip install -r requirements.txt

如网络异常可指定源安装

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

二、用法示例

1、安装完模块后一定要先进行poc初始化,否则脚本无法读取任何poc

python xiaofeixia-sec.py -up

2、对一个网站执行所有poc

python xiaofeixia-sec.py -u http://www.tesssst.com -a

3、匹配某些poc进行扫描

python xiaofeixia-sec.py -u http://www.tesssst.com -s 弱口令

4、批量poc扫描(不支持同时匹配,目前只能匹配一个关键字,如:-s tomcat nginx是不支持的)

python xiaofeixia-sec.py -f targets.txt -s tomcat

5、扫描到的漏洞会记录到log目录下的文件,按照日期命名;

6、“-pl”列出当前所有的poc信息;

python xiaofeixia-sec.py -pl

7、“debug”只能输出部分语法错误,这部分以后改进;

python xiaofeixia-sec.py -debug

8、需要配置邮箱和授权码,最好是qq邮箱,其他的没配置,发现漏洞后可以直接邮件通知,不需要一直盯着,配置文件在config目录下;

9、邮件发送过快可能会被qq限制,导致收不到邮件;

poc编写规范

一、msg()函数

msg()函数下为记录poc的基本信息。在检测到漏洞后会返回部分信息。

def msg():
  ret = {

      'links'     :  '',//编写poc的参考链接

      'huixian'   :  '',//为空即可如有需要可在`run()`函数下添加返回信息

      'method'    :   'get',//请求得格式getpost

      'bugname'   :   'HIKVISION 流媒体管理服务器 user.xml 账号密码泄漏',//漏洞名

      'level'     :   'critical',//漏洞等级criticalhighmediumlow

      'FOFA'      :   '"杭州海康威视系统技术有限公司 版权所有" && title="流媒体管理服务器"',//fofa查询语法

      'author'    :   'ppxfx',//脚本作者

      'ifbug'     :   False,//默认无漏洞匹配到漏洞后将True赋值给ifbug

      'create_time':  '2024/2/26',//poc创建时间
  }
  return ret

二、run()函数

run()函数为检测漏洞的入口,在该函数下编写漏洞检测的相关逻辑

def run(url,ua):
  ret = msg()
  headers = {
      'User-Agent': ua,
      }
  target = ''//路径地址
  url1 = url + target//将域名和路径组合在一起
  ret['url'] = url1
  try:
    res=requests.get(url=url1,headers=headers,timeout=5,verify=False)
    if res.status_code == 200 and re.search(r'root:.*?:[0-9]*:[0-9]*:',res.text,re.S):
      ret['huixian'] = res.text
      res.close()
      ret['ifbug'] = True
      return ret
    else:
      return ret
  except:
    return ret

run()函数传入两个参数,一个是待检测地址的域名(后无路径),一个是随机的user-agent,这两个无需修改。

ret是脚本信息,在检测完脚本后返回是否存在漏洞等基本信息。

headers里写入user-agent,ua是浏览器指纹,如果需要其它的也可写入,全部是字符串格式,需要用引号包裹起来,最后都需要逗号结束,如:

headers = {
      'User-Agent': ua,
      'Content-Type': 'application/x-www-form-urlencoded',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
      }

target为路径信息,如

target='/../../../../etc/passwd'

三、弱口令的编写注意点

在弱口令poc中的请求包一般需要禁止重定向,如:

res=requests.post(url=url1,headers=headers,data=data,timeout=5,verify=False,allow_redirects=False)

并且在匹配漏洞特征的时候最好检测`localtion`是否符合预期

if res.status_code == 302 and '/out/out.ViewFolder.php' in res.headers['location']

最后如果检测到漏洞可将漏洞关键点赋值给`ret['huixian']`,其它漏洞同理,如:

ret['huixian'] = f'账号/密码:Admin/zabbix'
ret['ifbug'] = True //确认为漏洞的标志重要ret['url'] = url1 //有漏洞的返回值里必须有url,无漏洞的可以没有,最好还是有-_-

注意:几个`return ret`缺一不可!

四、dnslog的使用

如果需要使用dnslog,脚本里需要引入`import script.DnsLog as dnslog`,这里用的是dnslog.cn

首先请求一个dnslog域名

domain,cookie = dnslog.get_domain()

domain就是dnslog生成的域名,可以直接利用,这里省去利用过程。在利用完成后再去请求dnslog是否接收到返回用如下语句获取是否检测到回显,返回True或False,True表示检测到回显,False表示未检测到回显

dnslog.get_result(domain,cookie)#传入domain和cookie两个参数,参数从get_domain()获取。
//用法示例if dnslog.get_result(domain,cookie) == True:
    print('存在漏洞')#具体用法根据poc进行修改

五、获取域名的IP地址

如果需要获取网站IP,可以在脚本内任意poc导入

import script.getIP as getIP
def run():
    ip = getIP.main(url)
    if ip == None:#如果返回None,则代表未获取到IP地址,可以直接返回ret信息了。
        return ret
    #继续检测
    print(ip)

六、POC命名建议

由于脚本利用过程需要用到poc名,因此poc命名需要符合一定规则

  1. 不能存在中划线'-',如有需要用下划线'_'代替
  2. 有漏洞编号的最好带上
  3. 支持中文,能唯一标志漏洞的,或者能被批量检索到的最好都写在poc文件名上,漏洞检索功能就是检索`漏洞名`

七、常用正则匹配及常用函数

1、常用正则匹配

匹配/etc/passwd文件
r'root:.*?:[0-9]*:[0-9]*:'

匹配win.ini文件
r'for 16-bit app support'

匹配linux中id命令的结果,有些设备中执行id命令肯能没有groups,可将groups及后面去掉。
r'uid.*?gid.*?groups.*?'

2、常用函数

def randomLowercase(n):#返回特定长度的随机小写字母
  import random
  import string
  lst = []
  for j in range(n):
    lst.append(random.choice(string.ascii_lowercase))
  lowercase = ''.join(lst)
  return lowercase
def randomInt(n,m):#返回某个范围中的int
  import random
  return random.randint(n,m)
def hashmd5(s):#返回字符串的哈希值
  import hashlib
  md5 = hashlib.md5()
  md5.update(str(s).encode('utf-8'))
  str_md5 = md5.hexdigest()
  return str_md5[0:15]
#hashmd5(123456)
def substr(s,n,m):#返回字符串s的切片截取
  return s[n:m]

def base64Str(n):#对字符串做base64编码
  import base64
  base64str = str(base64.b64encode(n.encode('utf-8'))).lstrip("b'").rstrip("'")
  return base64str
#base64Str('admin')

3、获取匹配到的值

import re
text = '''
"code":1,
"data":ico_afaefoijoaeif.jsp
 '''
res = re.search(r'code.*?data.*?:(?P<filename>.*?).jsp',text,re.S)
print(res.group('filename'))
#输出ico_afaefoijoaeif

八、其他注意点

小飞侠脚本由于是python,语法简单,自由发挥的空间比较多,可根据具体漏洞或自身编程习惯进行编写。
相同类型的漏洞放在一个路径下的好处是可以借鉴参考,有助于快速poc的编写

其他

如有问题或其他功能扩充想法请与小飞侠联系,支持请点个star

联系方式:3484762639#qq.com(所有数字减1并将#替换为@)

xiaofeixia-sec's People

Contributors

qiubo123 avatar

Stargazers

york avatar Pei4AN avatar  avatar hirak0 avatar Abell avatar  avatar loobug avatar  avatar landv avatar 56 avatar  avatar  avatar  avatar  avatar QinyinSafe avatar  avatar Connie Kuboushek avatar Warren avatar

Watchers

 avatar

Forkers

landv ddwang949

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.