我使用shell脚本使用wget获取文件并搜索模式。我的shell脚本如下:
#Execute commands one by one
while read line
do
STARTTIME=$(($(date +%s%N)/1000000))
line2=$(wget -q --post-data "$line" -O PHPFiles/test.php http://localhost:1234/XSS/XSS2/test.php)
ENDTIME=$(($(date +%s%N)/1000000))
GAP=$(($ENDTIME-$STARTTIME))
DIFF=$(($DIFF+($ENDTIME-$STARTTIME)))
echo "Time Taken "$GAP
finalSearchLine1="${line/&name2=/ }"
finalSearchLine2="${finalSearchLine1/name=/}"
echo "$finalSearchLine2"
if grep -q -F "$finalSeachLine2" -a PHPFiles/test.php;
then
echo found
success=$((success+1))
else
echo not found
failure=$((failure+1))
fi
rm PHPFiles/test.php
done < $1
echo "***************"
echo "Success "$success
echo "Failure "$failure
echo "Total Time "$DIFF
echo "Average Time "$((DIFF/(success+failure)))
但是,我遇到了grep命令的问题。有时,数据$finalSearchLine2
包含引号,例如:
<script >alert("XSS"); </script>
这似乎会导致grep命令出现问题。对于if
语句,即使found
变量中没有匹配的模式,我似乎总是将结果设为$finalSearchLine2
。我不知道是否可以在grep变量中使用转义字符串。任何人都可以建议一个可能的解决方案吗?
答案 0 :(得分:0)
Grep需要双引号才能像\"
一样进行转义
因此,作为第一个解决方案,您可以尝试:
temp_variable=$(sed 's/"/\\"/g' <<< $temp)
if grep -q -F "$temp_variable" -a /PHPFiles/test.php;
所以你先用sed转义双引号,然后将结果存储在temp_variable中。然后在grep中使用temp_variable。