0x01 view_source

f12或在网址前加上view-source:

0x02 get_post

img

hackbar旧版本或是破解版的安装要取消自动更新

0x03 robots

img

0x04 backup

访问./index.php.bak

0x05 cookie

1572278436265

0x06 disabled_button

1572278494191

删掉disabled

0x07 simple_js

s = r'\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'
ss = s.split(r'\x')[1:]
sss = ''
for i in ss:
    sss += chr(int(i, 16))
print(sss)
ssss = sss.split(',')
for i in ssss:
    print(chr(int(i)),end='')
    
#输出:
#55,56,54,79,115,69,114,116,107,49,50
#786OsErtk12

Cyberpeace{786OsErtk12}

0x08 xff_referer

1572279002624

postman整就完了。

CTF中伪造IP的几种方法

Client-Ip: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Host: 127.0.0.1
Referer: www.google.com

0x09 weak_auth

抓包之后发送到Intruder:

1572280195816

将password设置为爆破项(被§包裹):

1572280235362

加载字典:

1572280324016

开始爆破:

1572280376252

寻找响应长度与众不同的包:

(点击Length可以按长度排序)

1572280090207

0x10 webshell

1572327218052

一句话,密码为shell,可用蚁剑或菜刀

蚁剑下载:https://github.com/AntSwordProject

需下载源代码和加载器。

运行加载器,选择源代码目录,即可加载。

主页面内右键选择添加数据,填写url和密码,点击添加

1572327388382

1572327425365

0x11 command_execution

小宁写了个ping功能,但没有写waf

参考:CTF关于ping命令注入问题(1)

题目样式

对于看到ping或者ping命令却没有弄waf时就要想到命令注入。

具体注入方法

看到ping命令就可以利用截断来执行新的命令。
首先测试所有的截断符号:
‘$’ ‘;’ ‘|’ ‘-’ ‘(’ ‘)’ ‘反引号’ ‘||’ ‘&&’ ‘&’ ‘}’ ‘{’ '%0a’可以当作空格来用;
利用截断符号配合普通命令简单问题基本就出来;
例如:ip=127.0.0.1;cat /home/flag.txt
简单的flag就出来了,也可以配合其他的进行;

命令注入原因

系统提供命令执行类函数主要方便处理相关应用场景的功能.而当不合理的使用这类函数,同时调用的变量未考虑安全因素,就会执行恶意的命令调用,被攻击利用。

方法

此类命令执行函数依赖PHP配置文件的设置,如果配置选项 safe_mode 设置为 off,此类命令不可执行,必须设置为 On
的情况下,才可执行。PHP 默认是关闭的。在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上 –with-exec-dir选项来指定,默认是/usr/local/php /bin。
1:检测一阶命令注入的最佳方式是尝试执行一个sleep命令
2:在外部可以访问的端口上生成一个shell(仅适用于自定义netcat构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
3:如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给wc -c命令。
另外还有很多方法来进行命令注入。等我详细阅读之后继续整理

1572281953218

0x12 simple_php

php弱类型

1572324879142

以下摘自:php 弱类型总结

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

== 在进行比较的时候,会先将字符串类型转化成相同,再比较

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

<?php
var_dump("admin"==0);  //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true 
?>  //上述代码可自行测试
  • 观察上述代码,"admin"==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等
  • "1admin"==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是"admin1"被转化成了0,为什么呢??
  • "0e123456"=="0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等

当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内
该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

<?php
$test=1 + "10.5"; // $test=11.5(float)
$test=1+"-1.3e3"; //$test=-1299(float)
$test=1+"bob-1.3e3";//$test=1(int)
$test=1+"2admin";//$test=3(int)
$test=1+"admin2";//$test=1(int)
?>

所以就解释了"admin1"==1 =>False 的原因

Last modification:January 7th, 2020 at 04:44 pm