Challenge
大结局,先来吐槽一下,这个Challenge如果能不看答案做出来…我觉得就已经不是初学者了,总会出现各种开挂的步骤,或者说为了出题而出题,思路对了但是不选特定的选项就不会出结果….
先来列举下这里用到了哪些知识
- HTML源码审计
- BASE64编码
- SQL注入
- 命令行注入
其中每一个知识点用于
- 用于发现管理员帐号和密码
- 用来解析Cookie
- 用来对Cookie进行注入获取信用卡
- 用于查询js文件路径,和篡改网页
Stage1
越权登录一般有两种方法
- 获取到管理员帐号
- 进行注入无效化密码
先对密码进行注入试一试
password' OR '1'='1
发现不行,然后分析HTTP报文
发现输入可能可以注入的点有Username/Password/Submit/user/user(Cookie)这几个,用户名一般不能进行注入,密码又试验过了,还剩下user和user(Cookie)
发现Cookie中的User是个编码,先去看看是什么,通过尝试,发现Base64编解码发现Cookie中会存user参数
对两个都进行注入试试,先是user,然后把注入代码编码成Base64再放入user(Cookie)
youaretheweakestlink' OR '1'='1
eW91YXJldGhld2Vha2VzdGxpbmsnIE9SICcxJz0nMQ==
发现都不行,还是登录不进去,真是坑了大爹了…现在只好思考这个”youaretheweakestlink”是什么,所以去读HTML源码,发现了这一个
<input name="user" type="HIDDEN" value="youaretheweakestlink">
可以看到它的字段是name,难道是管理员帐号?所以使用这个登录一下,然后同时进行注入攻击,发现还是他娘的进不去….
到这里我就跪了,万念俱灰…只要去打开youtube(你土鳖)看看答案
当我知道答案的时候…恨不得把作者打一顿….分明是在开挂!
**首先总结一下,youaretheweakestlink作为用户名是猜对了,可是密码在哪呢?**只看到答案打开了一个链接
local:8080/WebGoat/source?source=true
把WebGoat后的都删掉,然后加上source,还要给source赋值为true….这个source尼玛哪里出现的啊…如果不赋值为true还不能看到源代码,在源代码的121行
121 private String pass = "goodbye";
122
123 private String user = "youaretheweakestlink";
可以看到密码”goodbye”…尝试登录发现进去了
Stage2
第二步是让取出所有信用卡信息,这种根据以往的练习,肯定都是使用SQL注入让某个SELECT语句取出所有信息,根据BurpSuite的拦截信息或者Network来看的话,进入第二个页面之后,并没有任何请求出现,所以说注入点肯定还在登录的时候
依次对Username/Password/Submit/user/user(Cookie)这几个注入点进行检查,发现user(Cookie)进行注入就可以获得到所有信用卡信息,但是注意使用的是Base64编码后的信息
youaretheweakestlink' OR '1'='1
//编码后注入代码为
eW91YXJldGhld2Vha2VzdGxpbmsnIE9SICcxJz0nMQ==
Stage3
第三步发现是各种网络协议的表单,根据经验判断(就是猜)这种表单一般有两种获取形式
- 利用SQL从数据库读取
- 利用cmd命令行得到
先尝试拦截报文,对file字段做SQL注入,发现没有效果.然后进行命令行注入,通用命令”ls”
tcp && ls
这里注意坑爹的事情
由于是为了出题而出题,只有tcp具有命令行注入功能,选其它的选项卡都不行,是因为Java在源代码里做判断,只在tcp时让其故意有注入漏洞.Youtube上视频是5.2版本的…使用的是ip进行的注入,耽搁了老子好久…
还有一点需要注意,Youtube上给出的注入命令是
&& pwd && ls && find -name "webgoat_challenge_guest.jsp"
这些指令在Mac下是无效的,Mac下需要的指令主要是find不一样
tcp; pwd; ls; find . -iname "webgoat_challenge_guest.jsp";
通过命名行注入,我们可以得到webgoat_challenge_guest.jsp文件的地址
然后可以使用另外一段自定义的HTML文本代替webgoat_challenge_guest.jsp,原理是利用了命令行注入的
echo "text" > file
意思是使用清空file的内容文本,填充”text”进入file,对应的另外一个
echo "text" >> file
保留file的内容文本,后续补充”text”,百度原理看这里,构造注入语句
tcp; echo "<html><body>Mission Complete</body></html>" > WebGoat/webgoat-container/target/webgoat-container-7.1-SNAPSHOT/webgoat_challenge_guest.jsp
Stage4
任务完成了,WebGoat的练习题只能说坑爹坑爹十分坑爹…但是总体来说还是熟悉了常用的攻击手段…学到了不少东西