首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >本地档案收录

本地档案收录
EN

Code Review用户
提问于 2018-04-04 08:06:01
回答 1查看 292关注 0票数 2

Intro

在一个CTF过程中,我遇到了dompdf漏洞,这在开发b中得到了解释。

但是,当我执行该漏洞时,它以PDF格式提供给了我,并且不断地读取文件内容(读取、剥离和base64解码)是一种痛苦。所以我制作了一个bash脚本来自动完成这些事情。

我对结果很满意,但我想也许有一种方法可以将这些双sed分解为一个Regex捕获。这是因为[( ... )]在结果字符串中是唯一的。

代码语言:javascript
运行
复制
#!/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
EN

回答 1

Code Review用户

回答已采纳

发布于 2018-04-06 21:25:31

输入验证

我发现这是一种不寻常的验证脚本参数的方法:

如果\x{e76f}那么

更常见的方法是验证确实有两个参数:

代码语言:javascript
运行
复制
if [ $# != 2 ]; then

请注意,这与原来的不完全相同。原始验证$1$2都不是空的,并且它静默地允许超过2个参数。

为什么echo是个子壳?

这个echo的目的是什么:

回波curl --silent $URL

而不是简单地:

代码语言:javascript
运行
复制
curl --silent $URL

如果目的是将多行连接成一个,我将使用tr

代码语言:javascript
运行
复制
curl --silent "$URL" | tr -d '\n'
# or
curl --silent "$URL" | tr '\n' ' '

这样写,目的就更清楚了。另一个优势是简化处理程序。还请注意,我在用作命令参数的$URL周围添加了双引号,这是一个很好的经验规则,可以防止意外的分词和全局现象。

One sed来统治他们所有的

而不是这样:

sed‘S/*[(//’sed‘S/)]。*//

可以使用多个sed参数对单个-e进行多个表达式:

代码语言:javascript
运行
复制
sed -e 's/.*\[(//' -e 's/)\].*//'

为了达到最大的清晰度,我使用-e,即使只使用单个表达式。

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/191225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档