⭐进行SQL注入的步骤
(个人整理的一些步骤思路,学习使用)
1.首先先判断URL是否可以注入(既是否存在注入点)。
①在语句后面(常见一般是?id=1)加上一个单引号,加上一个单引号后,如果存在注入点的话,那么真正运行的语句后面会多出一个单引号,数据库就会进行报错(或者说显示与之前不加单引号不一样的画面)。
②如果加上单引号没反应(例:?id=1’没反应),我们用万能密码1=1进行尝试(例:?id=1’ and 1=1/1=2 ––+),如果报错的话,证明也可能存在注入点。
2.判断数据库的类型(数据库指纹的判断)怎么判断数据库的类型?
答:
①利用数据库独有的语法、函数、系统表
②尝试去查询系统表
③通过报错的代码进行判断
3.获取数据库的库名
①怎么查询数据库的库名?答:使用函数,如:select database ()(例:?id=1 union select database () --+)这里举例获得库名:kuming
②从上面的语句中引生出一个问题,用union要知道前面语句的字段数,那么我们要怎么知道前面语句的字段数呢?请看下面👇🏻问题的问题4。
4.获取数据库的表名
答:每个库都会有一个table表,可以用"select table_name from tables"来查询表名,(那么这里的语句为:1’ union select 1,1group_concal(TABLE_NAME) from information scheme.TABLE where table scheme= 'kuming’5⃣️
获取数据库的列名根据查出来的表名进行条件语句查询即可,这里不做过多叙述
⭐HTML的知识
一般常用的为get请求和post请求,由于get请求有长度限制,所以我们进行SQL注入时一般是用post方法进行注入。
⭐常见的问题
问题一:前面为什么要加单引号?
答:因为SQL注入是把用户输入的参数和数据库里面的数据进行解析,用户输入的数据会被两个单引号包起来,输入单引号是为了屏蔽前面的单引号。从上面的问题就引出来了一个问题 那么后面的单引号要怎么屏蔽掉呢?这时就引出来了第二个问题。
问题二:为什么要加 “––+”" ?
答:在SQL语句中,––是注释后面内容的符号,加––是为了注释掉后面语句的内容,而后面的+号,在SQL语句执行之后会变成空格,所以我们一般在后面加上一个+号。
问题三:为什么要用union语句?
答:因为SQL语句一般只能执行一个人增删改查的功能,如果想执行我们自己编写的SQL语句(既进行SQL注入),我们可以用union来进行联合查询,查找我们想要的东西。
⚠️使用union的注意事项:
①后面构造语句的字段字数要与前面语句的字段字数保持一致,这也是我们进行SQL注入时为什么要猜SQL语句字段数的原因。
②union后面语句的字段类型要与前面语句的字段类型保持基本一致从注意事项中可以知道,我们使用union时要知道我们要知道前面字段的字段数,从而引出了我们的第四个问题。
问题四:应该怎么样判断SQL语句前面的字段数呢?
答:用order by 语句。(例:?id=1’ order by 3),order by 后面的数值逐渐增加,发现 出现报错时,前一个数值即为他的字段数
问题5:如何把多行的值拼接起来变成一行的值?
答:用group_concat函数,输出的值用逗号进行分隔开。
问题六:我们通过之前拿到的信息,从数据库中得到登录的账号密码后,应该如何登录呢?
答:查询子域名,找到登录的域名信息。
方法:
①用搜索引擎中的set语法,例:set baidu.com
②网站上的子域名搜索库
③一些软件,如layer子域名挖掘机。
问题七:如果我们知道了一个系统存在SQL注入漏洞,那么我们怎么知道别的系统是否存在这个漏洞呢?
答:CMS指纹识别、数据库指纹。那么怎么查询这些信息呢?答:利用一些工具,如浏览器插件"what run"等
问题八:我们怎么知道有哪些网站是与我们SQL注入语法类似的呢?
答:①URL采集。可以使用浏览器搜索语法进行搜索,如:inurl:index.php-(index、php都是可以替换的,如php可以替换成asp等)②工具