pwnable.kr---cmd2

pwnable.kr—cmd2

解题思路

同cmd1的writeup一样,一步一步解析问题:

delete_env();

此行清除了所有的环境变量;因此想在执行cmd2之前设置环境变量并利用变量绕过filter,那么这一步就是一个阻碍。另外要注意的是,extern char ** environ中environ是一个系统已经定义的变量,在此声明后即可使用,它的作用是指向环境变量。

if(filter(argv[1])) return 0;

此行以及已定义的filter函数要求输入命令中不能包含PATH、export、/、`、flag等字段。

于是还是想办法执行”/bin/cat flag”,并不能出现禁止出现的字符。

flag好说,可以用cmd1的技巧,使用f*通配符代替

难点在于”/”,不能使用。我是在看了writeup之后才知道的很多的解决方案。这里来一个很直观的思路吧。那就是我们可以用”/”的ascii码来代替这个字符,于是/bin/cat flag就可以写成”\057bin\057cat flag”,但是仿佛不能直接

./cmd2 "/057bin/057cat fl*"

至于原因我还没有找到…..

可使用

./cmd2 '$(printf \\057bin\\057cat) fl""ag'

拿到flag

遇到的问题

1.最大的问题就在于不会处理”/”!

收获

1.extern的知识点:

1.declarations can be done any number of times but definition only once.

2.extern–keyword:extern the visibility of variables/functions()

3.fucntions are visible through out the program by default; the use of extern is not needed in function declaration/definition, use of extern is redundant.

4.extern is used with a variable, only declare , not define

5.exception , extern variable declared with initialize—definition

2.linux下的21个特殊符号:

1.>:重定向输出符号;命令>文件名;不连续定向

2.>>:重定向输出符号

3.2>:错误重定向输出符号;特性:覆盖

4.2>>:错误重定向;追加

5.|:管道符号;用法:命令1|命令2;上一个命令的输出作为下一个命令的输入

6.*:匹配0个或多个任意any characters

7.?:匹配1个任意any characters

8.&:后台进程符

9.&&:逻辑与;命令1&&命令2;如果1成功则执行2;否则不执行2;

10.||:逻辑或;命令1||命令2

11.!:逻辑非

12.[x-y]:指定范围

13.#:注释

14.”“:把它包含的内容作为普通字符,但是‘’ $“除外

15.”:把它包含的内容作为普通字符,无例外

16.“(到引):执行它所包含的内容;命令;结合引号

17.\:转义字符;去掉特殊含义

18.$:变量调用符号

19.;:命令分隔符;顺序执行

20.():整体执行

21.{}:变量分隔符

22.<:重定向输入符号

3.输入重定向:用于改变一个命令的输入源;指把命令(或可执行程序)的标准输入重定向到指定文件中;输入可以不来自标准输入,而来自某个文件

4.read命令:从标准输入中读取一行

read [-p][-r][-s][-u[n]][variable name ? prompt][variable name]

如果标准输入字段数大于variablename数,则剩余存在最后一个shell变量;

如果标准输入字段数小于variablename数,则剩余的variablename为null

read命令设置的shell变量影响当前shell执行环境

5.command命令:调用指定的指令并执行;执行时不查询shell函数;只能执行shell内部命令;command命令导致shell将指定的命令和变量视为简单明了,禁止了shell功能查询。

command -p:使用PATH环境变量的缺省值执行命令搜索;查找所有命令

PATH缺省值:export PATH=/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/bin:/root/bin

6.rm命令:

rm -f -force 从不提示;忽略不存在的文件

rm -i -interactive交互式删除

rm -r -recursive参数中列出的全部目录和子目录递归删除

rm -v -verbose 详细显示步骤

仍存在的疑惑

1.set -s

2.使用ascii码来代替字符的时候为什么只能使用\0(八进制)而不能使用\x(十六进制)?

3.不能直接

./cmd2 '\\057bin\\057cat fl""ag'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值