0X01

0X01

Burp抓包找到hint 访问地址看源码

  1. <?php
  2.  
  3. $info = "";
  4. $req = [];
  5. $flag="xxxxxxxxxx";
  6.  
  7. ini_set("display_error", false);
  8. error_reporting();
  9.  
  10. if(!isset($_POST['number'])){
  11. header("hint:6c525af4059b4fe7d8c33a.txt");
  12.  
  13. die("have a fun!!");
  14. }
  15.  
  16. foreach([$_POST] as $global_var) {
  17. foreach($global_var as $key => $value) {
  18. $value = trim($value);
  19. is_string($value) && $req[$key] = addslashes($value);
  20. }
  21. }
  22.  
  23. function is_palindrome_number($number) {
  24. $number = strval($number);
  25. $i = ;
  26. $j = strlen($number) - ;
  27. while($i < $j) {
  28. if($number[$i] !== $number[$j]) {
  29. return false;
  30. }
  31. $i++;
  32. $j--;
  33. }
  34. return true;
  35. }
  36.  
  37. if(is_numeric($_REQUEST['number'])){
  38.  
  39. $info="sorry, you cann't input a number!";
  40.  
  41. }elseif($req['number']!=strval(intval($req['number']))){
  42.  
  43. $info = "number must be equal to it's integer!! ";
  44.  
  45. }else{
  46.  
  47. $value1 = intval($req["number"]);
  48. $value2 = intval(strrev($req["number"]));
  49.  
  50. if($value1!=$value2){
  51. $info="no, this is not a palindrome number!";
  52. }else{
  53.  
  54. if(is_palindrome_number($req["number"])){
  55. $info = "nice! {$value1} is a palindrome number!";
  56. }else{
  57. $info=$flag;
  58. }
  59. }
  60.  
  61. }
  62.  
  63. echo $info;

0X02详细的函数解释

  1. ini_set

PHP ini_set用来设置php.ini的值,在函数执行的时候生效,对于虚拟空间来说,很方便,下面为大家介绍下此方法的使用

PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于虚拟空间来说,很方便。

函数格式:string ini_set(string $varname, string $newvalue)

不是所有的参数都可以配置,可以查看手册中的列表。

常见的设置:

@ ini_set('memory_limit', '64M');

'menory_limit':设定一个脚本所能够申请到的最大内存字节数,这有利于写的不好的脚本消耗服务器上的可用内存。@符号代表不输出错误。

@ini_set('display_errors', 1);

‘display_errors':设置错误信息的类别。

@ini_set('session.auto_start', 0);

‘session.auto_start':是否自动开session处理,设置为1时,程序中不用session_start()来手动开启session也可使用session,

如果参数为0,又没手动开启session,则会报错。

@ini_set('session.cache_expire', 180);

‘session.cache_expire':指定会话页面在客户端cache中的有限期(分钟)缺省下为180分钟。如果设置了session.cache_limiter=nocache时,此处设置无 效。

@ini_set('session.use_cookies', 1);

‘session.use_cookies':是否使用cookie在客户端保存会话ID;

@ini_set('session.use_trans_sid', 0);

‘session.use_trans_sid':是否使用明码在URL中显示SID(会话ID),

默认是禁止的,因为它会给你用户带来安全危险: 
1.用户可能将包含有效的sid的URL通过email/irc/QQ/MSN等途径告诉其他人。 
2.包含有效sid的URL可能会保存在公用电脑上。 
3.用户可能保存带有固定不变的SID的URL在他们的收藏夹或者浏览历史记录里。 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,所以应当禁用。

上面讲了一大堆 这里主要就是这个意思

这两句是什么意思,谁能详细解释一下,ini_set()函数里面的俩个参数分别代表什么意思
ini_set('display_error',!IS_ENV_PRODUCTION);
ini_set('error_log','log/phperror.txt');
请高手指点

第一个参数配置文件中的变量名,第二个参数是要赋的值。
比如配置文件中有这么一行:path=‘’
那么ini_set('path', 'c:\windows')的作用就是把这行改成
path='c:\windows'

  1. error_reporting()
  1. <?php
  2. // 关闭错误报告
  3. error_reporting(0);
  4.  
  5. // 报告 runtime 错误
  6. error_reporting(E_ERROR | E_WARNING | E_PARSE);
  7.  
  8. // 报告所有错误
  9. error_reporting(E_ALL);
  10.  
  11. // 等同 error_reporting(E_ALL);
  12. ini_set("error_reporting", E_ALL);
  13.  
  14. // 报告 E_NOTICE 之外的所有错误
  15. error_reporting(E_ALL & ~E_NOTICE);
  16. ?>
  1. !isset
  2. isset是判断一个变量是否定义过
  3. 即使它没有值,返回值也是true
  4. 比如$name="";或var $name;
  5. 那么if(isset($name))echo ;
  6. 它也会输出1,因为$name被定义了
  7. if($name!="")echo ;或if(!empty($name))echo ;
  8. 它就不会输出1,因为$name虽然被定义了,但它是空的
  1. header
  2. header(string,replace,http_response_code)
  3. 参数 描述
  4. string 必需。规定要发送的报头字符串。
  5. replace
  6. 可选。指示该报头是否替换之前的报头,或添加第二个报头。
  7. 默认是 true(替换)。false(允许相同类型的多个报头)。
  8. http_response_code 可选。把 HTTP 响应代码强制为指定的值。(PHP 以及更高版本可用)
  1. die
  2. die() 函数输出一条消息,并退出当前脚本。
  3. 该函数是 exit() 函数的别名。
  4. die(status)
  5. 参数 描述
  6. status 必需。规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出。
  1. foreach
  1. foreach (array_expression as $value) 输出 val1 val2 val3
  1.  
  1. foreach (array_expression as $key => $value) 输出1=>val1;2=>val2;3=>val3;
  1.  

  1. trim 实例
  2. <?php
  3. $str = "Hello World!";
  4. echo $str . "<br>";
  5. echo trim($str,"Hed!");
  6. ?>
  7. llo Worl
  1. addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
  2.  
  3. 预定义字符是:
  4.  
  5. 单引号(')
  6. 双引号(")
  7. 反斜杠(\)
  8. NULL

记一次CTF实验吧的代码审计的更多相关文章

  1. 记一次CTF比赛过程与解题思路-MISC部分

    前言 最近好久没更新博客和公众号了,有朋友问是不是在憋大招,但我不好意思说其实是因为最近一段时间太懒了,一直在当咸鱼- 意识到很久没更新这个问题,我是想写点什么的,但好像一直当咸鱼也没啥可分享的,最近 ...

  2. CTF实验吧让我进去writeup

    初探题目 两个表单,我们用burp抓包试试 这时候我们发现Cookie值里有个很奇怪的值是source,这个单词有起源的意思,我们就可以猜测这个是判断权限的依据,让我们来修改其值为1,发送得到如下显示 ...

  3. 记一次CTF出题WP

    笔者有幸参与一次CTF入门级的出题,在此记录一下WP 1.测试你得手速 1.用IDA打开程序 找到单击次数, 获取全局变量地址. 打开程序 打开OllyDbg attcach后在左下角按CTRL+N ...

  4. CTF实验吧——证明自己吧

    题目地址:http://www.shiyanbar.com/ctf/28 没有壳 ,vc++ 写的 拖进OD观察观察,发现代码很短哟,先来看这俩个call 怀疑他们其中有正确的flag和我们输入的东西 ...

  5. ctf实验平台-成绩单

    题目链接:http://120.24.86.145:8002/chengjidan/ 平台地址:http://123.206.31.85/ 第一步:暴库 id=-1' union select 1,2 ...

  6. 记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)

    题目是这个样子的: code.txt的内容是这样: 有点吓人木?233333 其实解密之后是这样的: 找到一点安慰没? 好了,废话不多说.讲解一下思路吧. 我们知道base64加密是属于可逆加密的.简 ...

  7. 某CTF平台一道PHP代码审计

    这道题不是说太难,但是思路一定要灵活,灵活的利用源码中给的东西.先看一下源码. 首先要理解大意. 这段源码的大致的意思就是,先将flag的值读取放在$flag里面. 后面再接受你输入的值进行判断(黑名 ...

  8. CTF实验吧-WEB题目解题笔记(1)简单的登陆题

    1.简单的登陆题 解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php  Burp抓包解密 乱码,更换思路.尝试id intruder 似乎也没什 ...

  9. 记一次CTF的签到题

    开篇 打开题目网站 首先看到的是一个人博客,功能点非常少,功能较多的页面就是留言板了 一开始没啥思路,就想着抓包能不能找到SQL注入无果,在这个地方卡了很久 柳暗花明 在乱点的时候,无意中发现题目中的 ...

随机推荐

  1. C++中的自定义内存管理

    1,问题: 1,new 关键字创建出来的对象位于什么地方? 1,位于堆空间: 2,有没有可能位于其它地方? 1,有: 2,通过一些方式可以使动态创建的对象位于静态存储区: 3,这个存储区在程序结束后释 ...

  2. Laravel5.8自定义函数存放位置

    1. 创建文件 app/helpers.php <?php // 示例函数 function foo() { return "foo"; } 2. 修改项目 composer ...

  3. linux源码下载

    概要:本文主要介绍ubuntu环境下,内核源码和命令源码的获取方式. 内核源码: 1.最简洁的方式,使用命令:apt-get source linux-$(uname -r).但配置的源服务器中不一定 ...

  4. (转)终于有人把Elasticsearch原理讲透了!

    终于有人把Elasticsearch原理讲透了! 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 来源:互联网侦察 | 2019-04-08 ...

  5. redis 模拟jedis 操作string类型数据

    一.思路分析 redis数据传输遵循resp协议,只需要按照resp协议并通过socket传递数据到redis服务器即可 resp数据格式: 二.具体实现 package com.ahd.jedis; ...

  6. mybatis返回map结果集

    今天突发奇想,想用mybatis返回一个map结果集,结果我就整了一下午,不过终于解决了 1.如果你确定返回的数据只有一条,你可以这样整 xml中: <select id="searc ...

  7. Linux日常之数据重定向

    Linux在启动后,会默认打开3个文件操作符,分别是 (1)标准输入0,standard input (2)正确输出1,standard output (3)错误输出2,standard error ...

  8. jenkins 构建时显示git分支插件、显示构建分支插件

    参数化构建分支 1.安装插件:Git Parameter 2.找到我们在Jenkins中建立的工程,勾选“参数化构建过程”,并如下配置 3.在“源码管理”中如下配置 Jenkins构建完显示构建用户和 ...

  9. Problem 1538 - B - Stones II 贪心+DP

    还是给你石头n枚,每一枚石头有两个值a和b,每取一个石头,除了这块石头其余所有的石头的a就都减去这个石头的b,问你取了的石头的a的总和最大可以为多少? 先按B从大到小排序 然后DP: 取的话:dp[i ...

  10. 深入理解JVM线程模型

    1. jvm内存模型在描述jvm线程模型之前,我们先深入的理解下,jvm内存模型.在jvm1.8之前,jvm的逻辑结构和物理结构是对应的.即Jvm在初始化的时候,会为堆(heap),栈(stack), ...