美文网首页
web安全原理(sql注入学习心得)

web安全原理(sql注入学习心得)

作者: DQ_5e1b | 来源:发表于2018-08-13 21:11 被阅读0次

    sql注入原理:web应用程序对用户的输入没有进行合法性的判断,前端传入后端的参数是攻击者可控的,并且带入了数据库查询,导致攻击者可以构造不同的sql语句实现对数据库的任意操作。

    两个必要条件:1.参数用户可控

    2.参数带入数据库查询

    mysql与sql注入漏洞相关知识点:

    mysql5.0版本后,mysql默认在数据库有一个information_schema库,其中有三张表需要记住,

    1.schemata   存放了所有数据库的库名 schema_name

    2.tables  存放了所有数据库的库名及相对应的表名 table_schema,table_name

    3.columns 存放了所有数据库的库名及相对应的表名和字段名 table_schema,table_name,column_name

    mysql查询语句

    select 要查询的字段名 from 库名.表名    (不知道任何条件情况下)

    select 要查询的字段名 from 库名.表名 where 已知条件的字段名=‘已知条件的值’ (知道一条已知条件)

    select 要查询的字段名 from 库名.表名 where 已知条件1的字段名=‘已知条件1的值’ and 已知条件2的字段名=‘已知条件2的值’

    limit的使用格式为 limit m,n

    m为起始位置,n为取n条记录,如limit 0,1,即从第一条记录开始,取一条记录。

    三个重要函数 database(),version(),user()

    注释符,#     --空格     /**/

    内联注释/*!code*/

    攻击方式:

    1.给可控参数添加单引号,and 1=1,and 1=2.试过后基本就存在sql注入,之后可采取order by 1-99语句查询该数据表的字段数量。

    如该数据表字段数量为3,输入id=1 order by 3 反馈结果和id=1 order by 4反馈一样的结果而id=1 order by 4反馈结果不同,则字段数为3

    2.union注入攻击:进行1步骤后,union select 1,2,3 判断在1,2,3中可以输入sql语句的位置,然后即可插入sql语句进行查询

    3.boolean注入攻击:针对只反馈yes或no结果的页面,即返回的结果不会存在数据库的数据,只是特定的正确或错误

    那么可以试图判断数据库名的长度

    ‘ and length(database())>=1 --+

    类推,可以根据页面反馈的正确和错误来判断是否猜对数据库名长度

    当猜对长度后,可以试图猜数据库名的名字

    如用

    ' and substr(database(),1,1)='t' --+ 意思是截取database()的值,从第一个字符开始,每次只返回一个。这个和limt不一样,这里从1开始排序

    可以采取burp爆破的方式

    也可以采用ascii的字符查询,假如database()数据库名第一个为s,s对应ascii码值为115那么

    ' and ord(substr(database(),1,1))=115 --+即可判断是否正确,ord是将字符转换为ascii码值

    4.报错注入攻击,没看懂,暂时略,页面报错之后用的查询语句看不懂

    5.时间注入攻击:即利用sleep()或benchmark()等函数让MySQL的执行时间变长,从而通过判断反馈时间来判断是否存在注入。

    通常与if语句结合使用,IF(expr1,expr2,expr3) 含义为如果expr1为真,则返回expr2;否则返回expr3.

    如判断数据库库名长度的语句为:

    if (length(database())>1,sleep(5),1)   意思是如果数据库长度大于1,则mysql查询休眠5秒,否则查询1.

    6.堆叠查询注入攻击:多语句之间以分号隔开,如

    ';select if(substr(user(),1,1)='r',sleep(3),1)%23

    7.二次注入攻击:两个不同页面结合起来,通过注册页面注册用户如将test'注册到数据库里,虽然开始转义了,但是后来通过参数id页面读取时,读取到数据库里的

    用户test',带入sql语句查询导致多了一个单引号出错。

    8.宽字节注入攻击:当传入1'时,单引号被转移符(反斜线)转义,一般情况下是不存在sql注入漏洞的,但是有一个特例,当数据库编码为GBK时,可以使用宽字节注入

    即用%df和反斜线的编码%5c结合起来为繁体字连。则单引号成功逃逸,报出数据库错误

    而后可以进一步判断注入,

    1%df' and 1=1%23

    1%df and 1=2%23

    接着用order by查数据库表字段数量,再结合union注入

    9.cookie注入攻击:修改cookie中的参数尝试攻击

    10.base64注入攻击:base64编码尝试绕过waf

    11.XFF注入攻击:通过burp抓包后可以看到http请求头中有一个头部参数X-Forwarded-for,简称XFF头,它代表客户端真实的ip地址,通过修改它的值来进行攻击

    如将它设置为127.0.0.1' and 1=1#

    sql注入绕过技术

    1.大小写绕过

    2.双写绕过

    3.编码绕过,如base64,url全编码(和url普通编码不一样)而且是编码两次

    4.内联注释绕过注入:

    如id=1 /*!and*/ 1=1

    相关文章

      网友评论

          本文标题:web安全原理(sql注入学习心得)

          本文链接:https://www.haomeiwen.com/subject/xbtpbftx.html