暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pikachu靶场(sql注入篇-上)

染小妖 2021-08-02
1049

一、官方的戏精引言

概述

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!

SQL Inject漏洞攻击流程:

SQL Inject漏洞-常见注入点测试:

数字型:user_id=$id

字符型:user_id='$id'

搜索型:text LIKE '%{$_GET['search']}%'"

哦,SQL注入漏洞,可怕的漏洞


数字型注入(post):

我们打开目标:

从下拉框中,我们随便选择一个数字进行查询:

从URL中,我们发现它并没有在URL中传参,说明是以post方式进行提交的:


我们重新选一个数字后,我们再抓包看看:


我们将抓到的包发送到repeater里来进行测试,先输入payload:or 1=1,在提交:

上图所示,我们发现它把所有的用户都查询了出来,这说明在id=1处,是存在SQL注入漏洞的,并且是数字型的SQL注入。


我们也可以自己测试一下,输入 order by 1,2,3,4,去测试:


返回的结果告诉我们没有四列,那就缩短  order by 1,2试一试:

没有报错,说明存在两列,我们接着尝试查询数据库,payload:union select 1,database()


查询数据库的表名,payload:union select 1,group_concat(table_name)from information_schema.tables where table_schema='pikachu'


字符型注入(post):

我们打开目标:


我们随便输入一个值:


我们随便输入一个用户名:Vince

我们发现它的请求都是在url中提交的,是get请求


我们开始构建payload:or 1=1,在vince后面提交:

提示不存在,那我们开始构建闭合看看,payload:' or 1=1#




搜索型注入:

我们打开目标:

我们有了之前的经验,我们这次一样构造闭合payload:

Like '%xxxx%'or 1=1#%',我们要先知道,数据库搜索的相关操作:

Select * from member where username like '%xyao%'

所以我们的真正的payload是:xxxx%'or 1=1#


XX型注入:

我们有了之前的经验,我们这次一样构造闭合payload:=('xx')or 1=1#')。所以我们最终构造的闭合为xx')or 1=1#,输入进去:


基于函数报错的信息获取:

基于报错的信息获取:在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。select/insert/update/delete都可以使用报错来获取信息。后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。

  三个常用的用来报错的函数:

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

extractvalue():函数是mysql对xml文档数据进行查询的XPATH函数

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

insert注入

打开目标:

我们先点开注册,当前是insert注入,也就是说,我们前端输入的数据,会通过插入的方式到到数据库里去


我们发现报错


那我们在用户名处,构造payload:1' or updatexml(1,concat(0x7e,database()),0) or ',我们提交看看:

看到报看到报错出数据库的名称。

Update注入:

我们进行登录Vince账户,修改个人的资料信息就算通过使用update操作后台的数据库,把相关的内容更新成我们修改的内容,或者说是我们想要的内容。

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


报错出数据库名称

Delete注入:

我们打开目标:

我们删除留言,并burp抓包并发送到repeater:

这个请求,后台会把对应的ID传到后台,后台就会把对应的id删除掉

我们接下来对id进行闭合,因为参数是get请求提交的,所以我们需要进行url编码,然后提交:

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

因为是数字型,所以不需要单引号


"http header"注入:

http header注入是出现sql注入的一种场景,我们打开目标:

点击提升,出现账号和密码,进行登录并抓包,后台可能对我们的 user agent进行了获取,在user agent出进行测试:

我们查看数据包,并将数据包发送到repeater进行测试,payload:firefox' or updatexml(1,concat(0x7e,database()),0) or'


Cookie处也是可以进行测试的,payload:

Cookie: ant[uname]=admin' or updatexml(1,concat(0x7e,database()),0) or '; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; PHPSESSID=fgg7dun2jp79fdejo6u3m4hshp



文章转载自染小妖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论