web攻防世界7-12


前言

记录一下学习过程


提示:以下是本篇文章正文内容,下面案例可供参考

7.simple_php

分析php的代码,发现以get方式获取数据。

<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
    echo $flag1;
}
if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
}
?>
  • 第一个$flag1:php是弱类型语言,在用==比较的时候,不同类型的值比较会被转化比较,比较规则如下
字符串转数字
1. 字符串的开始部分决定了它的数字值。
2. 如果该字符串以合法的数字值开始,则使用该数值。否则其值为 0(零)。
3. 合法数字值可以是正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。
  • 所以只需要输入非数值型的字符即可显示第一个$flag。使用===就会严格比较类型。
  • 第二个flag2is_numeric():指定的变量是数字和数字字符串则返回 TRUE;所以输入一个比1234大的字符串
    http://111.200.241.244:57651/?a=asdf&b=12345112a
    在这里插入图片描述

9.xff和referer

xff:X-Forwarded-For: HTTP 扩展头部,主要作用是查看源ip以及代理ip
格式:X-Forwarded-For: client, proxy1, proxy2
referer:主要是网页的来源地址,服务器使用referer确认访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。
格式: Referer=http://www.google.com
使用bp抓包 添加进ip为123.123.123.123 和referer来源为google
在这里插入图片描述
返回出flag
cyberpeace{49adab36ff04a945a1578da05c09aba1}

10.webshell

点开进去上面显示一句话木马
在这里插入图片描述
一句话木马:通过post上传的的参数shell以php语法进行执行。
1.直接上菜刀
既然有一句话木马最方便的方法自然是直接上菜刀
在这里插入图片描述
在这里插入图片描述
2.手动测试连接
首先通过返回包,查看服务器的操作系统为ubuntu
在这里插入图片描述
以post参数提交命令ls 查看一下当前目录,发现恰好有flag.txt文件,system()函数调用/bin/sh来执行参数指定的命令
在这里插入图片描述
直接查看 flag文件获得flag
在这里插入图片描述
或者直接find一下 找到文件

shell=system('find / -name "flag.*" ');

在这里插入图片描述

11.command_execution

先简单的使用一下ping命令 发现能正常使用,而且没有waf说明没有参数的过滤,任何玩意都能写到框框里面去。
在这里插入图片描述
直接拼接语句查找flag
在这里插入图片描述
查看flag

127.0.0.1&&cat home/flag.txt

12.simple_js

怎么输入发现都是一个结果,FAUX PASSWORD HAHA。查看网页的代码,发现输入进去的pass_enc根本就没被用到,自始至终都是pass在用。

<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
    function dechiffre(pass_enc){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab  = pass_enc.split(',');
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        n = tab2.length;
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));
                        }
        p += String.fromCharCode(tab2[17]);
        pass = p;return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );

</script>
</head>

</html>

中间的这段代码 看似花里胡哨 实际上就是变成ascll码后拼接输出

 var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        n = tab2.length;
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));

直接用python输出两个数组的值

a="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
b=a.split(',')
c="70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65" #pass数组
c=c.split(',')
# 输出a数组的ascll
for i in b:
    print(chr(int(i)),end='')
print('')
# 输出pass数组的ascll
for i in c:
    print(chr(int(i)),end='')

输出

786OsErtk12
FAUX PASSWORD HAHA

所以flag为 786OsErtk12

总结

主要涉及的知识点:
php的语言比较特点
xff和referer的定义和UA头的参数
一句话木马的原理
命令的直接拼接
js代码的简单理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值