sql注入 /**/
时间: 2023-10-20 20:09:04 浏览: 65
SQL注入是一种攻击技术,它利用未经正确过滤的用户输入将恶意SQL代码插入到应用程序的数据库查询中。在SQL注入中,/**/是多行注释的语法,可以用来绕过应用程序的输入过滤,使恶意注入的代码不被检测到。例如,在MySQL中,/**/可以用来注释掉恶意代码,使其不被视为有效的SQL语句。同时,通过在注释中添加特定的语句(如/*!50001sleep(3)*/),可以执行恶意注入的代码。
相关问题
payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
这是一个使用 SQL 注入技术的 payload,用于从 MySQL 数据库中获取数据库名。其中,`substr(str, pos, len)` 函数用于截取字符串,`database()` 函数用于返回当前数据库名。
具体来说,`%d` 是占位符,表示待填入的数字。通过循环填入数字 0-127,可以逐个比较当前数据库名的每个字符的 ASCII 码值,最终还原出当前数据库名。
举例来说,当填入数字 97 时,payload 变成了:
```
ascii(substr(database()from/**/1/**/for/**/1))=97
```
该语句的含义是:如果当前数据库名的第一个字符的 ASCII 码值等于 97,那么查询结果为真,否则为假。根据这个原理,可以用二分法逐位确定当前数据库名。
mysql中/**/and干扰写法
在MySQL中,/**/是注释符号,可以用于注释掉一段代码或者SQL语句中的一部分。在SQL注入中,攻击者可以利用/**/来干扰SQL语句的执行,从而实现恶意注入。具体的写法如下:
1. 利用/**/注释掉and后面的条件
例如,原始SQL语句为:
SELECT * FROM users WHERE username='admin' AND password='123456';
攻击者可以将其改写为:
SELECT * FROM users WHERE username='admin'/**/AND/**/password='123456';
这样,当MySQL解析SQL语句时,会将and后面的条件注释掉,从而使查询结果不受password条件的限制。
2. 利用/**/注释掉整个where条件
攻击者可以将整个where条件注释掉,从而使查询结果返回所有记录。例如:
SELECT * FROM users WHERE username='admin' AND password='123456';
可以改写为:
SELECT * FROM users/**/WHERE/**/1=1;
这样,由于1=1永远为真,所以查询结果会返回所有用户记录。
总之,为了防范SQL注入攻击,开发者应该始终保持警惕,避免在SQL语句中使用动态拼接参数,同时对用户输入进行严格的校验和过滤。