77777
作为一个小白,瑟瑟发抖地选择了这道被解出次数最多的题目…emmm…还是有一些收获的。
首先题目给出了一些代码和一些信息:
信息是关于安装配置虚拟机的…和我之前配置环境的步骤,指令差不多…感觉应该没什么问题,就只是告诉我们服务器上有这个东西。
给出的代码就比较关键了。而且题目About
里说可以修改points
,告诉我们flag
是admin's password
,这部分代码给出的就是如何更新points
。
这是第一次见在update
语句的基础上来构造sql
注入语句…其实道理是一样的,只是我想的不够明白。
首先看构造的sql
语句。$p
$points
是我们可以控制的,因为$p
匹配的是%d
,所以不管我们输入的p
参数是什么,最终经过格式化之后它一定是一个数字(输入字符串时会自动将其转化为数字,如果无法转化,则为0)…$points
是经过waf()
过滤的…
刚开始做的时候,其实也没想明白是怎么样注入流程…一直在尝试使用%0a
结束update
语句,然后再select
…但这样其实没办法看到我们想要的结果…更新后的points
是在profile
里可以看到的,所以正确的思路应该是把我们想要的东西,放到更新后的points
值中。
在网上查找了update
的sql
注入方式。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…本来打算这周前几天的时候就把这些题目