NSSCTF做题(4)

[NISACTF 2022]checkin

简单的一道代码审计了 但是发现传参传不上去

后来发现  在选中nisactf的时候,注释里面的内容也被标记了

不知道是为什么,把它复制到010里边去看看

发现了不对的地方

nisactf应该传参

根据这个进行url编码

我们选择实际的参名和字符串,并转为url编码格式(每两位前加%) 

最后构造的payload

/?ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6%55%67%65%69%77%6F%E2%81%A9%E2%81%A6%63%75%69%73%68%69%79%75%61%6E=%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%4E%31%53%41%43%54%46

得到flag

[LitCTF 2023]作业管理系统  

查看源代码得到了默认账户

用admin登录

登录之后看到了文件上传,还没有限制,直接传码,

到这里有两种方式,一个是连蚁剑,第二个是命令执行,我用的第二种

 

开始命令执行·

zxc=system('ls /');

zxc=system('cat /flag');  得到flag

用双引号可以对字符串进行变量替换,比如system(“ls $a“),那$a变量的值会被替换到命令中,用单引号就是完全按照字面意义解析字符串,$a不会进行变量替换而是当作字符串进行解析,命令参数是固定的字符串一般来说用单双引号都行,用单引号更安全,​末尾加分号是php的语法规则

PHP中单引号和双引号的区别与作用-php教程-PHP中文网

这里是之前考虑过的问题,有师姐的解释以及我自己找的资料,关于单双引号的区别和作用

[UUCTF 2022 新生赛]websign 

 

提示说源代码里面有什么,但是点不开源代码,直接抓包得到了flag

 [HDCTF 2023]Welcome To HDCTF 2023

在阵亡的时候弹出来了flag

是js前端的代码,但是我也没仔细找

[HUBUCTF 2022 新生赛]checkin 

代码审计+反序列化

 就是构造username和password两个的反序列化 然后用info传参就ok

我们先构造出我们需要的数组的序列化字符串 

这里构造的时候要用到array这个关联数组的语法

传参:?info=

a:2:{s:8:"username";s:14:"this_is_secret";s:8:"password";s:24:"this_is_not_known_to_you";}

发现没绕过去,看flag.php那行的注释,说会改变上传的两个值

if语句中使用双等号判断,可以想到使用弱比较

字符串在和数字比较的时候会将字符串转化为数字,当字符串开头没有数字时,则转化失败为false

在构造一下

传参 得到flag

[CISCN 2019华东南]Web11 

随便尝试一下,发现api usage会随着url变,再结合标签 确定是ssti注入

在看看他是什么模板的注入,这步可以注入来看结果,题里边直接给了是smarty模板

具体的可以去看我的博客 php中的ssti

找到注入点

开始注入我用的是{if}{/if}注入,X-Forwarded-For:{if system('ls /')}{/if}

 {if system('cat /flag')}{/if}  得到flag

 [强网杯 2019]随便注

sql 注入,先注入看看

万能密码 回显正常

 

 回显正常

 

回显出错

 

 注入到这里可以知道参数使用单引号闭合

开始注入

这里先给大家介绍一下堆叠注入

堆叠注入产生原因

平常我们注入时都是通过对原来sql语句传输数据的地方进行相关修改,注入情况会因为该语句本身的情况而受到相关限制,例如一个select语句,那么我们注入时也只能执行select操作,无法进行增、删、改,其他语句也同理,所以可以说我们能够注入的十分有限。但堆叠注入则完全打破了这种限制,其名字顾名思义,就是可以堆一堆sql注入进行注入,这个时候我们就不受前面语句的限制可以为所欲为了。其原理也很简单,就是将原来的语句构造完后加上分号,代表该语句结束,后面在输入的就是一个全新的sql语句了,这个时候我们使用增删查改毫无限制。

使用条件:

堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

 这道题就可以使用堆叠注入,因为过滤了很多东西,就可以考虑用堆叠注入

用union select注入,来呢注入查询发现限制

解题

开始堆叠注入,发现有回显

查表

 

查列

 

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

查数据

正常查数据应该用

1' ;select flag from `1919810931114514`  但是这道题给select过滤掉了,所以就用16

进制的来绕过

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

知识点:

  1. prepare…from…是预处理语句,会进行编码转换。
  2. execute用来执行由SQLPrepare创建的SQL语句。
  3. SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

得到flag

当然这题还有其他的解法,比如不用select进行注入,在转换16进制的时候不转换 而是利用word表,将flag信息写进word表里

BUUCTF[强网杯 2019]随便注 的三种解法-CSDN博客  大佬博客

[GDOUCTF 2023]hate eat snake

进入这个界面,发现不能看源码以及js代码,先抓包

没看到什么有用的信息

右击页面进行检查,他让坚持一分钟,那直接找一下,把值改掉就得了

找了半天,发现这个比较像,getscore

看大佬的wp才知道要用

Snake.prototype.getScore = () => 61

来调用函数,js不懂的地方太多了

在控制器里运行一下,在摁空格启动游戏就出来了flag

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值