美文网首页ctf
cg-ctf sql注入1&sql injection&密码重置

cg-ctf sql注入1&sql injection&密码重置

作者: byc_404 | 来源:发表于2019-07-31 11:21 被阅读0次

    这几天cg-ctf分数终于突破了800分大关,那么来适当的整理下思路与知识吧。

    SQL注入1

    先看题目跟源码

    http://chinalover.sinaapp.com/index.php source

      分析下源码,大致可以知道要求user为admin,对密码没有要求,因此绕过密码将其注释掉是肯定的了。但同时,发现$user跟$pass两个变量经过trim()函数处理,这个函数的作用是移除字符串两侧的空白字符或其他预定义字符。因此双引号里面的都被解析,可以不用闭合。

    直接注入就好了,

    直接用输入框注了,,浏览器的url写多了看的眼睛疼

    得到flag

    SQL Injection

    TIP:反斜杠可以用来转义 仔细查看相关函数的用法

    查看源代码如下:

    source

    出现在源码中的clean()函数是我们调整注入语句的关键 ,而其中的  htmlentities()函数在很多安全书籍中有关注入的章节都有所出现。其功能视第二个参数而定,可以过滤掉单引号,双引号,或者兼而有之。因此,sql语句的闭合就成了问题,即我们不能用常规的单引号' 来进行闭合。

    这时tip就派上用场了,因为 ‘\’反斜杠可以用来转义,所以注入时考虑使用反斜杠进行转义。

    首先看sql语句

    $query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';

    首先反斜杠碰上单引号直接吞掉

    所以语句实际为:

    SELECT * FROM users WHERE name='.$username.' AND pass='.$password.';

    我们要传的两个参数就在其中,考虑到闭合问题,先用反斜杠使$username无效化,就是说:

    SELECT * FROM users WHERE name=' AND pass='.$password'

    所以这里针对password的值也好说了,直接使sql语句中 or 1=1#就好; 

    所以构造出来的结果是:username=\&password=or%201%3d1%23

    得到flag。

    #这种注入技巧很不错,可以多理解一下其语句结构

    密码重置

    密码重置

    要求是:重置管理员账号:admin 的密码

    首先记得先点下重置,,,(我其他步骤都是对的结果在这一步上出了问题。。。)

    看到url中user1=Y3RmdXNlcg==,很容易想到是base64编码,转过来后发现是ctfuser

    基于页面里的用户框不能更改,我们先把重置的url定下来,即user1='admin的base64编码'

    即  http://nctf.nuptzj.cn/web13/index.php?user1=YWRtaW4=

    然后看了下源码,确认了三个框的名字分别为 user, newpass, vcode

    准备传值

    用fiddler传post请求:

    post flag

    flag也就出来了。

    相关文章

      网友评论

        本文标题:cg-ctf sql注入1&sql injection&密码重置

        本文链接:https://www.haomeiwen.com/subject/wuczrctx.html