当前位置: 首页 > news >正文

web刷题记录(4)

[GKCTF 2020]cve版签到

进来应该是给了个提示了,就是要以.ctfhub.com结尾

还有一个超链接,这题的ssrf还是挺明显的,抓包看看

发现回显里面有提示

        说是和本地有关,那么也就是说,要访问127.0.0.1,大概意思就是127.0.0.1就是ssrf的跳板了,然后呢要加一开始给的那个后缀,然后呢,这里还有有关比较隐藏的点,就是php的版本,在上图中可以看到,php的版本是7.3.15,这里涉及到的一个知识点:

        在低于7.2.29的PHP版本7.2.x,低于7.3.16的7.3.x和低于7.4.4的7.4.x中,同时将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则URL将被静默地截断。这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。

        这里有比较详细的关于00截断的知识  ,php 00截断,文件上传之\00截断与文件包含之%00截断 文件包含漏洞详解 – jinglingshu的博客...-CSDN博客           cve也插个链接吧,什么是CVE?常见漏洞和暴露列表概述_cve漏洞列表-CSDN博客

        这个截断的话,平时遇到比较常见的就是文件上传的路径的更改那些,但是既然这里要求我们要强制在后面加.ctfhub.com,所以这里才用到这个知识点

        能理解的都理解的差不多了,开始,构造payload:

GET /?url=http://127.0.0.1%00www.ctfhub.com HTTP/1.1

        得到了下一步的提示:

再改个后缀

得到了flag

[SWPUCTF 2022 新生赛]奇妙的MD5

 这个框,有点熟悉,虽然知道要用什么,但是还是抓包看看

果然,具体可以去看我的关于md5知识点的博客

ffifdyop绕过

进入下一个界面

源码注释里面,给了提示

get传参,md5弱比较,这里使用数组,秒了,进入下一个页面

强比较,post传参

得到了flag

[强网杯 2019]随便注

抓包,跑sqlmap

接着往下爆破

发现sqlmap跑不出来,而且一开始爆出来的表是空的,说明这道题只能手注了

看看源码,说明这里应该是不能用sqlmap了

题目一开始给了个1,查询看看

单引号判断一下闭合方式

通过报错信息可知,是单引号闭合。

看看字段

报错,改成order by 2就是正确的,因此数据库只有两列,接下来继续找显示位:

发现select被过滤了,以及一些其他的过滤规则,但是;没有被过滤,这里先尝试堆叠注入

这里插一个关于堆叠注入的知识点:

        在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。、

        例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

        更详细的信息,可以看这里sql注入之堆叠注入-CSDN博客

         通过1';show tables;1 #命令,看看所有表

一个一个看看,这里因为第一个表是纯数字,所以要用`括起来

注意:这里使用的是反引号而不是双引号,这两个在Linux下不区分,但在Windows下区分。
单引号或者双引号主要用于字符串的引用符号。
数据库、表、索引、列和别名的引用符是反勾号。
有MySQL保留字作为字段的,必须加上反引号来区分,如果是数值,不能使用引号。

        运气很好,在第一个表里就找到了flag的相关信息,但是因为目标过滤了select语句所以直接查询是不太可能了,这时就得用到其他可以读取表数据的方法,在网上找了找发现mysql数据库中可以使用handler语句读取表中的数据,阅读官方文档后发现这玩意就相当于一个数据指针,先创建要一个准备读取的对象然后操作这个数据指针去读取表中的数据。

        在这里补充一点关于hander的知识点:

1.handler 要读取的表名 open as 别名;(打开一个句柄实例,也可以不取别名,用一个as是为了下面更加方便操作)
2.handler 别名 read next;(将句柄移动到表中的第一行数据并且读取,也可以用first或者last读取第一行和最后一行)
3.handler 别名 close;(将这个句柄实例关闭)

        尝试构造:

0';handler `1919810931114514` open;handler `1919810931114514` read first; 1 #

成功拿到了flag

看了其他的wp以后,发现应该还有两种方法

一.alter,可以通过修改表名来间接达到目的

因为words数据表里面的data也是varchar类型,因此从这里就可以得到做题思路,通过rename函数进行改表,把1919810931114514改为words,增加新字段id,将flag改为data,将刚开始那个words表改为其他任意表。
构造payload:

1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);

分步骤的话
alter table words rename as word1;   // 将原查询表改名
alter table `1919810931114514` rename as words; // 将flag所在表改为原查询表
alter table words change flag id varchar(100); // 修改列名

然后再查看原查询表就可以了

然后这里再对alter的知识点进行补充:

alter可以修改已知表的列
alter table "table_name" add "column_name" type;//添加一个列
alter table "table_name" drop "column_name" type;//删除一个列
alter table "table_name" alter column "column_name" type;//改变列的数据类型
alter table "table_name" change "column1" "column2" type;//改列名
alter table "table_name" rename "column1" to "column2";//改列名

二.编码逃逸

因为select被过滤了,所以考虑使用编码进行绕过
使用select查询就很简单了
构造payload
select *from where `1919810931114514`

这里使用*这个通配符来查询数据表里面的全部内容,从而达到爆出flag的目的,然后呢,对这个语句进行16进制编码

73656c656374202a2066726f6d20603139313938313039333131313435313460

构造出payload:

1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

解读

prepare…from…是预处理语句,会进行编码转换。
execute用来执行由SQLPrepare创建的SQL语句。
SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
0x就是把后面的编码格式转换成16进制编码格式
那么总体理解就是,使用SeT方法给变量a赋值,给a变量赋的值就是select查询1919810931114514表的所有内容语句编码后的值,execsql方法执行来自a变量的值,prepare…from方法将执行后的编码变换成字符串格式,execute方法调用并执行execsql方法。

也可以得到flag

[NISACTF 2022]midlevel 

打开以后,很熟悉啊,昨天好像做了一题类似的ssti

smarty,老样子,抓包,在xff处来构造payload试试

再判断7{*comment*}7

加个{if}开始注入

发现了和flag有关的信息

再次注入

 得到了flag

[GDOUCTF 2023]受不了一点

大型代码审计

第一个if,就是让你给参数ctf,gdou,POST赋值

第二个if,md5强比较,数组绕过

第三-四个if,cookie传值

第五个if,让get方式传入参数aaa和bbb的值
传就行了

第六个if,加个字母绕过一下

第七个,这里选择任意一个传入flag的方式
使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag
构造:123=flag&flag=123

因为改的东西太多了,所以,这里选择使用bp

然后就得到了flag

相关文章:

  • 集成学习笔记
  • Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程
  • 2020年09月C语言二级真题
  • Docker高级篇之Dockerfile解析
  • 【sklearn】【逻辑回归1】
  • 华为机考入门python3--(33)牛客33-图片整理
  • C++构造器设计模式
  • 后端大量数据返回,采用数据压缩+分片操作,加快前端响应速度,个人技术总结
  • Nginx介绍
  • opencv进阶 ——(十三)基于三角剖分实现换脸
  • Unity【入门】重要组件和API
  • AIGC的算力与云边协同及应用创新
  • 笔记 | 软件工程04:软件项目管理
  • 收银系统源码-千呼新零售2.0【合作案例】
  • 【Spring Cloud】Feign详细介绍及底层原理解析
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《Java编程思想》读书笔记-对象导论
  • AngularJS指令开发(1)——参数详解
  • AWS实战 - 利用IAM对S3做访问控制
  • HashMap剖析之内部结构
  • Java多态
  • jQuery(一)
  • PermissionScope Swift4 兼容问题
  • QQ浏览器x5内核的兼容性问题
  • Spring-boot 启动时碰到的错误
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue2.0项目引入element-ui
  • 爱情 北京女病人
  • 动态规划入门(以爬楼梯为例)
  • 机器学习学习笔记一
  • 聊一聊前端的监控
  • 使用API自动生成工具优化前端工作流
  • 世界上最简单的无等待算法(getAndIncrement)
  • 我这样减少了26.5M Java内存!
  • 回归生活:清理微信公众号
  • 如何用纯 CSS 创作一个货车 loader
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #知识分享#笔记#学习方法
  • $.ajax,axios,fetch三种ajax请求的区别
  • $NOIp2018$劝退记
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (9)目标检测_SSD的原理
  • (搬运以学习)flask 上下文的实现
  • (二)hibernate配置管理
  • (十)T检验-第一部分
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)c++ std::pair 与 std::make
  • .Net Core 中间件验签
  • .Net FrameWork总结
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET中使用Redis (二)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @angular/cli项目构建--http(2)
  • @EnableWebMvc介绍和使用详细demo
  • [ C++ ] 继承