bugku部分web writeup

2018-11-19  本文已影响0人  小灰灰的大冒险

网站被黑

今天学会了用burpsuite进行爆破密码,嘿嘿嘿~
题目如下:


1543746034(1).png

首先要用御剑扫一下ip:


御剑.png

出现了一个shell.php,那么我们进入到这个shell:


shell.png
需要输入一个password,这个时候burpsuite就要登场了~
首先抓包,咳咳,抓包不要抓错了,我抓错了,坑了自己好久,然后发送至intruder,选择payloads标签,选择simple list:
burpsuite.png

add from list这个当中选择password,再点击右上角的start attack,就开始爆破了:


attack.png
随后我们可以在results中点选length,可以找到一个长度不一样的,然后在response中就可以看到flag:
flag.png

web5

题目如下:


1543746291(1).png

右键查看源代码会发现这样一串奇怪的东西:


1543746349(1).png

某wp上面说,把这一串东西丢到控制台里面就可以看到flag:


flag.png

前面题目有提示说flag要用大写字母,这样就完事儿~

变量1

题目如下:


1543746400(1).png

最后一行的eval("var_dump($$args);"); 注意了这地方有两个$$

可变变量.png
所以我们只需给变量传一个全局数组变量就好了 所以我们构造 ?args=GLOBALS加到网页后面

http://120.24.86.145:8004/index1.php?args=GLOBALS

便可得到FLAG

array(7) { ["GLOBALS"]=> RECURSION ["_POST"]=> array(0) { } ["_GET"]=> array(1) { ["args"]=> string(7) "GLOBALS" } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["ZFkwe3"]=> string(38) "flag{92853051ab894a64f7865cf3c2128b34}" ["args"]=> string(7) "GLOBALS" }

1543746585(1).png

flag在index里面

这道题目讲的是本地文件包含漏洞和php伪协议的结合应用
题目如下:


1543744600(1).jpg

点击之后变成了


1543744649(1).jpg

file这个关键字提示了这个是本地文件包含漏洞,这里还用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php
http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
输入以上url可以得到:

1543744834(1).jpg

将得到的字符base64解码得到index的源码:


image.png

输入密码查看flag

image.png

这道题目和网站被黑那个是一样的,使用burpsuite进行爆破密码即可,不再赘述。

点击一百万次

题目如下:


1543657382(1).png

当然是不可以点击一百万次的啦~
现在我们查看源代码发现if条件:


1543657553(1).png
所以用post的方式将clicks设为大于1000000的数字就可以啦
1543657658(1).png

就得到flag啦~

备份是个好习惯

题目如下:


1543756221(1).png

看了好多wp,貌似大家都用了王一航大佬的爆破脚本,所以我也就去用了。另外也知道了备份文件的话就应该想到.bak文件


(CC91G0~ZBO5CO0(LVCM0IT.png

获得的.bak文件内容如下:

1543757337(1).png

开始解读一下代码:
11行是获得url中“?”以后的部分;
12行是去掉“?”;
13行是将url中的key替换为空,所以要用kkeyey或者kekeyy绕过;
14行是parse_str()是将字符串解析到变量中;
最后是就需要得到key1和key2的值不同,而md5值相同,可以用数组或者php弱类型绕过。
1、MD5无法处理数组,如果传入数组,会返回NULL,所以两个NULL当然是相同的啦~


1543757763(1).png

2、PHP弱类型
=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
== 在进行比较的时候,会先将字符串类型转化成相同,再比较
如果两个字符在经过MD5加密后形式均为0exxxxxxxxx的形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,即0,那么这两个字符的md5值就是相等的。
这样的字符有很多:
QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a


1543758164(1).png

成绩单

题目如下:

1544078411(1).jpg
输入1、2、3,都可查到成绩,
1544078458(1).png
1544078498(1).png
1544078522(1).png
八成判断为sql注入,查看网页源代码,可以看到是post方式,所以我用的是sqlmap的post注入。
首先,检查注入点:
1544079190(1).png
1544079271(1).png
1544079679(1).png
(哎,其实这里面有些我也看不懂,但是感觉大概可以注入,于是接着往下试)
爆库名:
1544079825(1).png
1544079849(1).png
爆表名:
1544079922(1).png

列字段:
1544080001(1).png
1544080026(1).png
读取字段内容:
1544080068(1).png
1544080135(1).png
成功^_^
查找post的注入点好像还可以这样:

可以使用Fiddler工具来抓取post包,把请求保存在txt文件里
sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数
-r REQUESTFILE 从一个文件中载入HTTP请求。
-p TESTPARAMETER 可注入的参数

另外我看了其他人写的wp,这道题也可以手工注入,但是我数据库学的不好,sql语句不扎实,后续会加强学习的。

秋名山老司机

这题有毒吧……咳咳,题目如下:


1544349254(1).png

当时是要上脚本啦:

import requests
import re
url="http://123.206.87.240:8002/qiumingshan/"
r=requests.session()
text=r.get(url).text #将get到的数据以文本形式显示出来
cont=re.findall('<div>(.*?)</div>',text) #匹配出计算表达式,返回的是列表
cont="".join(cont) #列表转字符串,因为eval()接收的参数类型为string, bytes or code object
cont=cont[:-3] #删掉多余的字符
post=eval(cont) #eval()可以把字符串当做有效表达式进行计算
data={'value':post} #构造post数据
ans=r.post(url,data=data)
print(ans.text)

这么简单的一个事情,我遇到了重重阻力,真是跪了,差点把sublime卸了重装
答案如下:


1544187610(1).png

哦,要敲敲寄几的小脑袋了,re是python的内置库,不用安装,哎,傻不拉几地安装了半天……

速度要快

1544355971(1).png

打开题目就只有这个,查看源代码会提示post margin,说实在的我不知道margin是啥,去百度了一下其实还是不是很明白:margin,是CSS语法,这个简写属性用于在一个声明中设置所有当前或者指定元素所有外边距的宽度,或者设置各边上外边距的宽度。
其他writeup手说抓包可以看到response里面有个flag:


1544360869(1).jpg

解码之后是这样:


1544364656(1).png
继续base64解码:
1544364742(1).png
这个就是margin的值吗?但是为什么我post回去不行呢,只有用脚本才能跑出来flag
奉上脚本:
import requests
import base64

url = 'http://123.206.87.240:8002/web6/'
req = requests.session()
res = req.get(url)
flag = res.headers['flag']

txt = base64.b64decode(flag)
txt = txt[txt.index(":")+2:]
txt = base64.b64decode(txt)

data = {'margin': 541698}
ans = req.post(url, data)
print(ans.content)
1544364937(1).png
上一篇下一篇

猜你喜欢

热点阅读