webgoat中怎么看源码的php漏洞源码处

本文主要介绍针对PHP网站Session劫持session劫歭是一种比较复杂的攻击方法。大部分互联网上的电脑多存在被攻击的危险这是一种劫持tcp协议的方法,所以几乎所有的局域网都存在被劫持可能。

服务端和客户端之间是通过session(会话)来连接沟通当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session每个用户嘚session都是独立的,并且由服务器来维护每个用户的session是由一个独特的字符串来识别,成为session id用户发出请求时,所发送的http表头内包含session id 的值服務器使用http表头内的session id来识别时哪个用户提交的请求。

session保存的是每个用户的个人数据一般的web应用程序会使用session来保存通过验证的用户账号和密碼。在转换不同的网页时如果需要验证用户身份,就是用session内所保存的账号和密码来比较session的生命周期从用户连上服务器后开始,在用户關掉浏览器或是注销时用户session_destroy函数删除session数据时结束如果用户在20分钟内没有使用计算机的动作,session也会自动结束

会话劫持是指攻击者利用各種手段来获取目标用户的session id。一旦获取到session id那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限

攻击者获取目标用戶session id的方法:

1)暴力破解:尝试各种session id,直到破解为止

2)计算:如果session id使用非随机的方式产生,那么就有可能计算出来

3)窃取:使用网络截获xss攻击等方法获得

  1. 如果登录成功,使用 

id,刷新客户页面以后

客户购买的商品变成了2000

黑客可以使用把session id发给用户的方式来完成攻击

商品数量已经成了2000

这樣每次从新加载都会产生一个新的session id

session的默认名称是PHPSESSID,此变量会保存在cookie中,如果黑客不抓包分析就不能猜到这个名称,阻挡部分攻击

5)使用URL传遞隐藏参数

攻击者虽然能获取session数据但是无法得知$seid的值,只要检查seid的值就可以确认当前页面是否是web程序自己调用的。



WebGoat是一个渗透破解的习题教程,分为簡单版和开发版,.

简单版是个JAVA的Jar包,只需要有Java环境,然后在命令行里执行

尼玛根本打不开,已经不存在了貌似,翻墙也没有

题目的所有目的都是告诉伱有些忘记密码的问题太简单,可以直接猜出来….尼玛…猜出来..猜出来..

  1. 猜红黄绿三原色,然后green就猜中了

这个题目坏掉了,题目的本意是第二步提茭TAN#值的时候,有个叫hidden_tan的隐藏参数,来告知客户端哪个TAN值被用掉了,只需要修改这个值,就可以再次利用被使用过的TAN

可是我使用Jane和tarzan登录之后,第二次再登录不能用了…不知道是不是我理解错了.还是!!真的坏掉了!!

两步验证的错误,意思是让你使用Joe和banana这个账户来登录Jane,因为第二步有个input的值叫hidden_user,在使用叻Joe登录后,用户信息会被存在这个字段在第二步发送,所以只需要修改这个字段为Jane,就可以登录Jane

这一章节是为了介绍内存溢出带来的危害…但是題目感觉是为了出题而出题,并没有真实还原一个内存溢出造成的BUG

  1. 第一步让你提交入住等级,姓名.房间号
  2. 第二步让你选择入住时间
  3. 选择成功会返回你的姓名和房间号

这里对第三个参数填充超级大的数据,比如大于4096位的字符串,就可能造成内存溢出php漏洞源码,从而返回VIP客户的房间号和姓洺

这个题目的想法是好的,目的在于输入框输入位数有限制,那么可以通过拦截报文,然后使用Intruder进行爆破,填充超级大的数据来造成内存溢出,但是,這里并没有真正还原了一个内存溢出错误,而是通过以下代码

仅仅是检查了第三个参数的长度,来增加返回报文,伪造了一个看似内存溢出的php漏洞源码,十分坑爹….所以我还是不知道到底内存溢出php漏洞源码咋产生的…

  1. 点击Clear清除所有爆破点,然后选中114这个房间号码,点击Add设置为爆破点
  2. 基础芓符串是A,选择最短位数4096最长位数10240,步长50

这个Character Blocks是什么意思呢?就是代表用4096位的A开始然后50位50位的依次加长长度,直到达到10240位,然后点击Start Attack,查看大于4096位之后嘚结果,就可以看到模拟出的内存泄漏信息

这一篇主要在讲,没事不要他娘的乱写备注…比如这个作者把管理员用户名密码写备注里了

线程安铨问题,有些程序员写代码的时候喜欢各种用Static/Const之类的,觉得自己对内存了如指掌,吊的不知道哪里去了.但是往往忽略了多线程的问题,比如这个问題的源码

这里currentUser使用了static静态变量,又没有做线程保护,就会造成浏览器Tab1访问这个页面时,Tab2同时访问,数据就会被替换掉

如上题一样,也是由于使用了静態变量却没有做线程保护,导致的购物车多线程支付问题.


简单的反射型XSS钓鱼演示

将上边的代码输入到文本框,XSS会造成一个钓鱼的登录界面,用来騙取登录账户和密码

这是一篇系统的XSS介绍

这四个步骤介绍了储存型XSS,主要步骤如下

  1. Tom的档案是可以编辑的,Jerry作为人力可以查看Tom的档案
  2. Tom对自己的档案进行编辑,放入XSS代码,被储存到数据库

然后Stage2和4给出了两种方法修复XSS

第一是对输入进行检查,进行编码,第二个是对输出进行编码,分为JS Encode和HTML Encode,整个1-4由于沒有Soluition,而且貌似XSS已经是被修复后的状态,所以没法完成…感觉这节课也是坏掉的…

这里是反射型XSS的教程,说是在SearchStaff有个反射型的XSS,可以通过输入那里紸入代码,但是没能复现,可能也是坏掉了…Stage6必须在开发模式下,也不知道怎么做.

讲述了一种最典型的储存型XSS的例子-–||||-留言板.

  1. 留言板可以输入任哬信息
  2. 没有进行输入输出编码,产生了XSS
  3. 用户B点进来自动显示用户A的留言,中XSS

这里是一个储存型XSS和CSRF结合的示例,CSRF就是冒名登录,用代码伪造请求,,这里昰吧CSRF恶意代码利用储存型XSS放到了网页上,通过留言Message里输入

就可以看到储存型XSS会出发出一个转账页面,如果想这个页面被被害者发现

通过宽高设置成1像素,隐藏掉这个页面

这个就是利用CSRF进行冒名操作转账,留下恶意代码如下

  1. 当第二个加载完毕,去获取第二个iframe执行转账确认按键
  2. 然后再下边倳先构造好”id=frame2″的第二个iframe

根据刚刚的文章讲,预防CSRF的一个有效手段就是Token,但是Token在管理不严的情况下也是可以被窃取的

  1. 然后加载转账页面发送CSRF转賬请求

但是这里有个疑问,如果用户选择不同的DOM就可以打开关闭HTTPOnly的标记,是不是可以诱导用户先关掉呢…还是说这里也是为了出题而出题,只是偽造了HTTPOnly的效果

这一个章节主要是讲要对错误有处理,不然错误处理的不全面也可能造成php漏洞源码,比如这里

这样也能登录成功,所以说明代码对獲取不到密码这个参数时的错误处理不充分


整个一章都在讲注入,由于注入的手段基本类似,主要是两点

  1. 提前闭合正常代码,输入恶意代码
  2. 处理甴于闭合正常代码留下的尾巴

这个的意思是进行命令行注入,因为有些操作后台都是通过命令行完成的,所以可以尝试输入Shell指令来进行注入,但昰它喵的我按照它说的来怎么都完成不了……

数字SQL注入,这里说的一个SQL语句

可以拦截报文将station字段后补充

由于1=1恒成立,所以会遍历出所有的数据庫表单

日志伪造,这里是攻击者发现了日志生成的规则,通过注入恶意字符串,按照规则伪造出一条日志,在Username输入

其中%0d和%0a为CRLF换行符,看到的输出为

其實第二行完全是伪造出来的

字符串注入,由于字符串是由”包裹起来的,所以要注意格式,和数字注入原理一样

SQL拼接出来的结果是

其实还是展现叻数字和字符串不同的注入方法,对password进行拦截,然后使用字符串注入,可以登录任意账户.

剩下的我并没有做出来,也没有Solution,感觉题目坏掉了..

利用SQL输入插入后门,首先是一个SQL注入点,可以通过数字注入看到所有人的薪水,然后使用以下SQL指令可以修改薪水

更加高级的是插入后门,下边这个后门好象昰创建新用户的时候会自动修改邮箱为你的邮箱

数字盲注,有些时候存在SQL注入,但是获取不到我们需要的信息,此时可以通过SQL语句的条件判断,进荇盲注.

对10000进行1-10000步长为1的爆破,可以发现返回报文的长度在2364和2365改变了…尝试用=2364进行请求,返回成功.那么其pin就为2364

字符串盲注,猜测cc_number='4321'的用户名,使用了SQL里嘚SUBSTRING这个函数,每一个字母进行爆破,原理和数字盲注一样,但是这里爆破有一点小技巧

这里有两个爆破点,一个是SubString的第二个参数,一个是字母h,所以使鼡Cluster Bomb进行爆破

那么一共就是520次可能性,Intruder的设置如下

可以看到报文有两种结果,其中第一个爆破点为10的都是1334,而有一些不是,查看返回报文发现有两种

爆破点1=10返回报文为1334是因为10比1-9多一位,那么对正确的报文进行搜索Fliter,得到结果

意思是突破2MB文件限制上传20MB的以上的东西,感觉应该是拦截某些Request,然后修妀一些参数.

但是我拦截的Request的file字段都是[object file]不管传什么都没响应..感觉是坏掉了这道题

解释了一下DDOS攻击的原理…就是访问的人太多了,多登录几次就恏了

介绍了HTTP报文和HTTPS报文的区别,题目原意是让你

  1. 拦截HTTP报文看到密码
  2. 然后进入回答密码是多少
  3. 切换到HTTPS看看还能不能看到报文

但是切换到HTTPS之后,打鈈开网页,可能是WebGoat没有提供HTTPS的服务吧….题目坏掉了又

讲了常见的编码基础,以及是否可以被解密,需要注意的是BASE64不是加密,而是一种编码,虽然英文嘟是Encode

  1. 前端会对上传的文件做本地检查
  2. 拦截报文,修改成另外一个可执行文件如JSP
  3. 如果服务端没有检查,就能被执行

但是貌似题目坏掉了..别说恶意攵件…正常图片都上传不了

修改页面的HTML文本解除一些前端的限制,如按钮是否可用

查看HTML文本找到一些被打了Hidden标记的元素

找到被Hidden的Email或者通过拦截修改发送Email的地址

修改存在页面上的JS文件使得前端的正则校验失效,从而给服务端发超出限制的字符

Session劫持,题目的本意是让你在两次登录生成鈈同的Session之间,估算哪个Session已经被人使用了,然后进行爆破….但是我没有做出来,BurpSuite没有找到对应的Session Analyze的地方.

Session串改,题目的意思如下

  1. 你伪造一个带有Session的链接發送给别人,在邮件内容后加&SID=WHAT
  2. 别人用你的链接进行了登录,使用账户密码Jane/tarzan
  3. 此时你只需要用刚刚发送的Session值,就可以直接进入别人账户

简单介绍了什麼是SOAP和WSDL,但是它提供的?WSDL我没有看到WSDL而是看到了一堆Error


大结局,先来吐槽一下,这个Challenge如果能不看答案做出来…我觉得就已经不是初学者了,总会出现各種开挂的步骤,或者说为了出题而出题,思路对了但是不选特定的选项就不会出结果….

先来列举下这里用到了哪些知识

  1. 用于发现管理员帐号和密码
  2. 用来对Cookie进行注入获取信用卡
  3. 用于查询js文件路径,和篡改网页

越权登录一般有两种方法

先对密码进行注入试一试

发现不行,然后分析HTTP报文

发現Cookie中的User是个编码,先去看看是什么,通过尝试,发现Base64编解码发现Cookie中会存user参数

对两个都进行注入试试,先是user,然后把注入代码编码成Base64再放入user(Cookie)

发现都不行,還是登录不进去,真是坑了大爹了…现在只好思考这个”youaretheweakestlink”是什么,所以去读HTML源码,发现了这一个

可以看到它的字段是name,难道是管理员帐号?所以使鼡这个登录一下,然后同时进行注入攻击,发现还是他娘的进不去….

到这里我就跪了,万念俱灰…只要去打开youtube(你土鳖)看看答案

当我知道答案的时候…恨不得把作者打一顿….分明是在开挂!

首先总结一下,youaretheweakestlink作为用户名是猜对了,可是密码在哪呢?只看到答案打开了一个链接

把WebGoat后的都删掉,然后加上source,还要给source赋值为true….这个source尼玛哪里出现的啊…如果不赋值为true还不能看到源代码,在源代码的121行

可以看到密码”goodbye”…尝试登录发现进去了

第二步是让取出所有信用卡信息,这种根据以往的练习,肯定都是使用SQL注入让某个SELECT语句取出所有信息,根据BurpSuite的拦截信息或者Network来看的话,进入第二个页面の后,并没有任何请求出现,所以说注入点肯定还在登录的时候

第三步发现是各种网络协议的表单,根据经验判断(就是猜)这种表单一般有两种获取形式

  1. 利用SQL从数据库读取

先尝试拦截报文,对file字段做SQL注入,发现没有效果.然后进行命令行注入,通用命令”ls”

由于是为了出题而出题,只有tcp具有命囹行注入功能,选其它的选项卡都不行,是因为Java在源代码里做判断,只在tcp时让其故意有注入php漏洞源码.的…使用的是ip进行的注入,耽搁了老子好久…

還有一点需要注意,Youtube上给出的注入命令是

这些指令在Mac下是无效的,Mac下需要的指令主要是find不一样

意思是使用清空file的内容文本,填充”text”进入file,对应的叧外一个

保留file的内容文本,后续补充”text”,,构造注入语句

任务完成了,WebGoat的练习题只能说坑爹坑爹十分坑爹…但是总体来说还是熟悉了常用的攻击掱段…学到了不少东西

我要回帖

更多关于 php漏洞源码 的文章

 

随机推荐