web安全-绕过disable_function的各种方式
常规函数——生僻函数绕过
不过多解释,常见的执行命令的函数有 system()、exec()、shell_exec()、passthru(),
偏僻的 popen()、
proc_open()、
pcntl_exec()。 (php >4.2 php =5)
逐一尝试即可。
LD_PRELOAD 预加载绕过
每个程序执行的时候会去动态链接库so
文件里面找函数的位置,而我们的目的是让程序去执行我们自定义的动态链接库
LD_PRELOAD
这个全局变量指定的so
文件会在每个程序本身的so文件之前加载
有sendmail
1 | export #查看当前有的全局变量 |
查看程序执行了哪些函数。
1 | readelf -Ws /usr/bin/id |
比如 id中执行了 getuid()
1 | 20: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (2) |
所以可以编写出 test.c。
1 |
|
利用
1 | gcc -c -fPIC test.c -o test |
1 | export LD_PRELOAD=./test2.so |
在php中如果把so
文件传上去了后,可以利用putenv
函数来设置全局变量
能够触发外部命令的函数有mail()
,error_log()
,这2个函数都是会调用sendmail
命令,这个sendmail
软件是linux下用来发送邮件的(如果没有可用使用apt-get install sendmail
安装)
1 |
|
无sendmail的利用
imap_open()
CVE漏洞CVE-2018-19518
的imap_open()
函数。
这个函数它是用来发送邮件的,它使用的是rsh连接远程的shell,但是在ubuntu
和debain
下,它是使用的ssh。
而ssh的-oProxyCommand
参数能够带命令的,比如
1 | ssh -oProxyCommand="touch test.txt" 10.10.10.10 |
php中的写法
1 |
|
mod_cgi
利用 mod_cgi 模块执行CGI脚本反弹shell。
1 |
|
1 | # 攻击机上监听端口 |
获得shell后可以正常执行命令
蚁剑
意见的拓展模块集成了 LD_PRELOAD \ fastcgi 等各种攻击脚本,可以直接利用,verygood!