N1CTF WEB WriteUp

本文记录了作者在N1CTF Web挑战赛中的解题经历,涉及SQL注入、文件包含、命令注入等安全问题。作者通过分析题目给出的代码和信息,理解了注入流程,并分享了利用Burp Suite等工具进行测试和绕过的方法。在复现题目过程中,作者学习了源码审计和漏洞利用,强调了理解注入点和服务器行为的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

77777
作为一个小白,瑟瑟发抖地选择了这道被解出次数最多的题目…emmm…还是有一些收获的。
首先题目给出了一些代码和一些信息:
这里写图片描述
这里写图片描述

信息是关于安装配置虚拟机的…和我之前配置环境的步骤,指令差不多…感觉应该没什么问题,就只是告诉我们服务器上有这个东西。
给出的代码就比较关键了。而且题目About 里说可以修改points ,告诉我们flagadmin's password ,这部分代码给出的就是如何更新points
这是第一次见在update 语句的基础上来构造sql 注入语句…其实道理是一样的,只是我想的不够明白。
首先看构造的sql 语句。$p $points 是我们可以控制的,因为$p 匹配的是%d ,所以不管我们输入的p 参数是什么,最终经过格式化之后它一定是一个数字(输入字符串时会自动将其转化为数字,如果无法转化,则为0)…$points 是经过waf() 过滤的…
刚开始做的时候,其实也没想明白是怎么样注入流程…一直在尝试使用%0a 结束update 语句,然后再select…但这样其实没办法看到我们想要的结果…更新后的points 是在profile 里可以看到的,所以正确的思路应该是把我们想要的东西,放到更新后的points 值中。
在网上查找了updatesql 注入方式。payload 如下:flag=0&hi=|conv(hex(substr((select password),1,1)),16,10)
(在做的过程中发现,最后输入points 时,应该是当做十进制来输出的,如果结果是06,会变为6…所以最后采用了conv 函数,将结果转化为十进制)
思路就是,将我们想要的password 取出来之后,变成数字,和 0 | ,这样最后更新的值就是password 的值,显示出来我们就可以得到信息了。

反思:感觉sql 注入的题目,还是要想清楚注入的流程是什么样子的,整体的方法、思路…不能看到注入点就开始瞎注入,瞎使用句子…
在做这个题目的过程中还知道一个知识点:update 不能同时查询两次…emmmm…好像不是这样描述的…上图:
这里写图片描述
报错就是图里的报错…如果图中语句去掉from user 就可以正确执行…就像这道题目的payload 一样…emmm…自己感悟吧…

77777 2
emmm…这个题目是上一道题目的加强版,长得也差不多,只是过滤条件多了一点,整体思路一样,payload 也基本相同,只是需要再多考虑写绕过条件…
先是测试发现pw) (pw 这样的是被过滤的…那就尝试用空格隔开pw 和括号,发现是可以的。payload|conv(hex(substr((select pw ),1,1)),16,10) ,这样就得到了pw 的第一个字符的ascii 码值,本来以为就这样就结束了…再接着做的时候发现2 3 4 5 9 这些数字是被过滤掉的…那就要想办法代替这些了…我是用length('11') 代替2,如此类推…(感觉有点蠢啊,不过是可行的…)。正常的应该是用二进制来代替这些被过滤掉的数字。最后拿到的pw 字段值是hahah777a7aha77777aaaa

funning eating cms
emmm…本来打算这周前几天的时候就把这些题目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值