BugkuCTF【部分web】

web基础$_POST

这个很简单,hackbar就可以做,但是只能用hackbar做吗?

如果网页原本没有输入框给你输入数据,并在后台设置提交方法为post,那么你就无法主动向一个网站post一个数据(dalao会构造post表单例外)。有什么方法可以简单地向一个网页主动去post一个数据呢?

但....我没找到(因为包不一样所以抓包改包软件也没什么用)。只能说在chrome可以用postman,在firefox可以用hackbar。

域名解析

按照他说的做就好了,可是就是不明白原理?

本地包含

这不是我理解的文件包含,我觉得应该叫代码审计吧。两种方法1、用hello=file('flag.php') 2、闭合下面var_dump函数

变量11

真没想到的,flag在变量里那就引用包含了所有变量的GLOBALS嘛。

管理员系统

这题出了点问题,看wp源码中应该有个base64的源码test123,然后根据提示改头就行了。

点击一百万次

这道题的原理是,无论点少次,只有当clicks=1000000时,才会触发js。js接受html返回的clicks数值,所以我们也就可以直接post一个clicks过去。(这里应该是同名数据,post数据的优先级大于html返回的?)

秋名山老司机

帖个脚本

#coding:utf-8
import requests
import re
url = "http://120.24.86.145:8002/qiumingshan/"
res = requests.session()
s = res.get(url).text
num = re.search(r'(\d+[+\-*])+(\d+)',s).group()
result = eval(num)
data = {'value':result}
print(res.post(url=url,data=data).text)

原理就是用正则把网页中的算数匹配出来,然后用eval算一下,最后放在data里面发过去。

其中注意的是五、六行,第五行创建一个session对象,第六行?结果是为了不让我们提交的时候新生成一个算数。

welcome to bugkuctf

首先看源码,我们可以传入三个参数txt,file,password,首先txt需要绕过以下代码

if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!
";

用txt=php://input和post响应内容绕过。

include($file); //hint.php  

然后include了变量file,我们就用file=php://filter/read=convert.base64-encode/resource=hint.php读取源码(读index.php同)

从源码中,我们看到index.php过滤了flag,然后hint.php创建了一个类,这里调用了函数__tostring(),再结合index.php中的反序列化函数unserialize,推测反序列化漏洞。

 include($file);   
        $password = unserialize($password);  
        echo $password;  

以上代码最重要,给index.php传入file=hint.php(就是include hint.php)。然后传入序列化后的O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}(就是Flag类,给Flag类中的flie变量赋值为flag.php【这里很重要】,由于接下来的echo $password把Flag类当做字符串执行了,所以hint.php中的__tostring函数自动执行!【__tostring函数的作用为输出file、此时为flag.php的内容】)

这道题有个很坑的地方就是hint.php里面的file和我们需要用get传给index.php的参数不是同一个!

过狗一句话

刚开始并不知道这道题什么意思,后来知道这是已经传了shell上去(就是可执行任意php指令的函数assert),通过s参数来控制函数内的执行语句。

扫描语句 http://120.24.86.145:8010/?s=print_r(scandir(%27./%27))    发现 f94lag.txt访问就好

字符?正则?

这道题表明了我的理解正则能力还很渣,主要表现在:

1、key.*是指匹配一个key加上零或多次任意字符(.),而不是零或多次key.(key.{4,7}同)。

2、\/.\/不是\\,中间还有一个任意字符。

3、[[:punct:]]是任意标点的意思。

login1(SKCTF)

hint说了是sql约束攻击。

原理:在对数据库的操作中,会限制输入字符长度(如本题注册时,用户名可以输入admin【中间无数个空格】【加一个1】),这样在前端检测来这个不是admin通过检测,但在写入数据库时由于数据库INSERT查询限制了长度,所以写入数据库的用户名为admin加一定个数个空格,密码随意。此时,在数据库中有两个用户名,第一个是admin,第二个是admin+空格,但这时如果用admin(无空格)和随意密码进行登录的时候,返回的却是第一个无空格admin的数据!!!

你从哪里来

修改Referer,但不是网上说的http://www.google.com.hk/ 而是 https://www.google.com

程序员本地网站

一直在想改Referer,但忘了还有X-Forwarded-For这个参数。

各种绕过

这里最主要是看清楚一共上传了三个值而不是两个,然后sha1碰撞的那两个用数组就好了,sha1不识别数组。

求getshell

这题真弄不懂什么意思,首先是Content-Type: multipart/form-data改成Content-Type: Multipart/form-data  题目过滤了能上传文件的编码类型?然后文件后缀php改php5是什么意思,php5是什么后缀?如果是为了绕过正则的话php4为什么不行?Content-Type改成image/jpg是唯一看得懂的dif地方。

INSERT INTO注入、这是一个神奇的登陆框、多次

三道注入题,用对应的脚本....

PHP_encrypt_1

逆向?

login2(SKCTF)

一开始提示union,那就是union select 1,1,1--+-(这里空格后面还要再加一个字符,否则尾部的空格会被省略)那种形式了,试了下不行,那就是union select 1,1,md5(1)--+-这种形式,通过,进入一个进程监控页面,然后通过远程连接自己的网站反弹shell就行。(通过漫长的试错,必须要知道一个点:云服务器的端口如果是没有在防火墙开启就是全部关闭的!!!)

多次(异或判断过滤)

首先这道题的单引号没有被完全过滤,在单引号后面有字符就可以绕过了。

如果sql注入的题目^没有被过滤,则可以利用^同假异真的性质判断哪些字符过滤了或者是单个过滤了。

如这道题目的?id=-1'^(aaa)# ?id=-1'^(length(length('union')>0))#

然后照常爆库,爆出第二题的链接,第二题可以直接用1' and updatexml()报错注入注出答案

 

 

 

 

 

 

 

你可能感兴趣的:(CTF,Writeup)