Bootstrap

sql注入漏洞学习--pikachu 2023/03/24-25

2023/03/24-25

pikachu漏洞练习平台:

pikachu靶场通关_yyysec的博客-CSDN博客

web安全pikachu靶场之SQL注入 - 青日GO(/ω\) - 博客园

pikachu 靶场搭建(完整版)_攀爬的小白的博客-CSDN博客

Burpsuite软件使用:

安装教程:

BurpSuite全套使用教程(超实用超详细介绍)_burpsuite教程_告白热的博客-CSDN博客

简单抓包使用教程:

burp在抓包前需要配置代理,在使用完毕之后,及时关闭代理

burpsuite抓包-PC端及使用_weixin_33972649的博客-CSDN博客

本地127.0.0.1无法抓包的解决教程:

关于Firefox 无法抓取本地localhost数据包的问题与解决_XavierDarkness的博客-CSDN博客

1. SQL注入学习:

1)数字型注入

下拉框输入一个数字,发现url中并没有传参,提交方式为post方式
在这里插入图片描述

测试这个输入点是否存在漏洞,正常的查询逻辑是,后台在数据库中进行了查询,返回了姓名和邮箱

select 字段1,字段2 from 表名 where id = 1

用burp进行抓包,得到对应的消息,
在这里插入图片描述

我们猜测其为常见的数字型sql注入,直接把payload改成 1 or 1=1即可,发现显示所有的用户和邮箱

在这里插入图片描述

2)字符型注入:

任意输入一个字符,查询,在url中发现其是get请求类型

在这里插入图片描述

字符型注入,采用常见的尝试方法:1‘ or 1=1 #

#用来注释掉后面的单引号。

3)搜索型注入:

任意输入一个字符进行尝试,输入g

在这里插入图片描述

sql语句中,like查询的匹配符有三种,这种猜测是最基础的%匹配

sql的like用法总结,可以见这个博客

Sql中的like用法_sql like_lovetimiforever的博客-CSDN博客

根据查询结果,猜测其基本语句为:

select from 表名 where username like ' %k% ';

这里我们利用类似字符型注入的方式进行构造:

f%’ or 1 =1 #

在这里插入图片描述

查询到了所有的用户信息

4)xx型注入:

pikachu页面输入1’ ,发现报错,说明很可能出现sql漏洞

查看php后端代码

在这里插入图片描述

发现其是用一个括号来拼接前段获取的代码,据此,构造一个合法的闭合来进行测试。

在这里插入图片描述

5)”insert/update”注入

Web安全测试学习笔记-SQL注入-利用concat和updatexml函数

报错注入:

在Mysql中使用一些指定的函数来制造报错,从而在报错信息中获取设定的信息,select,insert,update,delete都可以使用报错来获取信息

常见的报错注入函数:

updatexml() :函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。

extractvalue():函数也是MYSQL对XML文档数据进行查询的XPATH函数。

floor(): MYSQL中用来取整的函数。

updatexml():

改变(查找并替换) XML文档中符合条件的节点的值。

语法: UPDATEXML (xml document, XPathstring, new_value)

第一个参数: fiedname是String格式,为表中的字段名。

第二个参数: XPathstring (Xpath格式的字符串)。

第三个参数: new. value,String格式,替换查找到的符合条件的

XPATH定位必须是有效的,否则会发生错误。

concat函数是mysqp的字符串连接函数,将SQL语句放在concat中,SQL语句会被执行

0x7e是16进制中的“~”,是一个特殊符号,能够被自动转义

concat执行sql注入语句,再利用updatexml的报错信息返回sql语句的执行结果

  1. select下报错的利用演示

在字符串注入界面演示:

k' and updatexml(1,concat(0x7e,version()),0)#
k' and updatexml(1,concat(0x7e,database()),0)#

获得对应的版本号和数据库的名称

k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0)#

获取对应的表明,limit一次一次获得表明

尝试后,发现其有五个表:httpinfo, member, message, users, xssblind

之后通过类似的命令,获取对应的表的列名

k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),0)#

以Users表为例,说明,其有:USER,-CURRENT_CNNECTIONS, -TOTAL_CONNECTIONS, -id , -username, -password, -level

或者列名后,可以获取数据

k' and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0)#

得到对应的用户名为admin, pikachu, test

得到用户名后,根据用户名查询密码:

获得用户名后,再根据用户名查询密码:

k' and updatexml(1,concat(0x7e,(select password from users where username='admin' limit 0,1)),0)#
  1. “insert/update”注入:

通用的方法判断是否存在sql注入漏洞,这里是一个字符型insert函数。

如果构造insert的payload函数

deqdeq' or updatexml(1,concat(0x7e,database()),0) and '

字符型注入,所有后面应该加个 and ‘ 或者 or ‘ 这种

密码随意,提交,这样就完成了注入

在这里插入图片描述

update注入和上述过程一样,最后都是获得了数据库的名字,进行表,列名等一些列的获取。

  1. delete注入:

点击删除留言,留言被删除,打开burp查看抓包

在这里插入图片描述

构造对应的注入命令:

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

将其进行URL编码

提交后,返回报错的信息:

在这里插入图片描述

extractvalue():

利用方式和updatexml基本相同

floor():

之后有时间再看

6)http header注入

后台开发人员为了验证客户端头信息(cookie验证)或者通过http header头信息获取客户端的一些信息,比如useragent,accept字段等。会对客户端的http header信息进行获取并使用SQL进行处理

在这里插入图片描述

将User-agent修改为单引号提交,查看结果,发现存在sql报错,证明可能存在漏洞

在这里插入图片描述

输入包含updatexml的攻击payload,发现输出对应的数据库

在这里插入图片描述

7)盲注base on boolian

;