c - 利用linux、scanf和读取权限
问题描述
您可能会意识到这看起来像是一项作业,因此,我只是在寻找线索,而不一定是完整的解决方案。
TLDR:有没有办法在 C 中进行命令注入scanf
?以及如何读取我们无权读取的文件?
目标是打开和读取两个文件,这将允许访问第三个文件。file1
,file2
和file3
. 该文件的权限如下:
-rw-r--r-- 1 root source 40 1 Jan. 00:00 folder/file1
-rw-r----- 1 root source 40 1 Jan. 00:00 folder/file2
-rw-r----- 1 root source 40 1 Jan. 00:00 file3
drwxr-x--x 2 root source 4096 1 Jan. 00:00 folder
-rwxr-sr-x 1 root source 14376 1 Jan. 00:00 exe
我们在一个文件夹source
中,其中包含file3
一个可执行文件exe
和另一个包含两个文件的文件夹。该exe
程序显示了file3
我们是否可以访问file 1
和的内容file 2
。file1
内容是可读的,因此我们知道它的内容是 pass1。
因此,当我们执行 时exe
,我们会看到一个提示(即 a scanf
,程序是 C 语言)。
使用strace
,这是我们得到的:
read(0, pass1
"pass1\n", 1024) = 7
openat(AT_FDCWD, "/source1/folder/file1", O_RDONLY) = 3
read(3, "pass1", 6) = 6
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
// The next part only appear when we enter pass1 at the prompt
openat(AT_FDCWD, "/source1/folder/file2", O_RDONLY) = -1 EACCES (Permission denied)
read(4, 0x5636137c16c0, 16) = -1 EBADF (Bad file descriptor)
在这里,我们看到了我认为是一种字符串比较,当我们在提示符下得到 pass1 时,exe
尝试打开第二个文件但无权这样做。暂定打开之前没有第二次提示file2
,所以没有机会进入第二遍尝试打开file2
,反正我们没有权限。
我的问题是,有没有办法通过提示进行命令注入scanf
?以及如何解决我们不允许阅读的事实file2
?还有一种方法可以使我们在第二次读取时在提示符处输入的内容不同(例如:第一次读取时为 pass1,第二次读取时为 pass2,因为我们在提示符处输入了 pass1 和 pass2?)。
解决方案
推荐阅读
- apache - 使用 apache cxf 和 maven 我得到的代码看起来不正确
- holoviews - 尝试在布局中组合多个 DynamicMap 时如何确定嵌套问题是什么
- python - 获取 ValueError:在尝试将匹配的文件名从 csv 复制到另一个目录时,没有足够的值来解压(预期为 2,得到 1)
- c++ - 如何像函数一样调用构造函数?
- ios - 视频放在集合视图中的图像顶部?
- c++ - Assimp 中的 aiNodeAnim
- haskell - 中断也是 GHC 中的异步异常吗?
- vba - 条件 IF 不匹配
- mysql - Mysql 按日期分组,列中有子查询
- r - 反应值不会在应该更新的时候更新