sql-11,12
接下来的是post型注入
Get与post的区别1. get是从服务器上获取数据,post是向服务器传送数据。
2. GET请求把参数包含在URL中,将请求信息放在URL后面,POST请求通过request body传递参数,将请求信息放置在报文体中。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4. get安全性非常低,get设计成传输数据,一般都在地址栏里面可以看到,post安全性较高,post传递数据比较隐私,所以在地址栏看不到, 如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。
5. GET请求能够被缓存,GET请求会保存在浏览器的浏览记录中,以GET请求的URL能够保存为浏览器书签,post请求不具有这些功能。
6. HTTP的底层是TCP/IP,GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数, ...
sql-9
Less-9 时间盲注从题目中我们了解到了这是一道关于单引号时间盲注的题,那么我们先尝试 ?id=1’ 发现返回的结果竟然是 You are in … 什么情况?于是分别尝试 ?id=1 ?id=1” 发现结果都是You are in … 于是可以大胆的猜测正确的输入和错误的输入返回的结果被设置成一样的了。
对比后台源码:
从源代码中证明了我们的猜测,由此也可得出这样的结论:1.不返回报错信息页面,无法进行基于报错信息的盲注。2.页面不存在true和false两种不同的页面,无法进行对比也就无法进行布尔盲注。
一般来说,在页面没有任何回显和错误信息提示的时候,我们就会测试时间盲注这最后的手法。
发现只有语句页面延迟了,说明这是单引号时间盲注。常用的判断语句:‘ and if(1,sleep(5),1) %23
‘ 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 ...
sqllabs-Less5,6,8
Less-5正确的思路是盲注。从源代码中可以看到,运行返回结果正确的时候只返回 you are in….,不会返回数据库当中的信息了(但会print_f(mysql_error()),这点很重要),所以我们不能利用前面 less1-4 的方法。
报错注入
发现sql语句有错误,这里就想到报错注入
什么是报错注入呢?
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。0x7e=’~’
首先介绍三种报错注入常用的语句: (1). 通过floor报错 and (select 1 from (selectcount(*),concat(( payload),floor (rand(0)*2))x frominformation_schema.tables group by x)a) 其中payload为你要插入的SQL语句需要注意的是该语句将 输出字符长度限制为64个字符
(2). 通过updatexml报错 and updatexml(1, payload,1)同样该语句对输出的字符长度也做了限制,其最长输出32位并且该语句对payload的反悔类型 ...
双查询注入
双查询注入原理:
rand():随机函数
floor():取整函数
count():汇总函数
group by values:分组函数
当在一个聚合函数,比如count函数后面使用分组语句就会把查询的一部分以错误的形式显示出来;
先来看看子查询 select,就是在一个select语句中还含有一个select语句叫做子查询;
看个例子: Select concat ((select database()));
在查询的时候,子查询的select会把当前的数据库反馈给concat函数 (concat函数就是用来连接里面的结果)
1234567mysql> select rand();+--------------------+| rand() |+--------------------+| 0.6080478007048814 |+--------------------+注:rand函数是一个随机函数,所以每次出现的值不一样;会出现0-1之间的值;
接下来执行floor函数
1234567mysql> select floor( ...
sql-Less3,4
Less-3注入点闭合的问题首先先讲讲闭合符的问题
一般注入点闭合无非是 ‘ , “ , ‘) , “)等各种组合(逗号是分隔符)
一般的代码:$id=$_GET[‘id’];
$sql=”SELECT * FROM users WHERE id=’$id’ LIMIT 0,1”;
就是这里,对id进行了修饰,用’(单引号)把id括了起来。所以我们构造语句的时候,一是要把我们构造的语句‘逃逸’出来,二是要把结构进行补全或者适当的注释。
注释可以用–+;– -;#把后面的’或者多余的修饰符注释掉
less1--根据注入位置数据类型可将sql注入分为:数字型和字符型。用 ?id=1 和?id=1’ 探测是否存在SQL注入。发现前者返回正常,后者会出现mysql语法错误。错误: ’ ‘1’’ LIMIT 0.1 ’SQL: select login_name,password from admin where id=‘id’ limit 0,1;
less2–错误: ’ ’ LIMIT 0,1 ’SQL: select login_name ,password from admin wh ...