基于MySQL的报错注�?
原理利用数据库的某些机制,人为的制造语法错误或者其他错误,并加以其他sql语句构造payload,使得查询结果能够出现在错误信息中�?
三种常用报错报错注入大概涉及函数10-20中,这里当然写不完,大家可以私下里去查询,这里就介绍靶场和CTF中常见的函数,但是CTF比赛中sql注入也考的比较少了,仅供参考�?
Floor()报错限制:使用了mysql_error()等输出mysql报错才可以,mysql5.x版本
原理建议大家直接阅读木头师傅的文章,我这里只是结合payload简单讲解一下。http://wjlshare.com/archives/220
简单介绍一下floor(x);rand();cout();concat();group by四个函数,可以让大家更好的理解一下�?
floor()floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个值)。(与celling()函数相反,从英语角度看,一个地板一个天花板也好理解�?
简单点来说,floor()函数返回小于等于该值的最大整�?.例如�?
结合这两张图相信大家理解起来就简单多了�?
rand()rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成�?
rand()函数就是生成一�?0-1之间的一个随机数,例如在mysql中如下图
注意:在rand(0)小于等于三个时,rand()和rand(0)时没有区别的,但是当rand(0)大于三个时,就会产生变化,如下�?
...
基于MySQL的联合查询注入
前言这篇文章是我在学习sql注入时的笔记,也算是入门第一课,步入高中时就有一个黑客梦,虽然现在还很菜,但是乐在其中。sql注入属于OWASP TOP 10 重要程度我就不说了,学就完了。
mysql注入漏洞有很多中,包括但不限于联合查询注入,报错注入,时间盲注,布尔盲注,堆叠注入,DNS注入,我会将其分成几个篇章进行讲解,同时也会对后续进行补充。
漏洞原理服务端在接收来自客户端的查询参数后,未对查询参数进行严格的过滤。导致恶意用户可在查询参数中插入恶意的sql语句来查询数据库中的敏感信息,最终造成数据库信息泄露。
基本条件
查询列数必须一致。
查询语句的查询的各列类型,顺序最好一致。
这些基本条件我也不知道当时从哪借鉴过来的,大家看看就好了。
判断是否有注入?id=1 参数后加 " ' ")) ")) 单双引号,引号括号等判断页面内容是否会消失or/and 1=1 页面正常 or/and 1=2 页面显示内容消失
or/and sleep(5) –+ / or ‘1’=’1’ 检测时间注入
and (select 1 from(select sleep(5)))如果当前数据表没有数据上面这种方法就无法检测,这个利用子查询结构还是可以检测
?id=-11’ union all select 1,2,3,4 – -
注入漏洞利用位置通常在 where后面, 联合语句必须要在select的最后处,所以在注入过程中需要利用注释符号注释掉后面的结构
select * from users where id=1 union select 1,2,3,4
注释符号随便你 ; --+ 其他注释都可以,看自己
闭合
判断字段数
判断结果输出位置
我也忘了 ...
基于MySQL的盲注
前言这篇文章是之前在学习MySQL盲注时候随手写的,现在回过头来进行重新编排并且补充,欢迎大家观看学习以及给我提出建议,万分感谢
盲注分为布尔盲注及时间盲注,接下来我会分开来进行介绍
布尔盲注0x01 布尔盲注介绍很多师傅会发现在我们获得一个页面的时候,只会出现两种页面,True(页面)和False(页面),不会产生其他信息,那么这时候我们的查询思路就要改变一下了,我们就只能通过判断语句来进行注入,这便叫做布尔盲注。
这里是SQLlabs-less8 ,利用这一关来跟大家简单介绍一下SQL盲注,进入输入?id=1,发现出现了一串You are in…….
那么我们输入一下?id=1',发现这一串字符消失了。
这时候我们闭合一下看看会有什么反应?id=1' --+,发现又变回第一种情况了,那我们大概就猜出是盲注了
关于这一关就到这,如何注入在后方会说,这里就是结合实例介绍一下布尔盲注。
0x02 布尔盲注步骤
先进行闭合
找到永真和永假的两种情况
利用这两种情况对数据进行一位一位的获取
0x03 注入方法
手动爆破,也就是下面我会介绍的方法,比较麻烦,也比较费时间
burpsuite爆破,在burpsuite中提供了爆破的功能intruder 可以进行一些爆破运算
python脚本进行爆破,需要一点py编程基础
SQLmap进行爆破,这个后续会介绍,敬请期待
0x01 手动爆破我们前面已经知道了只会有两种回显,语句正确一种回显,语句错误一种回显,那么我们就只能构造判断语句来进行爆破,若判断正确则会给我们回显正确,错误就不返回;还是第8关
需要采用二分法,从ASCII码的一半来进行查询,先输入?id=1' and ascii(substr(database(),1,1))>80 --+ 发现产生回显了,这证明该语句正确,说明数据库名字第 ...
基于MySQL的注入补充
前言特别感谢木爷,有一些是摘了一点木爷的图片,本地无环境;http://wjlshare.com/archives/1479
本篇文章将会介绍之前并未介绍的注入方式以及方法,若想观看基于MySQL的联合查询注入、盲注、报错注入,请看前面的文章,我会在文章中穿插介绍函数,希望大家注意
基于MySQL的堆叠注入什么叫堆叠注入Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆SQL语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在MySQL中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。我们就可以多句一起使用,那么这个叫就做 stacked injection
堆叠注入特点以及原理在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
这里在MySQL中输入 select 1;select 2;MySQL会执先后执行两条语句
这里大家可以看见,数据库先执行科select 1后再执行了select 2,这便是MySQL多语句执行的特性,先执前一语句,后执行后一语句,故出现了如图所示的效果。那么这就是进行了一次堆叠查询,同时执行了两个语句,就叫做堆叠
一个SQLlabs的例子这里是SQLlabs-38关,我们想得到MySQL的库名(database)
同样的先进行测试输入?id=1'发现错误
然后进行闭合,输入?id=1' --+ 发现正常输出了username和password,说明存在注入漏 ...
文件上传靶场1-5
前言文件上传靶场:https://codechina.csdn.net/mirrors/c0ny1/upload-labs/-/archive/master/upload-labs-master.zip
本系列文章是我在学习文件上传时写下的笔记,如有错误欢迎大家指出。
pass-1查看源代码,可以发现进行了文件后缀过滤,只能上传.jpg/.png/.gif后缀的文件
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("请选择要上传的文件!");
return false;
}
//定义允许上传的文件类型
var allow_ext = ".jpg|.png|.gif";
//提取上传文件的类型
var ext_name = file.substring(file.lastIndexOf("."));
//判断上传文件类型是否允许上传
if (allow_ext.indexOf(ext_name + "|") == -1) {
var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
alert(errMsg);
return false;
}
}
前端进行了后缀拦截,只允许上传那三种后缀。
<?php
phpinfo();
?>
将这个p ...
文件上传笔记21及总结
这是文件上传靶场的最后一关,同时我也会总结一下每一关的绕过方法。
pass-21通过源码观察一下网站信息,准备php代码,同样是使用了phpinfo()函数
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
//检查MIME
$allow_type = array('image/jpeg','image/png','image/gif');
if(!in_array($_FILES['upload_file']['type'],$allow_type)){
$msg = "禁止上传该类型文件!";
}else{
//检查文件名
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
if (!is_array($file)) {
$file = explode('.', strtolower($file));
}
$ext = end($file);
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}else{
$file_name = reset($file) . '.' . ...
文件上传靶场16-20
pass-16观察源码,涉及到一个函数exif_imagetype(),也是用来检查文件是否为图片的函数。
这篇文章是关于这个函数的:https://blog.csdn.net/qq_14969259/article/details/81301545
exif_imagetype()读取一个图像的第一个字节并检查其后缀名。返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块。
function isImage($filename){
$image_type = exif_imagetype($filename);
switch ($image_type) {
case IMAGETYPE_GIF:
return "gif";
break;
case IMAGETYPE_JPEG:
return "jpg";
break;
case IMAGETYPE_PNG:
return "png";
break;
default:
return false;
break;
}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$res = isImage($temp_file);
if(!$re ...