【web安全】如何进行sql注入

2021-02-02 16:44发布

2条回答
小小收藏家
2楼 · 2021-02-03 11:31

 1:寻找到SQL注入的位置

 2:判断服务器类型和后台数据库类型

 3:针对不同的服务器和数据库特点进行SQL注入攻击


征戰撩四汸
3楼 · 2021-12-12 16:13

1、找到可疑点,判断能否进行sql注入

查找思路、方法

1、一般是查找登录入口、查找页面或添加页面等用户可以查找或修改数据的地方。

2、查看网页源码,分析网页是否对输入的数据进行了过滤


判断方法

法一:在正确的地址后加单引号’,根据错误提示获取信息

例:http://www.mytest.com/showdetail.asp?id=49 我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:


Microsoft JET Database Engine 错误 ‘80040e14’

字符串的语法错误 在查询表达式 ‘ID=49’’ 中。

/showdetail.asp,行8


从这个错误提示我们能看出下面几点:


网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

程序没有判断客户端提交的数据是否符合程序要求。

该SQL语句所查询的表中有一名为ID的字段。

法二:1=1、1=2测试法

① http://www.mytest.com/showdetail.asp?id=49

② http://www.mytest.com/showdetail.asp?id=49 ;and 1=1

③ http://www.mytest.com/showdetail.asp?id=49 ;and 1=2


可以注入的表现: (原理 是 判断原网址是否对输入信息有过滤)

① 正常显示(这是必然的,不然就是程序有错误了)

② 正常显示,内容基本与①相同

③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、

或显示内容为空(程序加了on error resume next)


不可以注入的表现:

①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。


2、判断数据库类型

一般是Access和SQLServer两个库,两者区别:Access的系统表[msysobjects]在Web环境下读该表会提示“没有权限”,但,SQLServer的系统表[sysobjects]在Web环境下可正常读取。

法一:服务器IIS提示关闭时

可通过注入

http://www.mytest.com/showdetail.asp?id=49 ;and (select count() from sysobjects)>0

http://www.mytest.com/showdetail.asp?id=49 ;and (select count() from msysobjects)>0

若为Access,由于找不到表msysobjects,会提示出错;而如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.mytest.com/showdetail.asp?id= 49是大致相同的

法二:服务器IIS提示未关闭时

由于SQLServer有一个内置变量user,它的值是当前连接的用户名,类型为nvarchar,拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换换数据类型为 int 的列时发生语法错误,而“abc”的值即为用户名,可通过注入http://www.mytest.com/showdetail.asp?id=49 ;and user>0 判断。


3、根据注入参数类型,在脑海中重构SQL语句的原貌,通过注入sql语句猜表名和字段名(字段名即 列名)

方法:ID=49 And (Select Count() from Admin)>=0 即猜表名为Admin,若猜对则显示的页面与ID=49相同,猜对表名后,将Count()改成Count(字段名),直到猜对


4、使用SQL语句,得出字段的值

方法:Ascii逐字解码法

例,已知表Admin中存在username字段,首先,我们取第一条记录,测试长度: http://www.mytest.com/showdetail.asp?id=49 ;and (select top 1 len(username) from Admin)>0

原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>7成立,>8不成立,就是len(username)=8

当然没人会笨得从0,1,2,3一个个测试,怎么样才比较快就看各自发挥了。在得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码,比如:

id=49 and (select top 1 unicode(substring(username,1,1)) from Admin)>0

同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。


相关问题推荐

  • 回答 6

    这个还是因人而异吧,看你自己对哪方面感兴趣,兴趣是最好的老师,感兴趣了才愿意钻研学习下去,简单说一下这两个学习知识方面的不同吧:软件测试岗位虽然对于从业者的知识基础要求不高,但是软件测试岗位所涉及到的知识面还是比较广的,所以软件测试人员也需...

  • 回答 5

    SQL注入漏洞的危害:1、数据库中存储的用户隐私信息泄漏;2、通过操作数据库对某些网页进行篡改;3、修改数据库一些字段的值,嵌入网马链接,进行挂马攻击;4、数据库服务器被恶意操作,系统管理员帐户被窜改;5、数据库服务器提供的操作系统支持,让黑客得以...

  • 回答 16

    一、CISP(Certified Information Security Professional)证书中文叫注册信息安全专业人员,由中国信息安全产品测评认证中心实施的国家认证。可以说,这是目前国内对于个人来说认可度最高的信息安全人员资质,堪称最权威、最专业、最系统。根据实际岗位的不...

  • 回答 14

    渗透测试(也称为pentest)是测试移动应用程序漏洞的过程。此测试的主要目的是确保外部人员的重要数据.通过模拟黑客的思维和攻击手段,对计算机业务系统的弱点、技术缺陷和漏洞进行探查评估。经过客户授权后,在不影响业务系统正常运行的条件下,渗透人员在黑...

  • 回答 1

    网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。主要涉及到的有:1、物理措施:例如,保护网络关键设备(如交换机、大型计算机等),制定严格的网络...

  • 回答 33

      网络安全工程师学习内容:  1、计算机应用、计算机网络、通信、信息安全等相关专业本科学历,三年以上网络安全领域工作经验;  2、精通网络安全技术:包括端口、服务漏洞扫描、程序漏洞分析检测、权限管理、入侵和攻击分析追踪、网站渗透、病毒木马防...

  • 回答 26

      学历不是问题,技术才是硬道理!只要你的技术过硬的话,你完全可以进国家安全部门去工作的。比如公安局里的网监工作,大都是九零后的电脑方面的精英。未必都是本科生。还有从社会上特招进去的。所以说,现在是拿技术说话,不是靠学历吃饭的时代了。  网...

  • 回答 16

    网络安全的知识是比较简单的,比较好入门,好多知识理论,大家都是可以听懂的,这是完全没有问题的。网络安全最终的则是实战的应用,怎么把这些理论知识运用到事件中,这些才是重中之重。所以在选择培训机构的时候,也需要尽量去找这些实践操作多的培训机构。...

  • 回答 22

      能够胜任的岗位主要有:渗透测试工程师、大数据安全工程师、信息安全工程师、安全测试工程师、安全服务工程师、安全运维工程师、系统安全工程师、服务器安全工程师、云计算安全工程师、网络安全工程师、安全分析师、渗透讲师等;  按照web渗透、内网渗透...

  • 回答 23

    一些典型的网络安全问题,可以来梳理一下:IP安全:主要的攻击方式有被动攻击的网络窃听,主动攻击的IP欺骗(copy报文伪造、篡改)和路由攻击(中间人攻击);2. DNS安全:这个大家应该比较熟悉,修改DNS的映射表,误导用户的访问流量;3. DoS攻击:单一攻击...

  • 回答 19

    运维一般是设备或者环境的搭建和维护,网络安全可以看做是防火墙

  • 回答 12

    先说说运维工程师和网络工程师的区别。运维工程师是泛指,网络工程师为特指,所以不能这么对比。你应该这么理解,网络工程师是一个人(也可以是理解成一个岗位),而运维则是他的工作内容。从工作内容上来说,运维可细分为桌面运维、网络运维、服务器运维三大...

没有解决我的问题,去提问