SQL注入 初学笔记

SQL注入成因

开发者在开发过程中,直接将URL的参数、HTTP体中的post参数或(Cookies, UserAgent)等与SQL语句进行了拼接,造成了hack对于待执行的sql语句的可控。

常见SQL注入

1.联合查询注入(适用于有回显的get请求)

$id = $_GET['id'];

$getid = "select id from users where user_id = '$id'"; 

$result = mysql_query($getid);

可以输入 id 为  -1'union all select 1 # 

2.报错注入(应用系统未屏蔽数据库错误函数,回显了数据库错误信息)

1)rand(0) group by 

2)updatexm( )

3)floor( )

4)exp( )

3.Bool盲注(当开发者屏蔽了错误信息,但网页对于真假有不同回显)

利用substr(str, start, length)=x,或 left(str, length)=x,逐位判断想要获取的参数,多数时候可以搭配ascii( ), hex( )函数来避免单引号使用。

4.时间盲注(当网页对于真假的回显不明显时使用)

使用sleep( )或者benchmark( )函数,搭配 if( )、与Bool( )来将判断的真假更直观的展示

5.二次注入(针对了用户注册或者类似的应用场景)

例如,你在注册用户或者发布评论时使用了SQL语句,他在第一次获取时进行了过滤处理,但当你第二次调用该参数时(例如更新密码,别人举报、收藏该评论)服务端未再次对该参数进行过滤处理。

SQL注入点找寻方法

1.常见的注入点位置

1)get参数中的注入

通过观察地址栏的URL尝试手工验证,或者使用sqlmap扫描

2)post参数中的注入

需要通过抓包软件或者浏览器插件进行观察验证,或者使用sqlmap扫描

3)User-Agent中的注入

使用Burp中的Repeater模块手工验证或者sqlmap(level 3)自动扫描

4)Cookie中的注入

使用Burp中的Repeater模块手工验证或者sqlmap(level 2)自动扫描

2.判断注入点是否存在

1)字符型数据

插入单、双引号,观察是否造成引号未闭合的错误

2)数字型数据

对于后方的数字进行操作(例如将http://example.com/?id=2,修改为…id=3-1,观察结果是否相同)

SQL注入尝试技巧:

1)可回显注入

  • 进行联合查询注入
  • 报错注入
  • 通过注入进行DNS请求,达到回显效果

2)不可回显注入

  • Bool盲注入
  • 时间注入

3)二次注入

绕过技巧:

1.针对过滤关键词(例如对于select、or、from关键词的过滤)

1)对于未进行递归过滤的(尝试穿插关键词进行绕过selselectect、oorr)

2)通过大小写转化(SelEct、Or)

3)对于十六进制过滤的(将个别字母进行替换 selec\x74、o\x72)

4)进行双重URL编码(将form编码为url格式,再将得到的url编码继续进行url编码)

2.针对过滤空格

1)使用注释符或换行符 /**/或者一个 Tab

2)通过URL编码绕过 (%20或者二次URL%2520)

3)通过空白字符(换行符)绕过(每个数据库中的都有其对应的十六进制换行符)

4)利用特殊符号反引号、加号等(select`user`,`password`from)

5)科学计数法绕过

3.单引号绕过

对于文件名使用十六进制数表示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1A_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值