美文网首页
bugku部分web writeup

bugku部分web writeup

作者: 小灰灰的大冒险 | 来源:发表于2018-11-19 23:00 被阅读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

    相关文章

      网友评论

          本文标题:bugku部分web writeup

          本文链接:https://www.haomeiwen.com/subject/gquzfqtx.html