Courier Management System SQLI Vulnerability
SQL Injection Vulnerability in itsourcecode Courier Management System V1.0 BUG_Author: liuhanzhi Affected Version: V1.0 Vendor: itsourcecode Software: Courier Management System Vulnerability File: /manage_user.php Description 1. SQL Injection via id Parameter In the file /manage_user.php, the application directly concatenates the user-supplied id parameter into an SQL query without any sanitization or validation. Vulnerable code (line 5): $user = $conn->query("SELECT * FROM users where id =".$_GET['id']); 2. Exploiting the SQL Injection By injecting malicious SQL commands into the id parameter via a GET request, an attacker can manipulate the underlying SQL query to perform unauthorized database operations including data extraction, modification, and enumeration. ...
JS加解密逆向实战案例
声明 本博客提供的思路和技术仅限于提升自身技术,不得用于非法活动,任何非法活动均与本博客的立场相违背,违法者将依法承担法律责任 我的看法 其实JS逆向在日常挖洞中不能算一种漏洞类型进行提交,而是一种技术,有了这个技术,就可以在数据包存在加密或者数据包存在签名防篡改的情况下,进行将密文解密或篡改数据包从而进行正常的渗透流程,甚至有些网站全站都存在数据包签名防篡改,那没有JS逆向的技术,你改不了数据包,连渗透的资格都没有,这还测个毛啊 案例介绍 漏洞名称 上海商米科技集团股份有限公司数字店铺存在任意用户登录漏洞(已修复) 漏洞发现 我在测试商米数字店铺中发现用户登录处使用手机验证码登录时验证码做了防爆破处理,但是 要实现用户登录是不是还可以修改原来的密码,用创建的新密码来实现密码登录,【修改密码】同样需要手机验证码验证,但是这里的验证接口并没有做验证码验证次数限制,而且为四位验证码,遍历次数只要10000次,可以进行爆破验证码操作 但是数据包中却没有找到验证码参数,甚至连像模像样的信息都没有,而且全站都是这样的,【重置密码】具体数据包内容如下 // 原始数据包如下 POST /api/user/resetPassword HTTP/2 Host: store.sunmi.com Cookie: _c_WBKFRo=Un76hKEAvdAOAfzCsQ4Nuu8fLxA8acVXkTUnQwIV; tfstk=gcYEw-gqtavsJCkDgIbru9lECVQdzakbLU65ZQAlO9XHODhraOR8AgOBAhWyIdWHUQhdZTvkUTtIfqOp9aQohgujlBUNBRwB8a2WswC70R4yZqOp95jEIwFil4loG21hELjhjOflI6Xu-LXGsOCRZJfu-fRGBOf3qgbuIGfcNuqkEacwsOClrTvlxfRGB_blEfodcgkVNMcHMw4-R5RNYtAhQrR976mG3qBarE8GTM8ktOoEYF5FYtjyczJ2uIAHk_8-iuWyMHvC6LuqQNYeLejNz4zORI-MLG-EUPS9jILlbhH4DIdHLnjD-VlFbedf-O8-wzBHAQY54eD0N9YpdFSvyJk1FnO6-GJmCPJR4Hxc-UkqSgy7e1DI_UKUEuSh61Wj_fllLRPKMf_nNuERvJ5NhXxu2uIhY1Wj_RE82MIl_tGnF; _gcl_au=1.1.1104070136.1769850985; Hm_lvt_2018effe9e50369b4410bd0af8ecb7c9=1769850985,1769861358; _ga=GA1.2.1449330925.1769850985; _ga_RQML024HYC=GS2.2.s1769861358$o2$g0$t1769861358$j60$l0$h0; _ga_NFBQZJS49V=GS2.1.s1769861358$o2$g0$t1769861516$j60$l0$h0; Hm_lvt_61990ad31961f1bde37194ad4f2f1285=1769851055,1771835131,1772108018,1772338958; HMACCOUNT=A87FED76FCB56CAB; Hm_lpvt_61990ad31961f1bde37194ad4f2f1285=1772339825 Content-Length: 902 Sec-Ch-Ua-Platform: "macOS" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Sec-Ch-Ua: "Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145" Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybqbHAefRGJzTQbtQ Version: 2 Sec-Ch-Ua-Mobile: ?0 Accept: */* Origin: https://store.sunmi.com Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://store.sunmi.com/user/login Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7 Priority: u=1, i ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="timeStamp" 1772339853 ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="randomNum" 3gspVBCLxtglWdCw3agGHFtrQM0sdozs ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="params" yXABToyr+0mTGR9u4Yf2WOq54mU+LzNTLIuQHi1TpZPCK0+NCLk72AYz55wC5Y5N70zuQnttWAzBDVEhUvnZukJ0HG3G3VSRvciKRXco7DnC/a77d1VLAdVRJJGsL5ghna4jP2BHjSjExrIrJcm5DWvHEwiH3JglZ7lJhbF7K3fADSE2nuW1K+jeze5Kmu/MBKUTrqlU1XIH/U2tdzcz6Q== ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="isEncrypted" 1 ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="sign" 42d6b0c68a4151e3c17cbdac1746a14a ------WebKitFormBoundarybqbHAefRGJzTQbtQ Content-Disposition: form-data; name="lang" zh ------WebKitFormBoundarybqbHAefRGJzTQbtQ-- HTTP/2 200 OK Content-Type: application/json; charset=utf-8 Content-Length: 42 X-B3-Traceid: 21a9270d9420e83719fcc3fe1074cb6e X-B3-Spanid: aee96733a3195d05 X-B3-Sampled: 1 Date: Sun, 01 Mar 2026 04:51:12 GMT Vary: Origin Access-Control-Allow-Origin: https://store.sunmi.com {"data":{},"code":2003,"msg":"code error"} //任意修改 POST 参数的返回包 HTTP/2 400 Bad Request Content-Type: application/json; charset=utf-8 Content-Length: 44 X-B3-Traceid: f062b32ce9f642ae0380d3ef32ff1dc4 X-B3-Spanid: a3dfa9c4f8bdf4c2 X-B3-Sampled: 1 Date: Sun, 01 Mar 2026 05:00:35 GMT Vary: Origin Access-Control-Allow-Origin: https://store.sunmi.com {"code":5026,"msg":"Invalid sign","data":{}} 有JS加解密经验的师傅并不会十分陌生,网站是通过POST multipart/form-data 类型进行传递数据,而且根据各个英文名,params是参数的意思,所以yXABToyr+0mTGR9u4Yf2WOq54mU+LzNTLIuQHi1TpZPCK0+NCLk72AYz55wC5Y5N70zuQnttWAzBDVEhUvnZukJ0HG3G3VSRvciKRXco7DnC/a77d1VLAdVRJJGsL5ghna4jP2BHjSjExrIrJcm5DWvHEwiH3JglZ7lJhbF7K3fADSE2nuW1K+jeze5Kmu/MBKUTrqlU1XIH/U2tdzcz6Q==就是所有要传递的参数,而且还是进行了加密处理,然后其他的timeStamp randomNum ... 就是起到了整体签名的作用,防止请求包POST部分进行任何篡改,而sign参数42d6b0c68a4151e3c17cbdac1746a14a就是整体进行签名后的结果,破解params参数加密算法和sign参数签名算法就是下一步需要做的,破解后才可以利用验证接口并没有做验证码验证次数限制进行爆破操作 ...
前后端分离接口渗透
声明 本博客提供的思路和技术仅限于提升自身技术,不得用于非法活动,任何非法活动均与本博客的立场相违背,违法者将依法承担法律责任 区分前后端分离 不管用框架识别、关键词识别等等,总的来说就是用各种方法观察访问的URL路径和返回的数据形式,如果出现下面类似的信息,就是前后端分离 # URL 路径 /api/ /api/v1/ /users/list ...... # 返回数据 大部分 JSON 格式 { username: "zzl", password: "zzl0805" } ...... 提取接口 因为前端和后端是区分开的,所以用户要拿到请求的信息,就需要前端去请求后端接口得到信息,所以提取后端接口是很重要的 Tips:还有一点很重要,用插件找接口时要注意路径中是否存在baseurl,怎么找?直接看抓包历史数据包中接口和提取接口是否一致,还有就是浏览器中全局搜索baseurl,这两种方式都试一下就行了,前者更准确 # 没有 baseurl https://www.zzl.com/userinfo/list # 存在 baseurl:/api/ https://www.zzl.com/api/userinfo/list FindSomething 插件自动收集 雪瞳插件自动收集 URLfinder 工具收集,GitHub下载即可 JSFinder 老牌工具,可以被上述工具替代,感兴趣的自行寻找 接口利用 接口信息泄露、未鉴权等等,将提取的接口用爆破模块进行爆破即可,可以用不同请求方式都试一下,有一些具体文件上传接口等等,可以在前端找到相应功能点进行针对化测试 浏览器访问不存在的接口,观察返回情况,观察后端是否采用springboot框架,测试 swagger、druid、actuator 这三个常见的漏洞 敏感接口尝试进行 bypass ……
MacBook鼠标设置
前言 大二也是换了苹果电脑,听说触控板很好用,大二上学期就也没有买鼠标,使用体验确实挺惊艳的,就是有些时候手一直搓来搓去太累了,寒假放假买了个鼠标,不买不知道,一买吓一跳,对于我(网安需求)来说,鼠标是真的好用多了,后悔没有早点买,呜呜呜😭 鼠标选择 我买的是 ROG AP,这里肯定有人会说主播主播为什么 macOS 不配合罗技鼠标使用,罗技不是配合苹果很好吗,我这里也是没有使用过,就不做评价了,总的来说,带两个侧键的鼠标(任意品牌)配合 Mac Mousse Fix 软件都可以是鼠标相当丝滑,对我渗透效率提升也是杠杠的,所以挑选鼠标看自己要求就行,外观好看、性能好等等,有些人反应蓝牙连接经常时不时断连,我一直用的蓝牙,从来没有这方面的问题,我也不太了解,参考一下即可 软件下载 Mac Mousse Fix 正版软件要收费,从 MacWK 下载破解版即可 软件配置 我的配置分享给你们,我的配置真的好用,当然你也可以自定义,鼠标移动速度可以结合设置中的鼠标速度进行调试 总结 买一个外观好看,性能不错,有两个侧键,有蓝牙连接功能的鼠标,在 MacBook 中配合 Mac Mousse Fix 软件使用,体验丝滑无比,游刃有余,完全不输触控板
浏览器渗透插件分享
声明 操作环境为 Ghrome 浏览器,主要介绍插件的大致作用,具体操作细节不做讲解,后续遇到好用的插件会在文章后面更新分享的,尽情期待😘 Proxy SwitchyOmega 3 (ZeroOmega) 说明:好用的代理工具,结合抓包工具或代理插件使用,可以对无需代理的目标进行白名单处理,下面给出我常用的白名单列表,遇到一个添加一个即可 *.bing.com *.bing.cn *.bing.net *.msn.cn www.yuque.com cn.bing.com aefd.nelreports.net www.googleapis.com content-autofill.googleapis.com www.google.com accounts.google.com optimizationguide-pa.googleapis.com www.gstatic.com android.clients.google.com clients4.google.com fofa.info google-ohttp-relay-safebrowsing.fastly-edge.com revenue.ezboti.com oauthaccountmanager.googleapis.com HackBar 说明:打过CTF的都懂,可以理解为网页版的简易抓包工具,不多解释了 FindSomething 说明:又叫”熊猫头“,会对页面中的静态资源进行信息提取,可以获得一些网页目录、api接口等敏感路径和用户名、密码等一些敏感信息,还会列出完整URL、IP、域名等等,用于信息收集 雪瞳 Tips:需要GitHub下载自行导入 说明:和 FindSomething 功能相似,一款新出的综合信息提取识别插件,多了一些指纹嗅探、网站解析的功能,可以添加扫描白名单 Wappalyzer - Technology profiler 说明:老牌指纹识别工具,必备 Source detector Tips:需要GitHub下载自行导入,Chrome版本高于等于v142,无法安装此插件 说明:自动化提取 js.map 文件(webpack进行打包等)的工具,后续可以利用 reverse-sourcemap 工具,还原源代码,进行代码审计 Heimdallr Tips:需要GitHub下载自行导入 说明:指纹识别、反蜜罐、特征对抗 总结 我认为 Proxy SwitchyOmega 3 (ZeroOmega) & Wappalyzer - Technology profiler 必装,FindSomething & 雪瞳 任选一个或者两个都用,其他的按需安装即可
记一次实战中的SQL注入
声明 本博客提供的思路和技术仅限于提升自身技术,不得用于非法活动,任何非法活动均与本博客的立场相违背,违法者将依法承担法律责任 某SRC数字店铺存在SQL注入漏洞 注册后登陆数字店铺后台查看“数字标签”页面,其中的查询框存在SQL报错注入 仔细观察请求数据包,我传递的查询参数只有一个1',但是请求数据包中的内容却采用POSTmultipart/form-data类型进行传输,更具数据包分析很容易知道前端进行了加密签名处理,这个网站中的其他数据传输都采用这种方式,这样可以让你看不出传递的具体数据并防止篡改请求包,这就是为什么此站在无waf的情况下,挂着xray代理(以及任何多强大扫描SQL注入的工具)不可能扫描出此处存在SQL注入的原因,也就是说这里只能靠手动尝试才可以发现 查询参数输入1'时回显You have an error in your SQL syntax 查询参数输入1''时回显正常 查询参数输入1'''时回显You have an error in your SQL syntax 查询参数输入1''''时回显正常 通过4个单引号检测,明确确定存在SQL注入,接下来需要构造注入语句得到数据库名证明危害即可,不要拖库拿信息!!!不要拖库拿信息!!!不要拖库拿信息!!! Tips:注释符号一般都是不起作用的,建议使用单引号闭合的方式闭合语句,这里注释符就不起作用 1' and updatexml(1,concat(0x7e,DATABASE(),0x7e),1) and '1'='1 用报错注入,成功得到数据库名😎 总结 要提升逻辑观察能力,随机应变,遇到只能手动测试的网站不要怕麻烦,万一出洞了呢 4个单引号检测SQL注入挺好用 实战尽量使用单引号闭合方式,不要用注释符打不成功就不打了 上述只是针对一般类型的SQL注入,还有好多类型的SQL注入
2025极客大挑战Web方向
声明 第一次参加极客大挑战CTF比赛,web方向总共解决了六道题目(6/20),我是菜鸟🫠 阿基里斯追乌龟 #JavaScript 题目描述:在古希腊,英雄阿基里斯和一只乌龟赛跑。阿基里斯的速度是乌龟的十倍。比赛开始时,乌龟在阿基里斯前面100米。芝诺悖论认为,当阿基里斯追到乌龟的出发点时,乌龟已经又向前爬了一段距离。当阿基里斯再追到那个位置时,乌龟又向前爬了。如此无限循环,阿基里斯似乎永远也追不上乌龟。他真的追不上吗? 大概查看网页信息,只要让阿基里斯的位置比乌龟的位置远即可得到 flag,但是根据题目的 JavaScript 代码,不可能一直点击追赶按键,其实只要用浏览器进行前端调试即可 ... const payload = { achilles_distance: achillesPos, tortoise_distance: tortoisePos, }; fetch('/chase', { // 在这里打断点,在 fetch 发起请求前修改 Payload 对象 method: 'POST', // 使 achillesPos > tortoisePos headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ "data": encryptData(payload) }), }) ... 修改后继续执行脚本即可得到 flag,对代码感兴趣的可以去详细了解一下原理,下面附上源代码 function encryptData(obj) { const jsonString = JSON.stringify(obj); return btoa(unescape(encodeURIComponent(jsonString))); } function decryptData(encodedString) { const jsonString = decodeURIComponent(escape(atob(encodedString))); return JSON.parse(jsonString); } document.addEventListener('DOMContentLoaded', () => { const chaseBtn = document.getElementById('chase-btn'); const achillesDistanceSpan = document.getElementById('achilles-distance'); const tortoiseDistanceSpan = document.getElementById('tortoise-distance'); const resultDiv = document.getElementById('result'); let achillesPos = 0; let tortoisePos = 10000000000; // Initial head start for the tortoise achillesDistanceSpan.textContent = achillesPos.toFixed(2); tortoiseDistanceSpan.textContent = tortoisePos.toFixed(2); chaseBtn.addEventListener('click', () => { // Achilles moves to the tortoise's current position const achillesMoveDistance = tortoisePos - achillesPos; achillesPos = tortoisePos; // The tortoise moves 1/10th of the distance Achilles just covered const tortoiseMoveDistance = achillesMoveDistance / 10; tortoisePos += tortoiseMoveDistance; achillesDistanceSpan.textContent = achillesPos.toFixed(2); tortoiseDistanceSpan.textContent = tortoisePos.toFixed(2); const payload = { achilles_distance: achillesPos, tortoise_distance: tortoisePos, }; fetch('/chase', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ "data": encryptData(payload) }), }) .then(response => response.json()) .then(encryptedResponse => { if (encryptedResponse.data) { const data = decryptData(encryptedResponse.data); if (data.flag) { // Use 'pre-wrap' to respect newlines in the fake flag message resultDiv.style.whiteSpace = 'pre-wrap'; resultDiv.textContent = `你追上它了!\n${data.flag}`; chaseBtn.disabled = true; } else if (data.message) { resultDiv.textContent = data.message; } } else { console.error('Error:', encryptedResponse.error); resultDiv.textContent = `发生错误: ${encryptedResponse.error}`; } }) .catch(error => { console.error('Error:', error); resultDiv.textContent = '发生错误。'; }); }); }); Vibe SEO #目录扫描 #Linux ...
如何快速搭建个人博客
声明 以下具体操作环境为 macOS,不同操作系统操作思路一致 快速开始 开始前准备: 安装了 homebrew 软件包管理系统 安装了 git 分布式版本控制系统 拥有一个 GitHub 静态网站托管仓库(GitHub Pages) 在执行代码前可以先查看本文中会遇到的问题 # 安装 hugo 静态网站生成器 brew install hugo # 找一个放置网站数据的地方 cd ~/Workspace # 创建一个名为 Lhz-blogs 的新网站项目目录 # --format 来选取构建的首选文件格式(toml 默认 | yaml | json) hugo new site Lhz-blogs --format yaml # 进入新创建的项目目录 cd Lhz-blogs # 在项目根目录下初始化 git 仓库 git init # 拉取最新的 PaperMod 网站主题 git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod # 追加网站主题配置信息 # 拿我的 hugo.yaml 举个例子 baseURL: https://lhzzz08.github.io languageCode: en-us title: Lhz's blog theme: PaperMod params: homeInfoParams: Title: "在这里分享我的个人见解与技术心得🎉" Content: "大二在读,专注于Web安全,欢迎交流👏(wx:lhz13588161325)" # 创建一篇 quickstart.md 的文章,位于 content/posts/ 目录下 hugo new posts/quickstart.md # 编辑文章 open content/posts/quickstart.md -a Typora # 在本地启动一个 Web 服务器预览博客,可以边写边改,在部署前检查 hugo server # 将项目源文件编译成静态文件并输出到项目根目录的 public 目录下 hugo # 切换为静态文件目录 cd public # 在静态目录下初始化第二个 git 仓库 git init # 为静态文件仓库添加一个名为 git-blog 的远程仓库,指向您的 GitHub Pages 仓库 URL git remote add git-blog https://github.com/lhzzz08/lhzzz08.github.io.git # 显示当前仓库配置的所有远程仓库的详细信息 git remote -v # 将目录下的所有静态文件添加到 git 暂存区 git add . # 将暂存区的文件提交到本地仓库 git commit -m "init myblog" # 将本地 main 分支的内容提交到远程仓库 git push -u github-blog main 会遇到的问题: ...