史上最详细系列--攻防世界web(新手7-12)

7.simple_php

史上最详细系列--攻防世界web(新手7-12)_第1张图片
php简要学习

这是基本格式
2.show_source() 函数对文件进行语法高亮显示。
高亮显示原文件如同我们看见的这样
3.include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。
将config.php文件的内容复制到此文件
4. a = @ a=@ a=@_GET[‘a’];
预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。@ 是为了防止没有 $_GET[‘a’]出现错误提示.
就是将get到的a的值赋给变量a
5.b也是一样
6.

if($a==0 and $a){
    echo $flag1;
} 

echo 是输出 and是与 ,所以要使输出flag变量,那么if要为真,在这里便发生了矛盾.
PHP中 字符串与数值比较时,会将字符串类型的值强制转换为数值型的0,因此当 ‘aa’ 与0做比较时其结果为true;
所以a只要不是0都满足条件
7.

if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
} 

is_numeric()用来判断是否是数字和数字字符串。如果是则返回true,如果不是则返回false。
注:会检查十进制和十六进制也就是说0x开头也会判断成数字字符串

最后,get方法的使用:在URL+?+php语句即可
在这里就是 ?a=a & b= 12345%00
Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

8.get_post

在这里插入图片描述
史上最详细系列--攻防世界web(新手7-12)_第2张图片
史上最详细系列--攻防世界web(新手7-12)_第3张图片
综合上述,get是在URL中发送的方式,而post是在主体中发送的.
所以第一步,在URL中发送a=1的值
史上最详细系列--攻防世界web(新手7-12)_第4张图片
第二步,用post发送b的值
使用hackbar来发送,按下F12,选择hackbar插件,进行发送(hackbar插件下载安装:https://editor.csdn.net/md/?articleId=105162848))
史上最详细系列--攻防世界web(新手7-12)_第5张图片
发送完成
cyberpeace{83cfba9a9289027c4eb428ba23a1f08e}

9.xff refer

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
X-Forwarded-For: 本机IP, 代理1IP, 代理2IP, 代理2IP 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
综上所述,先将xff的地址改为123.123.123.123
步骤:
1.Firefox F12选择网络,刷新之后会抓取两个包,选中文件,在消息头右边有编辑重发按钮
史上最详细系列--攻防世界web(新手7-12)_第6张图片
2.输入
X-Forwarded-For:123.123.123.123
,点击发送
史上最详细系列--攻防世界web(新手7-12)_第7张图片
3.选择新的包,在响应下的响应载荷(payload)里面出现提示,所以refer应该是http://www.gogle.com
史上最详细系列--攻防世界web(新手7-12)_第8张图片
4.重复第一步,加入Referer:www.gogle.com注:图中是错误!
史上最详细系列--攻防世界web(新手7-12)_第9张图片
得到结果,注意:没有自动换行,需要移动界面才能看到
史上最详细系列--攻防世界web(新手7-12)_第10张图片
cyberpeace{8a90ca01145d2d5276a45125c4f9ddff}

10.webshell

一句话木马**** shell是密码,其他的是基本格式,使用的条件是cknife(菜刀)
步骤:
1.打开菜刀,Windows下可以直接双击打开(前提有java环境),linux下执行java -jar name.jar命令,选择添加
史上最详细系列--攻防世界web(新手7-12)_第11张图片
2.地址栏左侧填写IP地址和端口,右侧是密码这里是shell,脚本类型选择php(Eval),字符编码是GB2312,选择添加史上最详细系列--攻防世界web(新手7-12)_第12张图片
双击地址,连接成功会直接出现文件列表,明显有一个flag.txt文件,
史上最详细系列--攻防世界web(新手7-12)_第13张图片
直接双击打开即可,史上最详细系列--攻防世界web(新手7-12)_第14张图片
cyberpeace{8087d04e6d919be5493f9aadeeb85e06}
Cknife网盘链接:https://pan.baidu.com/s/1VYgBwBCbnO-EzsvE191LPg 提取码:szj4

11ping 没有waf

ping命令的注入
通常使用截断来进行命令注入
首先随便输入一个地址
史上最详细系列--攻防世界web(新手7-12)_第15张图片
Windows下ping命令用n参数来表示数据包的个数,linux用c来表示,所以这是linux格式
用管道命令进行验证
| ls
史上最详细系列--攻防世界web(新手7-12)_第16张图片
发现输出当前目录文件,于是寻找flag文件
| find / -name flag.*(这里是肯定知道文件名为flag,所以只需要通配后缀)
史上最详细系列--攻防世界web(新手7-12)_第17张图片
得到结果,进行查看
| cat /home/flag.txt
史上最详细系列--攻防世界web(新手7-12)_第18张图片
cyberpeace{2d1f26746c55f753eb530e3dd21d04b0}
也可以使用其它截断符来得到结果
截断符:
‘$’
‘;’
‘|’
‘-’
‘(’
‘)’
‘反引号’
‘||’
‘&&’
‘&’
‘}’
‘{’
'%0a’可以当作空格来用;

12.simple_js

1.F12查看源代码

<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
    function dechiffre(pass_enc){ /*定义函数dechiffre*/
        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(',');											/*55,56,54,79,115,69,114,116,107,49,50*/
        var tab2 = pass.split(',');												/*注意: tab!=tab2*/
        var i,j,k,l=0,m,n,o,p = "";
        i = 0;j = tab.length;													/*j=11*/
        k = j + (l) + (n=0);													/*k=11*/
        n = tab2.length;														/*n=18*/
        for(i = (o=0); i < (k = j = n); i++ )									/*for(i=0;i<18;i++)*/
        {
        	o = tab[i-l];														/*o=tab[i] 从下一句看是多余的*/
        	p += String.fromCharCode((o = tab2[i]));
        																		/*把tab2的ASCII码输出字符串 */
            if(i == 5) break;													/*只输出前面6个 即p=FAUX P*/
        }
        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]));
           												/*把tab的ASCII码输出字符串 后面几个 p=FAUX PASSWORD HAH*/
  																	        }
        p += String.fromCharCode(tab2[17]);
       																		 /*tab2[17]是65 即A*/
        pass = p;return pass;
        																	/*此时pass的值是:FAUX PASSWORD HAHA*/
    }
    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"));
															/*调用dechiffre函数,参数是以上十六进制字符串*/
    h = window.prompt('Enter password');
    alert( dechiffre(h) );
															/*输出结果FAUX PASSWORD HAHA*/
</script>
</head>
</html>

2.分析
dechiffer()函数:
输入:“55,56,54,79,115,69,114,116,107,49,50” 将十六进制转为ASCII码
输出:FAUX PASSWORD HAHA
实现:无论输入的参数是多少,都存在于tab1中,而调用的始终是tab2,也就是pass的值.
3.此时flag的值是多少呢?
题目中的条件只有两个字符串,一个是限定的结果,还有一个有什么用呢,将已知参数转化成字符串
得到786OsErtk1再改成flag格式即 Cyberpeace{786OsErtk1} !!!
4.分析代码的便捷方式就是一步一输出
简化后的代码,可直接运行

<script type="text/javascript">
pass_enc="\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";
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 p="";
for(i=0;i<18;i++){
	p += String.fromCharCode(tab2[i]);
	document.write("第"+i+"个字符:"+tab2[i]);
	document.write("
"
); if(i==5)break; } document.write("第一个循环的结果:"+p); document.write("
"
); for(i = 0; i < 18; i++ ) { if(i > 5 && i < 17) { p += String.fromCharCode(tab2[i]); document.write("第"+i+"个字符:"+tab2[i]); document.write("
"
); } } document.write("此时p的值"+p); document.write("
"
); p += String.fromCharCode(tab2[17]); document.write("tab2[17]的值"+tab2[17]); document.write("
"
); pass=p; document.write("pass的值:"+p); </script>

史上最详细系列--攻防世界web(新手7-12)_第19张图片

你可能感兴趣的:(史上最详细系列--攻防世界web(新手7-12))