冰蝎的客户端连接PHP的webshell以后,默认会执行phpinfo函数,然后把信息显示出来。
一般来说phpinfo的内容是安全可信的,但是没有什么是绝对安全的。
runkit扩展库是pecl的php扩展的一部分。runkit提供了一套函数,能让你动态的修改任意类和函数的定义。根据php提供的反射机制,得到所有用户定义的类和函数,你可以把他们重命名然后再用原来的函数名/方法名重新添加一个方法/函数,重新添加的函数的函数体,你可以任意定义。
我们可以通过runkit来hook phpinfo这个函数,然后返回一段JS代码来实现对冰蝎客户端的xss攻击。
首先我们来安装一下这个扩展
mac或者Linux通过pecl来安装
php7使用
pecl install channel://pecl.php.net/runkit7-3.1.0a1
php5使用
pecl install runkit
Windows 通过下方网址自行寻找DLL文件安装
https://pecl.php.net/package-search.php?pkg_name=runkit&pkg_maintainer=&pkg_category=&released_on_year=&released_on_month=&released_on_day=&released_before_year=&released_before_month=&released_before_day=&released_since_year=&released_since_month=&released_since_day=
php.ini中启用激活runkit
测试一下hook效果
我们使用runkit_function_redefine函数来重写phpinfo函数,echo 中放入base64编码后的XSS代码,一些特殊字符会导致runkit出问题,
所以base64编码一下再输出
冰蝎获取信息成功
XSS平台获取到数据
但是,我们不可能手动在冰蝎webshell上加上我们的hook代码,这样就没什么意义了。
runkit_function_redefine('phpinfo','','echo base64_decode("xxxxxx=");');
我们可以通过把代码写到一个php文件中找到auto_prepend_file = 然后把文件路径填进去,php解释器会在解析php文件之前,先执行我们的代码。这样攻击者就算通过0day漏洞,上传了冰蝎的webshell,但是只要他一连接,我们就能马上获取到攻击者的ip和连接时间等等信息,方便溯源。
最后,runkit是一个不太稳定的扩展,不太适合在生产环境中使用。本文只探讨思路上的可行性。如果想要实际使用,建议自己编写php扩展,hook内置phpinfo函数,这样会更稳定,而且会减少不必要的性能损失。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论