bugku部分web writeup
网站被黑
今天学会了用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);"); 注意了这地方有两个$$
所以我们只需给变量传一个全局数组变量就好了 所以我们构造 ?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" }
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可以得到:
将得到的字符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
成绩单
题目如下:
输入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