DHCP
DHCP
Published on 2024-04-30 / 355 Visits
0
0

2024数字中国数据安全初赛竞赛wp

2024数字中国数据安全竞赛wp

数据分析:

题名:Wireshark 2.1

题目:存在漏洞的PHP页面名称是?(比如:a.php)

Wireshark可以全程使用CTF-netA来做,如下:可以看到在theanswerishere.php执行了sql注入,所以存在漏洞的PHP页面名称是theanswerishere.php

题名:Wireshark 2.2

题目:当前表的列数共有几列?(比如:1)

从以上漏洞测试我们发现在一共有三列

题名:Wireshark 2.3

题目:注入目标的列名是?

从这里我们可以看到注入的列名是th1sfI4g

题名:Wireshark 2.4

题目:攻击者试图最终试图获取的数据是?

从这里回显包我们能看到回显了flag,所以攻击者试图最终试图获取的数据是flag{th1s_ls_tHe_sQI1_anSwer}

数据安全:

题名:签到

0x66,0x6c,0x61,0x67,0x7b,0x63,0x64,0x65,0x32,0x36,0x64,0x36,0x35,0x2d,0x61,0x39,0x33,0x31,0x2d,0x34,0x34,0x33,0x31,0x2d,0x39,0x38,0x34,0x63,0x2d,0x32,0x66,0x36,0x64,0x30,0x38,0x38,0x37,0x63,0x36,0x61,0x65,0x7d
通过去掉间隔的逗号后16进制转字符得到最后的flag:

题名:fake_php_authentication

填写读取/etc/passwd,密码随便写后抓包然后爆破四位密码得到最后的四位密码为“s!@#”
然后成功读取etc/password:
通过目录爆破得到admin.php和config.php读取一下admin.php得到adminS3cr3t.php
然后读取一下adminS3cr3t.php因为adminS3cr3t.php要代码审计,所以这里直接挂出来文件内容:

<?php
error_reporting(0);
include("./config.php");

$db_connection = pg_connect("host=$host dbname=$dbname user=$user password=$pass");

//if (!$db_connection) {
//    die("Connection failed");
//}

$secret = $_GET['secret'];
$column = $_GET['column'];

$blacklist  = ";|\'| |-|\/|#|\.|>|<|~|!|\*|%|0x|\^";


if(preg_match('/[a-z]{2,}/i',$column) && preg_match('/[a-z]{2,}/i',$secret)) {
    die("nonono!");
}

if (preg_match("/$blacklist/i", $secret) || preg_match("/$blacklist/i", $column)) {
    die("hack!");
}

$query = "select " . $column . " from funnyctf where name = " . $secret ;
$result = pg_query($db_connection, $query);

//if ($result === false) {
//   $error_message = pg_last_error($db_connection);
//   echo "Error executing query: $error_message";
//}

if($result) {
    while($row = pg_fetch_array($result)){
        if($row['name']=="flag"){
            echo $row['flag'];
        } else {
            echo "<h4>try again!</h4>";
        }
    }
} else{
    echo "<h4>Try to find flag!</h4><br>";
}
?>

首先,它定义了一个黑名单字符串,包含了一些非法字符和模式。然后,它检查输入的参数column和secret不能包含至少两个连续的小写字母。接下来,它检查column和secret是否包含黑名单中的任何字符或模式,如果包含,则终止程序并输出"hack!"。
所以最后拼接成"select " . $column . " from funnyctf where name = " . $secret ; 如果行的"name"字段等于"flag",则输出该行的"flag"字段的值;否则,输出"try again! "
说白了我们要构造成这样:Select name,flag from funnyctf where name = flag
意思是从funnyctf表中选择name和flag两个字段,筛选出name等于flag的记录
所以最后的payload为: /adminS3cr3t.php?secret=$$f$$||$$l$$||$$a$$||$$g$$&column=U%26"n\0061me",U%26"fl\0061g"
这里解释一下:
Unicode表(区间范围为U0000~UFFFF)。"\u0061"表示小写a所以name的a和flag的a全部由\0061代替用来绕过
最后得到flag


Comment