实验八 Web基础 SQL注入原理

实验八 Web基础

实验要求

(1)Web前端HTML

能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

(2)Web前端javascipt

理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。

(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

(4)Web后端:编写PHP网页,连接数据库,进行用户认证

(5)最简单的SQL注入,XSS攻击测试

功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

实验原理

1.在Kali-Linux中可以很方便地启停Apache2服务,如果要更方便地进行访问,我们可以先Kill掉占用80端口的进程,这样Apache启动之后就会使用80端口,在访问时就不需要选择端口连接了!

HTML是超文本传输协议,可以在CSS的帮助下制作出一个比较精美的静态网页界面,但是功能有限,如果加入了Java Script代码后,界面就能动态处理一些事态,变得更灵活,用户体验也会更好一点。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。所以本质上来讲这两者没有什么区别,视需要使用就好了。

2.JavaScript可以实现一个动态网页,不像静态的、死板的HTML文件,带有JavaScript的JSP文件看起来更加生动。将一段Java代码穿插写在HTML文本中间,不影响HTML本身的作用,限制较少。

3.在后台中一般来说会带一个数据库的软件,我个人用得比较多的是Access,本次试验用到的是mysql数据库,是一个已经内置在Kali-Linux中的一款数据库软件,很省事,如果后台采用Java语言编写的话,需要加载Access驱动后用SQL语言访问Access数据库,存取你想要的数据。不管哪个都是很好用的软件,在命令上都是一样的。

4.后台会在用户提交表单后,将数据进行一些处理,这里面就可以进行登录验证等很多事情,链接数据库也是在这部分实现的。

5.SQL注入:在访问数据库时候,攻击者使用设计好的字段令SQL语言做出其它的、预想之外的操作,以影响数据库的正常工作,达到攻击者篡改、破坏数据的目的。

实验步骤

我们按部就班地按照实验步骤,一点一点做~

首先打开Apache服务,如果有进程在占用80端口一定要Kill掉,然后将自己做好的登录页面置入/var/www/html/这个目录下面,用浏览器查看一下,看看能否正常访问我们置入的文件。

然后打开Kali-Linux自带的mysql服务,进行一些简单配置,更改root用户的密码,更新权限,建立一个test_db数据库,存入我们需要的登录信息。

mysql这块在敲命令行的时候一定要记住:加分号!!!这次被这些分好搞得焦头烂额,不是很习惯……

最后我们使用老师给出的一个login.php文件进行连接,在使用之前要更改用户名、密码使它能访问本机的mysql数据库,还要配合我们制作的HTML页面使得username和password的表单名称可以对应,否则不能正确读取文本框里面输入的信息。

A-oooooooooo!!出错了,这个是我们连接不上数据库的错误提示,我接下来尝试了下面这些操作:

1.新建一个用户

2.进行权限提升

3.更新文件内容

这些操作结束后……并没有解决问题……不过倒是产生了不一样的效果login.php什么都不显示了!Emmmmm…………

这个时候我们要使用一款神器,他叫:别人的电脑!(别问我为什么每次实验都会出现各种各样奇奇怪怪的错误,我也不想啊……)

这个时候发生了一个小插曲(后来觉得这显然比在别人电脑上做成功更靠谱一些):

反正也行不通了。。。不如试一下看看能不能找到某些网站的漏洞emmmm……所以先拿一些做工比较粗糙的网站下手试了试,虽然这些不是很正规的网站看起来有点low,但是游民星空、游侠网、3DM(这个登录信息太多了啊)还有很多关掉就会忘掉的网站,等等这些网站还是可以有效抵挡的,他们会额外检查用户名这块区域的字符合法性,所以很多sql注入的方式会被这层检测拦下来,也不失为一种防御手段,这里面只有游民星空这个网站出现了异样,很久没有登陆反馈,预测产生了一些影响吧,输点别的还是挺正常的。

然后就找了些网友们推荐的可以尝试一下的SQL注入点,这里首先尝试的是testfire的一个页面,简单的username='or 1=1#是不奏效的,我在尝试时在Username字段中输入admin'OR'l,在Password字段中输入test'OR'1,单击Login按钮,你会发现你进入了用户账户!大家都可以试一下,这个网站有故意成为靶机的意思哦!

这个网站攻击原理是将SQL语句改为了SELECT * FROM [users] WHERE username= 'admin' OR '1' AND password='test' OR '1'。是不是很巧妙,不光用户名可以设计,密码字段也可以稍加设计,做到SQL注入,这才使得我们成功进入这个网站的后台。

不知道这样能不能算作一次SQL注入实验呢?

i春秋还提供有SQL注入的更详细的介绍和技巧,可以跟进关注一下!

实验感想

在网上找了非常多的登录界面,尝试使用SQL注入绕开登录认证阶段,但是事实上大部分的网站是无法以现有水平进行攻击的,现在的用户名可能不是使用用户输入的原样,合成SQL语句进行数据库访问,而是进行了一些处理和防范。有些网站会在页面上写入JavaScript进行用户名格式判断,过滤掉不符合要求的用户名格式,用户即使不点提交也会提示格式错误,这样可以在极大程度上避免纯粹的SQL注入设计好的字符直接对数据库进行处理,也是比较廉价的方式,相对应的,这个方式如果使用其它的手段绕过JavaScript检测也是可行的,要斟酌一下这个代价是否划算。还有一种可能带有防范措施,当服务器察觉到传输数据可能造成SQL注入,则会断开连接,使浏览器与网站失去连接,也是比较常见的一种防护措施。再有就是不直接使用用户名进行查找,这个虽然是我自己想的但是很有可能规避SQL注入攻击,将输入的这些字段进行哈希运算,近似一一对应很难撞库暂不考虑这个特殊情况,利用哈希值进行比对;由于密码哈希算法是不可逆的,从哈希值逆运算找到对应的明文计算上不可行,很难找到对应可以SQL注入的明文,所以可以实现SQL注入的防御。

总而言之,本次实验能教给我们的只是需要预防SQL,仅仅做实验达到效果是远远不够的,更需要我们理解原理,想出应对之策,避免自身损失。

posted on 2018-05-22 21:33  囚月  阅读(1214)  评论(0编辑  收藏