---已搬运--:[0CTF 2016]piapiapia -----代码审计+字符串逃逸+数组绕过长度限制+以及一下小知识点 preg_match()用数组,而且注意if是正确判断,还是错误判断

首次写于:2021.2.22
补充于:2021.5.2

00000、知识点:

1.url传入数组绕过长度限制??

在这里插入图片描述就是判断你输入字符串不能够太长的时候,
用数组可以进行绕过;
在这里插入图片描述

2.数组的遍历

两种遍历方法

foreach(array_expression as $value)

foreach(array_expression as $key => $value)

第一种格式便利,给定的 array_expression 数组。每次循环,当前单元的值被赋值给$value,并且数组内部的指针向前移动一步(因为下一次循环将会得到下一个单元)

第二种格式也是做相同的事情,只是除了当前单元的值赋给$value之外,键名也会在每次循环中被赋给变量$key。

<?php
$arr = array(1,2,3,4);
foreach ($arr as &$value){
   //地址传参
    $value = $value*2;
}
// array $arr now is (2,4,6,8)
unset($value);//销毁$value变量
<?php
$a = array(
    "one"=>1,
    "two"=>2,
    "three"=>3,
    "five"=>5
);
foreach ($a as $k => $v){
   
    echo "\$a[$k]=>$v  ";
}
输出:$a[one]=>1  $a[two]=>2  $a[three]=>3  $a[five]=>5
3.数组绕过正则
  1. md5(Array()) = null
  2. sha1(Array()) = null
  3. ereg(pattern,Array()) =null
  4. preg_match(pattern,Array()) = false
  5. strcmp(Array(), “abc”) =null
  6. strpos(Array(),“abc”) = null
  7. strlen(Array()) = null
    在这里插入图片描述

一、自己做:

源码都弄下来了,但是分析,代码审计技能点还没有点,,,
懵逼中,
我看到了读取文件什么的,也看到了serialize和unserialize和session。
猜测可能是序列化和反序列化,应该不是session的序列化, 因为session不可控。
然后又关于数据库的操作。但是在尝试的时候,不报错,sql注入不是了,

二、学到的&&不足:

  1. 看到config.php里面的内容了,
    在这里插入图片描述
    我就没有反应过来flag再config.php中,,,,因为后面WP取flag就是取自config.php中的,我就愣是没反应过来,

  2. 数组会绕过preg_match()。使得他匹配为 false。 这里可以绕过。然后strlen一个数组,会返货 null.。也可以的。

  3. 反序列化的话,我发现我还可以。

  4. 还有思路问题:我们上传的时候,photo是:upload/3e602dd0ab83a3a8c3f32309bb9a88f9这种样式,我当时还在思考,为什么,我们插入的数据是:s:10:"config.php"。格式差别会这么大呢??这涉及到fie_get_contents()。一个是我们方才上传的文件,另一个是已经存在的文件config.php

  5. 而且,看config.php那个内容,要想到 flag就在那里,结合file_get_contents()。就要想到是读取文件,

  6. 为什么 只有 nickname可以注入呢????
    在这里插入图片描述
    前面两个都是 否定判断, 只有这个是肯定判断,所以也就只能够绕过nickname了。

这了提醒我以后审计代码要 细心!!!!!!!。这个也太细了把,,,我当时做这个题的时候都没有注意到。。

  1. 要提高的能力:1. 本地复现能力!!!2. 代码调试,在浏览器端,**var_dump()**看输出3. 数据库 看 存储的信息。

四、学习WP

1.学习一个大佬的思路:

  1. 熟悉网站结构:
    class.php里有一些重要的函数
    update.php和profile.php中一个是上传文件,一个是获取文件,
    最重要的是config.php。我们看到flag在里面。

  2. 根据前端流程 查看可疑函数
    注册和登陆那块就不看了,主要的突破点是 上传资料显示资料 这里。

首先是update.php

<?php
	require_once('class.php');
	if($_SESSION['username'] == null) {
   
		die('Login First');	
	}
	if($_POST['phone'] && $_POST['email'] && 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值