sql注入时回显return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
时间: 2023-11-08 10:05:18 浏览: 47
在SQL注入攻击中,攻击者会在输入框中输入一些恶意代码,以此来获取或篡改数据库中的数据。而回显信息是指攻击者在注入代码后,服务器返回的信息。在这个引用中,回显信息是通过preg_match()函数来检测关键字,如果检测到了select、update、delete、drop、insert、where或者.等关键字,就会被过滤掉,从而防止SQL注入攻击。但是,攻击者可以通过联合查询等方式来绕过这种过滤,从而实现注入攻击。
相关问题
我在做ctf练习题,注入?inject=1 union select 1,2,3时,回显:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);sql注入的题目,怎么解决
在处理SQL注入问题时,可以使用正则表达式来过滤用户输入的内容,以防止恶意注入。根据提供的引用内容,可以使用preg_replace函数来过滤用户输入的内容,将其中的关键字替换为空字符串。例如,可以使用以下代码来过滤用户输入的内容:
```php
$username = preg_replace('/select|union|from|where|insert|update/','',$username);
```
这样,如果用户输入的内容中包含了select、union、from、where、insert或update等关键字,这些关键字将被替换为空字符串,从而防止SQL注入的发生。
另外,根据第二个引用内容,你提到了一个具体的SQL注入练习题。在这个练习题中,你输入的参数inject的值是"1 union select 1,2,3"。根据引用内容,可以看出这个练习题中存在一个注入点,可以通过注入语句来获取数据库中的信息。
为了解决这个注入问题,可以使用预处理语句或者参数化查询来防止SQL注入。具体的解决方法取决于你使用的编程语言和数据库。下面是一个使用PHP和MySQL的示例代码,演示如何使用预处理语句来解决SQL注入问题:
```php
$inject = $_GET['inject'];
$stmt = $mysqli->prepare("SELECT * FROM table_name WHERE column_name = ?");
$stmt->bind_param("s", $inject);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// 处理查询结果
}
$stmt->close();
```
在这个示例中,我们使用了预处理语句和参数绑定来执行查询,确保用户输入的内容不会被解释为SQL语句的一部分,从而防止SQL注入的发生。
#!/bin/bash # Assets TEST_IMG=demo.png SDK_ROOT=$PWD TEST_ROOT=$PWD BIN_NAME=test_demo DEVICE_TEST_PATH=/data/local/tmp/ts_ai_sdk_test MODEL_PATH=/sdcard/models RUSULT=/data/local/tmp/ts_ai_sdk_test/results/ RUNTIME=DSP adb root # Push test assets adb shell rm -rf $DEVICE_TEST_PATH # adb shell rm -rf $MODEL_PATH adb shell mkdir -p $DEVICE_TEST_PATH/jpgs adb shell mkdir -p $DEVICE_TEST_PATH/results/post_result adb shell mkdir -p $DEVICE_TEST_PATH/results/img_result #adb shell mkdir -p $MODEL_PATH adb push images/* $DEVICE_TEST_PATH/jpgs # Push SNPE libraries adb push ${SDK_ROOT}/libs/ $DEVICE_TEST_PATH adb push ${SDK_ROOT}/models/model.exf $DEVICE_TEST_PATH/ # Push executable adb push build/$BIN_NAME $DEVICE_TEST_PATH # Test adb shell "chmod +x $DEVICE_TEST_PATH/$BIN_NAME" echo "Running on Android device ..." echo "LD_LIBRARY_PATH='$DEVICE_TEST_PATH/libs' $DEVICE_TEST_PATH/$BIN_NAME $DEVICE_TEST_PATH/jpgs $RUSULT $DEVICE_TEST_PATH/model.exf" echo "Done." adb shell "LD_LIBRARY_PATH='$DEVICE_TEST_PATH/libs' $DEVICE_TEST_PATH/$BIN_NAME $DEVICE_TEST_PATH/jpgs $RUSULT $DEVICE_TEST_PATH/model.exf" # Pull result adb pull $DEVICE_TEST_PATH/results/ . sleep 1改为bat脚本
将该脚本转换为 Windows 的 batch 脚本,需要进行以下修改:
1. 更改第一行为 `@echo off`,表示关闭命令回显。
2. 将变量的赋值方式从 `$变量名=值` 改为 `set 变量名=值`。
3. 将 `adb` 命令行中的路径分隔符 `/` 改为 Windows 下的路径分隔符 `\`。
4. 在执行命令行时需要使用 `call` 命令。
修改后的 batch 脚本如下:
```
@echo off
REM Assets
set TEST_IMG=demo.png
set SDK_ROOT=%cd%
set TEST_ROOT=%cd%
set BIN_NAME=test_demo
set DEVICE_TEST_PATH=/data/local/tmp/ts_ai_sdk_test
set MODEL_PATH=/sdcard/models
set RESULT=/data/local/tmp/ts_ai_sdk_test/results/
set RUNTIME=DSP
REM Push test assets
adb root
adb shell rm -rf %DEVICE_TEST_PATH%
adb shell mkdir -p %DEVICE_TEST_PATH%/jpgs
adb shell mkdir -p %DEVICE_TEST_PATH%/results/post_result
adb shell mkdir -p %DEVICE_TEST_PATH%/results/img_result
adb push images\* %DEVICE_TEST_PATH%/jpgs
REM Push SNPE libraries
adb push %SDK_ROOT%\libs\ %DEVICE_TEST_PATH%
adb push %SDK_ROOT%\models\model.exf %DEVICE_TEST_PATH%\
REM Push executable
adb push build\%BIN_NAME% %DEVICE_TEST_PATH%\
REM Test
adb shell "chmod +x %DEVICE_TEST_PATH%\%BIN_NAME%"
echo Running on Android device ...
echo "LD_LIBRARY_PATH='%DEVICE_TEST_PATH%\libs' %DEVICE_TEST_PATH%\%BIN_NAME% %DEVICE_TEST_PATH%/jpgs %RESULT% %DEVICE_TEST_PATH%/model.exf"
echo Done.
call adb shell "LD_LIBRARY_PATH='%DEVICE_TEST_PATH%\libs' %DEVICE_TEST_PATH%\%BIN_NAME% %DEVICE_TEST_PATH%/jpgs %RESULT% %DEVICE_TEST_PATH%\model.exf"
REM Pull result
adb pull %DEVICE_TEST_PATH%/results/ .
timeout /t 1
```