SQL注入回顾篇(二)

[极客大挑战 2019]LoveSQL 万能密码登录成功没有发现flag 判断藏在数据库里 check.php?username=1' or '1'='1&password=123456' or '1'='1 登陆成功返回的密码 7a2d6a8fd56b61a79bba61ee8f5ad02c 直接开始联合注入 check.php?username=1' union select 1,2,3%23&password=1 check.php?username=1' union select 1,2,database()%23& 阅读详情
前言

忆往昔,峥嵘岁月稠!大学已经到了大三了,打了很多比赛,回顾还是挺欣慰!此系列来由是想留一点东西,把所学知识整理一下,同时也是受github上Micro8分享的启发,故想做一些工作,以留后人参考,历时两个星期,第一系列SQL注入回顾篇出炉!内容分四节发布,其中SQL注入代码审计为两节,WAF绕过总结为1节,SQLMAP使用总结为1节!此为SQL注入代码审计第二部分。欢迎各位斧正,交流!

简介

SQL注入就是web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询攻击者可以通过构造不同的sql语句来实现对数据库的任意操作。

Sql注入的产生需要满足以下两个条件:

  1. 参数用户可控:前端传给后端的参数内容是用户可以控制的。
  2. 参数带入数据库查询:传入的参数拼接到sql语句中,且带入数据库查询。

当传入的参数ID为1’时,数据库执行的代码如下所示。

Select * from users where id=1’

这个语句不符合数据库语法规范,所以会报错。当传入的参数为and 1=1时,执行的sql语句如下所示

Select * from users where id=1 and 1=1

因为1=1为真,且where语句中的id=1也为真,所以页面会返回与id=1相同的结果。当传入的id参数为and 1=2时,此时sql语句恒为假,所以服务器会返回与id=1不同的结果

在实际环境中,sql注入会导致数据库的数据泄露,在安全配置不当的情况下还可能会被攻击者拿到系统权限,进行文件的读写操作等。

普通的注入审计,可以通过$_GET,$_POST等传参追踪数据库操作,也可以通过select , delete , update,insert 数据库操作语句反追踪传参。

Mysql注入相关知识点
  1. 在Mysql 5.0版本之后,Mysql默认在数据库中存放一个”information_shcema”的数据库,在该库中,读者需要记住三个表名,分别是SCHEMATA,TABLES和COLUMNS。分存储该用户创建的所有数据库的库名,库名和表名,库名和表名,字段名。

  2. Limit的用法:使用格式为limit m,n,其中m是指记录开始的位置,从0开始,表示第一条记录:n是指取n条记录。例如limit 0,1表示从第一条记录开始,取一条记录。

  3. 需要记住的几个函数

    • database():当前网站使用的数据库。
    • version():当前MYSQL的版本。
    • user():当前MySQL的用户。
  4. 注释符

    在MYSQL中,常见的注释符的表达式为:#或–空格或/**/,

    ,//,-- , --+,,%00,--a。

  5. 内联注释

    内联注释的形式:/*!code */。内联注释可以用于整个SQL语句中用来执行我们的SQL语句,

    举个栗子:

    Index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
  6. MYSQL对大小写不敏感,所以存在大小绕过。


时间注入

​ 注入测试地址http://192.168.23.134/time/time.php?id=1

访问该网址,页面返回yes。,在网址的后面加上一个单引号,再次访问,页面返回no。这个结果与boolean注入非常相似,与之不同的是,时间注入是利用sleep()或benchmark()等函数让Mysql的执行时间更长。时间盲注多与IF(expr1,expr2,expr3)结合使用,此if语句含义是:如果expr1是TRUE,则IF()的返回值为expr2;否则值则为expr3。所以判断数据库库名长度的语句应为:

if(length(database())>1,sleep(5),1)

这条语句的意思是,如果数据库名的长度大于1,则mysql查询休眠5秒,否则查询1。

而查询1的结果大约只有几十毫秒,所以可以根据Burp Suite页面的响应时间,判断条件时候正确。
在这里插入图片描述

页面的响应时间为6154毫秒,也就是6.154秒,表明页面成功执行了sleep(5),所以数据库名长度是大于1的,我们尝试将判断数据库库名长度语句中的长度改为10。
在这里插入图片描述

执行时间为1051毫秒,也就是1.051秒,也就是说服务器并没有执行sleep(5),而是执行了select 1,所以返回yes。经过多次测试后就可以确定数据库库名的长度,接下来我们可以查询数据库库名的第一位字母,查询语句与Boolean盲注相似,使用substr函数,这时的语句应为

if(substr(database(),1,1)=’d’,sleep(5),1)

在这里插入图片描述

​ 程序延迟了6.024秒才返回,说明数据库库名的第一位字母是d,依此类推即可得出完整的数据库库名,表名,字段名和具体数据。此外,时间盲注受网速影响,所以有时候会出现偏差,建议选在网站网速较好的时候测试!

时间注入代码分析

在这个程序页面,程序获取GET参数ID,通过preg_match判断参数ID中是否存在Union危险字符,然后将参数ID拼接到SQL语句中。将数据库中查询SQL语句,如果有结果,则返回yes,否则返回no。当访问该页面时,代码根据数据库查询结果返回yes或no,而不返回数据库的任何数据在页面上,与Boolean注入不同的是,此处没有过滤sleep等字符,代码如下:

<?php

$con=mysqli_connect("localhost","root","root","dvwa");

// 检测连接

if (mysqli_connect_errno())

{

   echo "连接失败: " . mysqli_connect_error();

}

$id = $_GET['id'];

if (preg_match("/union/i", $id)) {

  exit("<htm><body>no</body></html>");

}

$result = mysqli_query($con,"select * from users where `user_id`='".$id."'");

$row = mysqli_fetch_array($result);

if ($row) {

     exit("<htm><body>yes</body></html>");

}else{

  exit("<htm><body>no</body></html>");

}

?>

堆叠查询注入

注入测试网址: http://192.168.23.134/dd/dd.php?id=1

堆叠查询可以执行多条语句,多语句之间以分号隔开。而堆叠查询注入就是利用这个特点,在第二个SQL语句中构造自己要执行的语句,首先访问id=1’,页面返回mysql错误,再访问1’%23,页面返回正常结果。这里可以使用Boolean注入,时间注入,也可以使用另外一种方式—堆叠注入!

堆叠注入语句:

  ‘;select if(substr(user(),1,1)=’r’,sleep(3),1)%23

从堆叠注入语句可以看到,第二条SQL语句(substr(user(),1,1)=’r’,sleep(3),1)%23就是时间盲注的语句,执行结果如图所示
在这里插入图片描述

后面的注入与时间注入的一样,通过构造不同的时间注入语句,可以得到完整的数据库的库名,表名,字段名和具体的数据。以下语句是获取数据库的表名。

‘;select if(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1)=’u’,sleep(3),1)%23
堆叠注入代码分析

在堆叠注入界面中,程序获取GET参数ID,使用PDO的方式进行数据库查询,但仍然将参数ID拼接到查询语句,导致PDO没起到预编译的效果,程序仍然存在SQL注入漏洞,代码如下:

<?php

try {

    $conn = new PDO("mysql:host=localhost;dbname=dvwa", "root", "root");

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->query("SELECT * FROM users where `user_id` = '" . $_GET['id'] . "'");

 

    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

   foreach($stmt->fetchAll() as $k=>$v) {

       foreach ($v as $key => $value) {

            //echo $value;
        }
   }

    $dsn = null;

}
catch(PDOException $e)

{
    echo "error";
}
$conn = null;

?>

使用PDO执行SQL语句时,可以执行多语句,不过这样通常不能直接得到注入结果,因为PDO只会返回第一条SQL语句执行结果所以在第二条语句中可以用update更新数据或者使用时间盲注获取数据。访问dd.php?id=1’;select if(ord(substr(user(),1,1))=114,sleep(3),1)%23时,执行的sql语句为:

select * from users where ‘id’=’1’;select if(ord(substr(user(),1,1))=114,sleep(3),1)#

​ 此时的sql语句为两条!


二次注入

​ 注入测试地址:http://192.168.23.134/sqli-labs/Less-24/

二次注入的原理,在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身还是脏数据。

在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

这里以SQLIlab lesson-24为例,也是考察的二次注入的点。
在这里插入图片描述
这题正常的流程是首先注册一个账号,然后登陆进去会让你修改新的密码。
在这里插入图片描述

直接尝试在登陆处尝试SQL注入,payload: cck’# 发现失败
在这里插入图片描述

这里我们换一种思路,注册一个test’#的账户。

在这里插入图片描述

发现账户被成功注册,因此可以推测程序并未对脏数据对行后处理。经过转义的数据又被还原到数据库中。

在这里插入图片描述

这里我们有一个test的账户,密码为1234,如果我们以test’#账户登录,进行修改密码如下
在这里插入图片描述

此时不需要当前密码就可以修改密码

在这里插入图片描述

因此可以发现二次注入,注入的数据不会在刚开始就作用,而是在第二次引用的时候,由于脏数据被引用而导致的注入。

二次注入代码分析

我们查看login.php,审计一下登陆处的逻辑
在这里插入图片描述

登陆处的username和password都经过mysql_real_escape_string函数的转义,直接执行SQL语句会转义’,所以该处无法造成SQL注入。

注册用户的时候用了mysql_escape_string过滤参数

在这里插入图片描述
但是脏数据还是插入了数据库

在这里插入图片描述

username直接从数据库中取出,没有经过转义处理。在更新用户密码的时候其实执行了下面的命令:

“UPDATE users SET PASSWORD=’22′ where **username=’test’#**‘ and password=’$curr_pass’”;

因为我们将问题数据存储到了数据库,而程序再取数据库中的数据的时候没有进行二次判断便直接带入到代码中,从而造成了二次注入。


宽字符注入

注入测试网址:http://192.168.23.134/kzf/kuanzifu.php?id=1

访问id=1’,页面并没有报错,反而多了一个转义字符(反斜杠)。

在这里插入图片描述

从返回结果看,参数id=1在数据库查询时是被单引号包围的。当传入id=1’时,传入的单引号又被转义字符转义,导致参数id无法逃逸单引号字符的包围,所以在一般情况下,此时是不存在SQL注入漏洞的。不过,有一个特例,就是当数据库的编码为GBK时,可以使用宽字节注入,宽字节的格式是在地址后先加一个%df,繁体字’連’,所以此时单引号成功逃逸,报出MySQL数据库的错误,如图

在这里插入图片描述

由于输入的参数id=1’,导致SQL语句多了一个单引号,所以需要使用注释符来注释程序自身的单引号,访问id=1%df’%23,看页面返回结果。
在这里插入图片描述

此时不再报错。

使用and 1=1和and 1=2进一步判读注入,访问id=1%df’and 1=1%23和id=1%df’and 1=2%23,如图所示

在这里插入图片描述

在这里插入图片描述

当and 1=1 程序返回正常,and 1=2程序返回错误,所以判断该参数id存在SQL注入漏洞,接着使用order by查询数据库表的字段数量,得知字段数为8。

在这里插入图片描述

因为页面直接显示了数据库中地内容,所以可以使用Union查询。接下来就是union注入一样,先判断显示位。

在这里插入图片描述

接下来尝试在4的位置上查询当前数据库的库名。

在这里插入图片描述

查询数据库的表名时,一般使用以下语句。

select table_name from information_schema.tables where table_schema=’dvwa’ limit 0,1

但是此时,由于单引号被转义,会自动出现反斜杠,导致报错,所以此时可以利用另一种方法:嵌套查询。就是在一个查询语句中,再添加一个查询语句,如下

select table_name from information_schema.tables where table_schema=(select database()) limit 0,1

在这里插入图片描述

查询字段值,这里我们采用另外一种方式,16进制绕过,逃逸

union select 1, 2,3,(select column_name from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273 limit 0,1),5,6,7,8#

在这里插入图片描述

dvwa的16进制为0x64767761,users的16进制为0x7573657273

宽字符注入代码分析

​ 在宽字节注入界面,程序获取GET参数ID,并对参数ID使用addslashes()转义,然后拼接SQL语句中,进行查询。

<?php

$conn = mysql_connect('localhost', 'root', 'root') or die('bad!');

mysql_select_db('dvwa', $conn) OR emMsg("数据库连接失败");

mysql_query("SET NAMES 'gbk'",$conn);

$id = addslashes($_GET['id']);

$sql="SELECT * FROM users WHERE user_id='$id' LIMIT 0,1";

$result = mysql_query($sql, $conn) or die(mysql_error());

$row = mysql_fetch_array($result);

      if($row)

     {

    echo $row['user_id'] .":". $row['user'];

    }

      else

      {

     print_r(mysql_error());

     }

?>

</frot>

<?php

echo "<br>The Query string is:".$sql."<br>";

?>

​ 当访问id=1’时,执行的SQL语句为:

SELECT * from users where id=’1\’’

可以看到单引号被转义字符‘\’转义,所以在一般情况下,是无法注入的,当然也有绕过方法,但是由于在数据库查询前执行了 SET NAMES ‘GBK’,将编码设置为宽字节GBK,所以此处存在宽字节注入漏洞。

在PHP中,通过iconv()进行编码转换时,也可能存在宽字节注入漏洞!


Cookie注入

注入测试地址:http://192.168.23.134/cookie/cookie.php

页面没有GET参数,但是页面返回正常,使用Burp Suite抓取数据发现cookie中存在id=1的参数

在这里插入图片描述

修改cookie中的id=1为id=1’,然后再次访问url,发现页面返回错误。然后分别修改cookie中id=1为id=1 and 1=1和id=1 and 1=2,再次访问,访问结果如图
在这里插入图片描述
在这里插入图片描述

可以发现,此程序存在SQL注入。接下来就是常规操作了,不再赘述!

Cookie注入代码分析

​ 程序通过 C O O K I E 获 取 浏 览 器 c o o k i e 中 的 数 据 , 在 c o o k i e 注 入 界 面 中 程 序 通 过 _COOKIE获取浏览器cookie中的数据,在cookie注入界面中程序通过 C​OOKIE获取浏览器cookie中的数据,在cookie注入界面中程序通过_COOKIE获取参数ID,然后直接将ID拼接到select语句中进行查询,如果有结果,输出到界面。

<?php

  $id = $_COOKIE['id'];

  $value = "1";

  setcookie("id",$value);

  $con=mysqli_connect("localhost","root","root","dvwa");

  if (mysqli_connect_errno())

  {

   echo "连接失败: " . mysqli_connect_error();

  }

  $result = mysqli_query($con,"select * from users where `user_id`=".$id);

  if (!$result) {

   printf("Error: %s\n", mysqli_error($con));

    exit();
  }

  $row = mysqli_fetch_array($result);

  echo $row['user_id'] . " : " . $row['user'];

  echo "<br>";

?>

可以看到,cookie中的参数ID并没有做任何过滤,就直接拼接到了SQL语句中,因此存在SQL注入漏洞!


Base64注入

注入测试地址:http://192.168.23.134/bs4/base64.php?id=MSc=

从URL可以看出,ID参数经过base64编码,’MSc=’是1’的base64编码,当访问该网址时页面报错。

在这里插入图片描述

接下来验证注入,把参数为1 and 1=1 和 1 and 1=2并进行base64编码如

测试1 and 1=1 如下

在这里插入图片描述

测试1 and 1=2
在这里插入图片描述

从返回结果可以看出,访问id =1 and 1=1时,页面返回与id=1相同的结果,而访问id=1 and 1=2时,页面返回与id=1不同的结果,所以存在SQL注入漏洞。接下来可以使用order by查询字段,使用union完成此次注入

Base64注入代码分析

​ 在base64注入界面,程序获取GET参数ID,用base64_decode()进行解码,然后直接将解码后的$id拼接到select语句进行查询,通过while循环,将查询结果输入到页面上。

<?php

$id = base64_decode($_GET['id']);

$conn = mysql_connect("localhost","root","root");

mysql_select_db("dvwa",$conn);

$sql = "select * from users where user_id=$id";

$result = mysql_query($sql);

while($row = mysql_fetch_array($result)){

      echo "ID:".$row['id']."<br >";

      echo "user:".$row['user_id']."<br >";

      echo "pass:".$row['user']."<br >";

      echo "<hr>";

}
      mysql_close($conn);

      echo "now use".$sql."<hr>";

?>

由于代码并未对解码后的参数$id进行过滤,就将参数拼接到了SQL查询语句中,所以存在sql注入漏洞!

这种攻击方式还有其它利用场景,例如,如果有WAF,则WAF会对传输的参数ID进行检查,但是由于传输中的参数ID经过base64编码,所以WAF很有可能检测不到危险代码,进而绕过了WAF!


XFF注入

注入测试地址:http://192.168.23.134/xff/xff.php

从bp抓取数据包可以看出HTTP请求的头部有一个X-Forwarded-for。以下简称XFF头,它代表客户端真实ip,通过修改XFF头可以伪造客户端IP。

在这里插入图片描述

将XFF的值后面加个单引号,再次访问,报错

在这里插入图片描述

接下来,X-Forwarded分别设置为192.168.23.134’and 1=1# 和192.168.23.134’and 1=2#,结果如图

在这里插入图片描述

在这里插入图片描述

通过页面的返回结果可知,该程序存在SQL注入,接下来就是常规注入了,不再赘述!

XFF注入代码分析

​ PHP中的getenv()函数用于获取一个环境变量的值,类似于$_SERVER或$_ENV,返回环境变量对应的值,如果环境变量不存在则返回FALSE。

使用以下代码就可以获取客户端IP地址,程序先判断是否存在HTTP头部参数HTTP_CLIENT_IP,如果存在,则赋给$ip,如果不存在,则判断是否存在HTTP头部参数HTTP_X_FORWARED-FOR,如果存在赋给$ip,如果不存在,则将HTTP头部参数REMOTE_ADDR赋给$ip。

<?php

  $con=mysqli_connect("localhost","root","root","dvwa");

  if (mysqli_connect_errno())

  {

    echo "连接失败: " . mysqli_connect_error();

  }

  if(getenv('HTTP_CLIENT_IP')) {

    $ip = getenv('HTTP_CLIENT_IP');

  } elseif(getenv('HTTP_X_FORWARDED_FOR')) {

    $ip = getenv('HTTP_X_FORWARDED_FOR');

  } elseif(getenv('REMOTE_ADDR')) {

    $ip = getenv('REMOTE_ADDR');

  } else {

    $ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];

  }
  $result = mysqli_query($con,"select * from users where `ip`='$ip'");

  if (!$result) {

    printf("Error: %s\n", mysqli_error($con));

    exit();

  }

  $row = mysqli_fetch_array($result);

  echo $row['user_id'] . " : " . $row['user'];

  echo "<br>";

?>

接下来,$ip被拼接到了select语句,然后将查询结果输出到界面上。

由于HTTP头部参数是可以伪造的,所以可以添加CLIENT_IP或XFF头部,进行注入,且程序并未对得到的$IP进行过滤,故存在SQL注入漏洞!


结语

到此SQL注入代码设计结束,下节内容为SQL注入的WAF绕过姿势,如有兴趣交流,请移步—>
传送门:
SQL注入回顾篇(一)
SQL注入回顾篇(三)
SQL注入回顾篇(四)

SQL注入攻击及防御 手动注入+sqlmap自动化注入实战(网络安全学习12) 1 项目实验环境 测试渗透机:kali_linux-2020 链接:https://pan.baidu.com/s/1apN96nIcs1Fyx8YmFs24Xg 提取码:32ve 目标靶机:owasp_Broken_Web_Apps 链接:https://pan.baidu.com/s/1CMJ2aERmDGlXXkhUmjDmtA 提取码:9zsj 2 SQL注入概述 2.1 SQL注入简介 在owasp年度top 10安全问题中,注入高居榜首。SQL注入攻击指的是通过构建特殊.. 阅读详情

相关推荐

SQL注入原理和手动注入

在owasp年度top10安全问题中,注入高居榜首SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里面的一些组合,通过执行SQL语句而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据入侵系统。 (1)对于web应用程序而言,用户核心数据存储在数据库中,例如MySQL,SQL,Oracle; (2)通过SQL注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制web服务器等其他操作。 (3)SQL注入即攻击者通过构造特殊的S.

xy_的博客 1188

SQL注入介绍

sql总结

呱呱呱 1826

亚马逊(Amazon ads)广告API申请步骤(已经更新完)

你如果是自己的店铺使用,就选择左边的、如果是授权的那种给别人用就选右边的。审核通过了才能进行下一步,我目前就是刚申请完,后续会持续更新!然后会调整到,下面的页面,选择Agency然后右上角点击创建。审核通过会发邮件到你的企业邮箱、时间大概是1-7天左右。输入对应的信息,点击提交审核,就可以开始申请了。1、广告平台跟卖家平台是分开的,这个概念要清楚。2、注册广告一定要用企业邮箱!回到首页,点击成为合作伙伴。注册了以后会跳转到广告。然后再点击加入合作伙伴。然后会弹出下面的页面。

阿泽的博客 5655

Sql注入

联合注入 判断注入点 GET['id'] ?id=n eg:127.0.0.1/sqli-labs/Less-1/?id=1 %23(#):过滤后面的语句 eg:127.0.0.1/sqli-labs/Less-1/?id=1' %23 加 ' 报错,再加%23(#)不报错,可判断一个注入点 整型注入:注入的是1,2,3...... 字符型注入:注入的是a,b,c,def...... 判断显示位(列) order by n n>列数 -->报错 n<=列数 --&

aetlypdlg_ys的博客 1744

2019年上交电院计算机直博保研经历

本人选报的是上交六月一日在武汉举办的直博选拔,五月三十一日到达酒店,地点在武汉大学旁边(PS:上交是不管住宿、来回车票的,~划重点~包括夏令营),入住后当然是紧张的准备英语面试等等内容了,当天我是排在了下午面试,感觉还很好,上午可以多睡一会,最好能够去踩踩点上午,然后下午面试一定要早去,说是一点开始,但是老师十二点半就开始让学生进去了,有一个同学排在第二个,但是当时叫到他时还不到一点,没到,最后据...

LifeMaker的博客 4892

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 338

SQL注入

为了避免从MySQL中导出的SQL语句不能被其他数据库使用,它把一些MySQL特有的语句放在 /*!紧跟数据库版本号时,表示当目前的数据库版本号大于指定的版本号时,里面的内容才会被解释 SQL 语句,否则会被当成注释处理而被忽略掉,例如:/*!是指通过web应用程序在接受用户输入的数据时没有做好过滤或验证,并且将其数据带到了数据库中进行执行,使攻击者可以拼接构造它的执行代码。攻击者注入一段包含注释符的SQL语句,将原来的语句的一部分注释,注释掉的部分语句不会被执行。把用户输入的数据当做代码执行。

Thewei666的博客 1613

双目立体匹配算法:SGBM

SGBM(Semi-Global Block Matching)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的优缺点,提出了一种折中的方法,既能保证视差图的质量,又能降低计算复杂度。

weixin_45303602的博客 9404

SQL注入中,注释#、 --+、 --%20、 %23到底是什么意思?sqli-labs-master

1.# 和 -- (有个空格)表示注释,可以使它们后面的语句不被执行。在url中,如果是get请求**(记住是get请求,也就是我们在浏览器中输入的url)** ,解释执行的时候,url中#号是用来指导浏览器动作的,对服务器端无用。所以,HTTP请求中不包括#,因此使用#闭合无法注释,会报错;而使用-- (有个空格),在传输过程中空格会被忽略,同样导致无法注释,所以在get请求传参注入时才会使用--+的方式来闭合,因为+会被解释成空格。 2.当然,也可以使用--%20,把空格转换为urlencode编码格式

weixin_43096078的博客 2万+

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8113

C# 实现鼠标轨迹录制与回放自动化功能(附源码)

通过本文的介绍,相信大家已经掌握了鼠标轨迹录制与回放功能的实现方式。该功能在自动化测试和重复性工作中具有重要应用价值。后续可以进一步优化,增加更多扩展功能,形成一个完整的自动化工具。

weixin_72139050的博客 1755

SQL注入回顾篇(一)

前言 忆往昔,峥嵘岁月稠!大学已经到了大三了,打了很多比赛,回顾还是挺欣慰!此系列来由是想留一点东西,把所学知识整理一下,同时也是受github上Micro8分享的启发,故想做一些工作,以留后人参考,历时两个星期,第一系列SQL注入回顾篇出炉!内容分四节发布,其中SQL注入代码审计为两节,WAF绕过总结为1节,SQLMAP使用总结为1节!此为SQL注入代码审计第一部分。欢迎各位斧正,交流! 文章目...

JBlock的博客 1802

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分析工作,本次主要基于对话工作流模式对Excel文件、csv文件进行解析处理,并进行成图等数据分析工作。主要用到的插件有LLM节点,文档提取器、参数提取器、自定义代码节点、echart插件等。实现解析Excel数据,经过上述不同节点的处理分析流程,最终实现数据统计图展示。

hhue2007的专栏 1万+

SQL注入回顾篇(四)

前言 忆往昔,峥嵘岁月稠!大学已经到了大三了,打了很多比赛,回顾还是挺欣慰!此系列来由是想留一点东西,把所学知识整理一下,同时也是受github上Micro8分享的启发,故想做一些工作,以留后人参考,历时两个星期,第一系列SQL注入回顾篇出炉!内容分四节发布,其中SQL注入代码审计为两节,WAF绕过总结为1节,SQLMAP使用总结为1节!此为SQLMAP使用总结部分。欢迎各位斧正,交流! 文章目录...

JBlock的博客 4536

DTI-ALPS处理笔记

前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (),主要用于无创评估脑内淋巴系统功能的衡量数值。C图和D图中的蓝色部分是投射纤维,绿色部分是联合纤维,红色部分是皮下纤维。

weixin_52073820的博客 4789

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SQL 注入总结(详细)

这篇文章是最近学习 SQL 注入后的笔记,里面整理了 SQL 常见的注入方式,供大家学习了解 SQL 注入的原理及方法,也方便后续自己回顾,如有什么错误的地方欢迎指出!

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SQL注入漏洞回顾

第一部分:信息收集 信息收集是渗透的最重要的一步,它决定你渗透能否成功的%60. 对于SQL注入,前期需要了解对方~数据库的类型~,~网站路径~,为后续测试SQL注入提供一个正确的道路。 第二部分:SQL注入之数据库分类 目前网站数据库类型主流的有mysql、Access、Mssql、mongodb、Postgresql、sqllite、oracle等等。 1.access注入 与其他类型注入不同,属于独立存在管理类型。 (1)不存在跨库注入; (2)无文件读写操作; (3)无版本、数据库

guanjian_ci的博客 4391

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SQL 注入策略(二)

既然我们已经通过本书探讨了 SQL 注入,我们可以讨论现今 SQL 注入及其安全问题,同时考虑它在全球互联网安全方面的影响,以及在现实世界中的后果。现在,我们来到了这段旅程的终点。在处理过我们所面对的所有主题之后,这一次以更加简洁的方式呈现,您掌握了关于信息安全的一些知识,并且看到即使是 SQL 注入漏洞(希望您已经掌握了这一主题),也能在现实世界中发挥重要作用。既然您已经读完了本书,您可以随意探索信息安全的相关话题,或者继续在受控环境中进行实践。

龙哥盟 795

SQL注入回顾篇(三)

前言 忆往昔,峥嵘岁月稠!大学已经到了大三了,打了很多比赛,回顾还是挺欣慰!此系列来由是想留一点东西,把所学知识整理一下,同时也是受github上Micro8分享的启发,故想做一些工作,以留后人参考,历时两个星期,第一系列SQL注入回顾篇出炉!内容分四节发布,其中SQL注入代码审计为两节,WAF绕过总结为1节,SQLMAP使用总结为1节!此为SQL注入代码审计第二部分。欢迎各位斧正,交流! 文章目...

JBlock的博客 4310

SQL报错注入

本篇为SQL注入的报错注入,详细内容包含了sqllabs第五关报错注入 updatexml报错注入原理及思路 常见的报错函数 floor报错注入原理 1、概念 2、函数回顾 2.1 rand函数 2.2 floor(rand(0)*2)函数 2.3 group by函数 2.4 count(*)函数 2.5 函数综合报错 3、报错分析 4、总结等等

钟言的博客 1万+

学习回顾TOP10之sql注入

ok同志们我又来了哈,其实这几篇你们会发现都是差不多时间发布的,因为大概率都是我学完后写的,想着总得还是记录一下,所以才有这些博客哈,ok废话不多说,我们叠甲开始。此片文章来自学习后的回顾记录,大佬勿喷,有错误请指出本篇只针对sql注入漏洞来写,如对sql语句完全不了解的这边也不赘述知周所众,数据库一直都是网站的重要资源,里面存放着不少宝贝,不仅有着用户的一些信息,如果满足特定的条件的话更是能直接上传webshell,给我们大大的惊喜口牙。😋。

2503_93050403的博客 766

SQL注入--报错注入

报错注入是利用数据库错误信息中的回显内容来获取数据库信息。注入点没有直接显示查询结果,但通过构造触发SQL错误,让数据库“说出”它自己。报错盲注是最强力的非回显注入手段之一,能快速泄露数据库信息与是核心武器一旦发现无回显注入点,应优先尝试报错注入而非盲注爆破多练习,熟练掌握这些报错语句的结构、逻辑和组合方法,配合Pikachu/DVWA等靶场效果最佳。

rasssel的博客 893

SQL注入攻击

断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提。后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。当布尔型注入没有结果(页面显示正常)的时候,我们很难判断注入的代码是否被执行,也可以说。是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采。注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在。

wd200426的博客 1191

警惕SQL注入的危险

                                                   程科峰    基础的SQL语言对于每个从事SQL开发的人员来说都是非常重要的,而SQL注入是从SQL应用衍生出来的一种漏洞或攻击方法。本文在回顾基础的SQL语言的基础上,介绍了SQL注入和如何使用SQL注入法进行网络攻击。    网络的应用和普及产生了大量的数据信息,这些数据信息多被存在数据库中。

6万+

WEB 漏洞 - SQL 注入之 MySQL 注入深度解析

在网络安全的奇妙世界里,我们就像在宇宙中探索未知一样,不断挖掘各种隐藏的奥秘。今天,我们要深入探讨 WEB 漏洞中 SQL 注入在 MySQL 环境下的相关内容。

m0_57836225的博客 1197

SQL回顾

②Cookie 是一种客户端的存储技术,用于在浏览器中存储少量数据。参数包含在请求体中,可以是键值对格式或其他格式,如 JSON。①Session 是一种服务器端的存储技术,用于在用户与网站的交互期间保持用户状态。会话数据通常存储在服务器上的文件或数据库中,可以永久存储用户信息,直到会话过期或被清除。会看到结果,正确密码,与其他的长度不一样,由于网站机制,防爬机制,这里我把密码从666改为了8,节约访问次数。旧密码无所谓,利用 admin’# ,进行修改,修改密码实际上修改的是admin的密码。

Wincreds的博客 623
上一篇: SQL注入回顾篇(一)
下一篇: SQL注入回顾篇(三)
JBlock
博客等级 码龄9年 189粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值