听课笔记ctfshow的理解29
上图中我们会看到有一个preg_match 的函数进行正则表达式的匹配,成功返回1,否则返回0
要有分号不然出不来
phpinfo();使用时后要加分号 分号可以用?>代替
主要作用用法可以看这https://blog.csdn.net/lituxiu/article/details/89330431
查看之后出现这样的
发现flag被过滤
再输入1.txt 发现没有回显,出问题了是因为这个过滤了flag,所以不能直接写flag
将flag改为 fla?然后再执行就可以了
这个是将flag文件复制到1.txt的文件当中
cp:简单来说就是把文件复制一下
ctfshow web30
换一种方法将文件中的flag.php,复制下来放在1.txt里,问号代表的是占位符,意思是复制以fla开头的.php的文件
然后执行1.txt就可以得到flag
ctfshow 31
从图中我们可以看见被过滤了许多东西
换一种思路去
执行get第一个参数,1相当于这个参数逃逸出去了,不属于c可以任意使用
PHP eval()构造用于将输入字符串评估为PHP,然后以这种方式对其进行处理。 Eval()不是函数,但是就其功能而言,它就像输出一个东西一样工作-除了将其输出为文本而不是将其输出为要执行PHP代码之外,它的功能与之类似。 eval()构造的一种用法是将代码存储在数据库中,以便以后执行。
其他那些过滤字符对它不起作用,直接使用system将文件的出来了就好了
执行之后发现页面空白直接查看源代码就可以了
对参数进行一个跳板传出一个值不属于里面从而绕过限制
ctfshow32
被过滤的更多了,将使用其他的方法(跳板的方法也可以在这里使用)
使用文件包含的方法去做,先包含一个系统文件看能不能包含成功
etc/password 包含系统文件 也属于文件包含里面的/etc/passwd每一个分段的含义: 详情查看原文链接:https://blog.csdn.net/afxcontrolbars/article/details/41725561
include #include叫做“文件包含” / include 语句包含并运行指定文件。
功能:它的功能是用来指定文件的全部内容替换程序中的命令行,从而使指定的文件与当前源文件连成一个源文件
详细解说:https://blog.csdn.net/u011352311/article/details/17758931?utm_source=blogxgwz1
若直接使用flag.php我们是看不到的,包含没有输出,是因为我们没有用分号进行分隔造成文件无法输出我们可以使用文件包含中php
输入flag.php执行就好得到再解码,
ctfshow 33
多过滤了一个双引号
使用相同方法同上也可以做但是要是使用require方法也可以,然后就可以了
ctfshow 34
多了一个冒号不能用上面的方法对上述进行一些有效的过滤了
如果将分号和括号过滤了就只能使用语言结构了
语言结构有echo print isset unset include require 可以不需要使用括号
在这里面 echo 和 isset 使用不了
print也使用不了,跟二进制有关系,里面存在一个数据空间和代码空间,二进制有数据段和代码段,而在这里php属于一个数据段,不是代码段,是作为一个字符串要变成eval必须要有括号才能执行
(前面这句话不太理解什么意思)
只能用include 包含系统文件可以正常读取感觉和前面的方法差不多
ctfshow 36
只是不能用数字换成字母就好了
云演 exec
打开环境发现
使用127.0.0.1|ls查看发现没有flag的目录出现index.php说明flag可能是在,根目录查看到flag可直接cat得到flag
[ACTF2020 新生赛]Exec 1
打开发现有这样一个窗口输入127.0.0.1&ls 显示index.php
127.0.0.1&cat index.php发现什么也没有说明flag没有在里面使用ls查看根目录试一下
果然flag在根目录里然后使用cat /flag就可以得到flag了
云演ping
这个命令分隔符被过滤了解决了就好
| || & && . ; - <> $ %0a %0d `
函数理解
还没全都看见,目前还没学到
popen()
popen() 函数使用 command 参数打开进程文件指针。
如果出错,该函数返回 FALSE。
exec()
system()
popen()
passthru()
proc_open()
pcntl_exec()
shell_exec()