记一次CTF实验吧的代码审计
0X01
0X01
Burp抓包找到hint 访问地址看源码
<?php $info = "";
$req = [];
$flag="xxxxxxxxxx"; ini_set("display_error", false);
error_reporting(); if(!isset($_POST['number'])){
header("hint:6c525af4059b4fe7d8c33a.txt"); die("have a fun!!");
} foreach([$_POST] as $global_var) {
foreach($global_var as $key => $value) {
$value = trim($value);
is_string($value) && $req[$key] = addslashes($value);
}
} function is_palindrome_number($number) {
$number = strval($number);
$i = ;
$j = strlen($number) - ;
while($i < $j) {
if($number[$i] !== $number[$j]) {
return false;
}
$i++;
$j--;
}
return true;
} if(is_numeric($_REQUEST['number'])){ $info="sorry, you cann't input a number!"; }elseif($req['number']!=strval(intval($req['number']))){ $info = "number must be equal to it's integer!! "; }else{ $value1 = intval($req["number"]);
$value2 = intval(strrev($req["number"])); if($value1!=$value2){
$info="no, this is not a palindrome number!";
}else{ if(is_palindrome_number($req["number"])){
$info = "nice! {$value1} is a palindrome number!";
}else{
$info=$flag;
}
} } echo $info;
0X02详细的函数解释
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'
error_reporting()
<?php
// 关闭错误报告
error_reporting(0); // 报告 runtime 错误
error_reporting(E_ERROR | E_WARNING | E_PARSE); // 报告所有错误
error_reporting(E_ALL); // 等同 error_reporting(E_ALL);
ini_set("error_reporting", E_ALL); // 报告 E_NOTICE 之外的所有错误
error_reporting(E_ALL & ~E_NOTICE);
?>
!isset
isset是判断一个变量是否定义过
即使它没有值,返回值也是true
比如$name="";或var $name;
那么if(isset($name))echo ;
它也会输出1,因为$name被定义了
但if($name!="")echo ;或if(!empty($name))echo ;
它就不会输出1,因为$name虽然被定义了,但它是空的
header
header(string,replace,http_response_code)
参数 描述
string 必需。规定要发送的报头字符串。
replace
可选。指示该报头是否替换之前的报头,或添加第二个报头。
默认是 true(替换)。false(允许相同类型的多个报头)。
http_response_code 可选。把 HTTP 响应代码强制为指定的值。(PHP 以及更高版本可用)
die
die() 函数输出一条消息,并退出当前脚本。
该函数是 exit() 函数的别名。
die(status)
参数 描述
status 必需。规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出。
foreach
foreach (array_expression as $value) 输出 val1 val2 val3
foreach (array_expression as $key => $value) 输出1=>val1;2=>val2;3=>val3;


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

记一次CTF实验吧的代码审计的更多相关文章
- 记一次CTF比赛过程与解题思路-MISC部分
前言 最近好久没更新博客和公众号了,有朋友问是不是在憋大招,但我不好意思说其实是因为最近一段时间太懒了,一直在当咸鱼- 意识到很久没更新这个问题,我是想写点什么的,但好像一直当咸鱼也没啥可分享的,最近 ...
- CTF实验吧让我进去writeup
初探题目 两个表单,我们用burp抓包试试 这时候我们发现Cookie值里有个很奇怪的值是source,这个单词有起源的意思,我们就可以猜测这个是判断权限的依据,让我们来修改其值为1,发送得到如下显示 ...
- 记一次CTF出题WP
笔者有幸参与一次CTF入门级的出题,在此记录一下WP 1.测试你得手速 1.用IDA打开程序 找到单击次数, 获取全局变量地址. 打开程序 打开OllyDbg attcach后在左下角按CTRL+N ...
- CTF实验吧——证明自己吧
题目地址:http://www.shiyanbar.com/ctf/28 没有壳 ,vc++ 写的 拖进OD观察观察,发现代码很短哟,先来看这俩个call 怀疑他们其中有正确的flag和我们输入的东西 ...
- ctf实验平台-成绩单
题目链接:http://120.24.86.145:8002/chengjidan/ 平台地址:http://123.206.31.85/ 第一步:暴库 id=-1' union select 1,2 ...
- 记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)
题目是这个样子的: code.txt的内容是这样: 有点吓人木?233333 其实解密之后是这样的: 找到一点安慰没? 好了,废话不多说.讲解一下思路吧. 我们知道base64加密是属于可逆加密的.简 ...
- 某CTF平台一道PHP代码审计
这道题不是说太难,但是思路一定要灵活,灵活的利用源码中给的东西.先看一下源码. 首先要理解大意. 这段源码的大致的意思就是,先将flag的值读取放在$flag里面. 后面再接受你输入的值进行判断(黑名 ...
- CTF实验吧-WEB题目解题笔记(1)简单的登陆题
1.简单的登陆题 解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php Burp抓包解密 乱码,更换思路.尝试id intruder 似乎也没什 ...
- 记一次CTF的签到题
开篇 打开题目网站 首先看到的是一个人博客,功能点非常少,功能较多的页面就是留言板了 一开始没啥思路,就想着抓包能不能找到SQL注入无果,在这个地方卡了很久 柳暗花明 在乱点的时候,无意中发现题目中的 ...
随机推荐
- 初识MySQL <一>
创建一个 表 create table student( id int(10) not null unique auto_increment primary key, name varchar(30) ...
- 微信小程序与内嵌webview之间来回跳转的几点总结,以及二维码的使用
截止到发稿小程序支持的功能,后续如果小程序更新在完善文稿. 1. 小程序可以内嵌组件跳转到h5页面,前提是在小程序后台配置相应的业务域名.新打开的h5页面会替代小程序组件内的其它组件,即为h5不能与小 ...
- Servlet监听器——实现在线登录人数统计小例子
一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...
- php学习第一天(记录注意事项)
- Core Graphics 定制UIVIew 处理图片
许多UIView的子类,如UIButton或UILabel,它们的形状都是系统固定的.但是,对于一些特殊的情况,我们需要绘制产品狗想要的图形.那么等待我们的只有两个选择:第一,可以使用UIImageV ...
- ldd - 显示共享库的依赖情况
总览 (SYNOPSIS) ldd [-vVdr] program ... 描述 (DESCRIPTION) ldd 显示 每个 程序 需要 的 共享库 (shared library), 程序名 在 ...
- python中的正则表达式的使用
一.正则表达式简介 正则表达式的官方文档:https://www.runoob.com/regexp/regexp-tutorial.html 正则表达式:又称正规表示式.正规表示法.正规表达式.规则 ...
- IBM产品系列和AIX系统版本
AIX系统版本 AIX 7.2 No supported AIX levels. AIX 7.1 Technology Level Base Level Recommended L ...
- Laravel5学习
[1]缓存问题 laravel中使用的配置文件,都会放在config目录下面,当变更某个参数的时候,如果发现不生效,可以在命令行下面执行 php artisan config:clear 命令才清除 ...
- (转)JAVA socket 进行十六进制报文交互测试
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io. ...