南京邮电大学网络攻防平台WriteUP——WEB(下)

21、Header

打开链接后显示“什么也没有”

查看源代码:


无可用信息,故转换思路,使用burpsuite抓包来进行分析:

抓到的包:

发送到repeater模块:



单击GO进行查看Response相应:

题目考察点:  思路转换绝处逢生!

22、上传绕过

打开链接:


查看源代码:


结合题目名可知这是一个文件上传绕过试题

我们结合提示:“猜猜代码是怎么写的”可知它可能对文件的格式(JPEG、JPG、PHP、ASP、jsp等)、文件大小等内容有限制

我们先试试上传一个图片格式的文件看看:



那么之后上传一个PHP文件看看:



通过上面的测试,可以知晓题目要求上传一个图片格式+PHP格式的文件,此时我们可以联系到/00截断来实现,具体操作如下:

上传一个PHP文件,并抓包:


之后改包


采用00截断


之后返回查看截断效果:


释放包并查看浏览器所提供的页面:

题目考察点: 00截断的使用

23、SQL注入1

打开链接


查看sources:



代码含义解释:通过post提交方式 user与pass,而且提交的user必须是admin.但是密码不知道。所以就得在$sql=这句想办法绕过and (pw='".$pass."') 这段 ,所以构造的语句就是这样语句:

Username=admin ‘)#  之后提交可得:


题目考察点: 代码审计  sql注入语句的构造

24、Pass check

源码:

<?php
$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!";
}
?>

打开题目地址链接:


解题思路:

这道题目中使用了strcmp()函数来比较passpass1的值是否相等。但是strcmp()同样存在漏洞。关于strcmp的漏洞网上有很多,这里截取了网上的一段分析:

strcmp() 函数比较两个字符串。该函数返回值情况如下所示:

 0       如果两个字符串相等;

<0     如果string1小于string2

>0     如果 string1 大于string2

注意:这里的strcmp函数实际上是将两个变量转换成ascii 然后做数学减法,返回一个int的差值。

也就是说键入两个相同的字符串进行比较得到的结果就是0!

但是有一种特殊情况就是让数组和字符串比较,此时PHP会返回NULL!

那么这道题目就可以将pass以一个数组的方式传入。


25、起名字真难

源代码:

<?php
 function noother_says_correct($number)
{
        $one = ord('1');                                      将1装换为其对应的asicc值并且将值赋给$one
        $nine = ord('9');                                     将9转换为其对应的asicc值并且将值赋给$nine
        for ($i = 0; $i < strlen($number); $i++)
        {   
                $digit = ord($number{$i});                    依次将变量$number中的字符装换为对应的asicc值
                if ( ($digit >= $one) && ($digit <= $nine) )  如果变量$digit的asicc值介于1和9的asicc值之间则返回false,否则继续
                {
                        return false;
                }
        }
           return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
    echo $flag;                                         获取flag的关键在于if的条件判断语句要为真
else 
    echo 'access denied';
?>

为了验证成功获得flag我们可以传入16进制数值,访问的URL为:

http://chinalover.sinaapp.com/web12/index.php?key=0xccccccccc

之后查看原网页:


题目考察点:代码审计

26、密码重置

打开链接:


查看源代码:


无可用信息,我们原回到提交页面,并且提交一个新密码,并且抓包试试:


此时我们转到Params下:


之后我们可以看到URL是经过base64加密的,而且联想到密码的最高使用权限就是系统的管理员admin,所以我们采用admin试试:

对Admin———base64加密:

之后修改URL、user、password:


之后转到Raw块:

之后释放包之后再查看原网页:


题目考察点:惯性思维推理

27、PHP反序列化

网页无法访问,故跳过!

28、sql injection 4

题目提示:


打开链接:


查看源代码:


       提交方式为get提交方式,采用了过滤手段将提交的用户名与密码中的所有的单引号、双引号进行了过滤操作,所以可以使用\来让’来闭合,构造语句如下:

以上构造语句带入数据库查询的语句相当于:

SELECT * FROM users WHERE name='\' AND pass=' or 1= 1#';

29、综合题

打开链接:


之后这接在控制台跑一次:

加后缀之后访问一下:

发现之后找不到内容,之后回到起点,注意点提示“bash”百度了一下相关,最终查出/.bash_history这个是用来存放历史记录的,这时候尝试访问 

得到 
zip -r flagbak.zip ./* 
直接访问flagbak.zip 

会得到一个下载压缩包,下载即得flag

30、sql注入 2

打开链接:


查看源代码:


strcasecmp是不分大小比较,这样只要得到密码md5值相同即可,提示已经说了用union,我们就可以构造最简单的payload 

username:username' union select md5(1)#

password:1

说明

最前面的单引号是为了闭合原文中的where user=‘     And 0=1 是为了使前面的表达式返回值为空从而使得从而使select pw from php where user='' AND 0=1这句话完全没用

接着我们使用UNION SELECT "c4ca4238a0b923820dcc509a6f75849b",直接把MD5值作为返回值retuen$sql,这样在查询的时候$query就会有值。c4ca4238a0b923820dcc509a6f75849b这串MD5值是数字1经过MD5 hash之后的结果,可以直接用MD5(1)代替最后的#用来注释掉后面没用的东西最终,将'AND 0=1 UNION SELECT 

"c4ca4238a0b923820dcc509a6f75849b" #附加输入到user框里,将数字1输入到pass框里,登录成功。


31、综合题 2

这个题目笔者想了只是看到了一些可以使用的信息,但是最后也没有搞出来,这些信息有:





通过替换file之后的文件名可以获取到不少的信息量!

有兴趣的人可以继续深入研究!




  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一个awd攻防比赛的裁判平台。 版本:beta v2.0 开发语言:python3 + django 平台分为两个部分 裁判机 靶机 通过特定接口,来实现靶机flag与服务器的通信 搭建流程 裁判机 安装所需环境 裁判机:python3+django 全局搜索woshiguanliyuan,并修改为随机字符串,此处为管理平台地址 /untitled/urls.py path('woshiguanliyuan/',views.admin,name='admin'), path('woshiguanliyuan/table/',views.admin_table,name='admin_table'), /app/views.py if 'woshiguanliyuan' not in request.META['HTTP_REFERER']: 第31和47换为你的目录 列:("/var/www/awd_platform/app/qwe.txt","a") 修改app/management/commands/init.py,添加用户 #['用户名','用户靶机token','用户靶机token'] user=[ ['123456','FF9C92C7SDFABB71566F73422C','FF9C92C7SDFABB71566F73422C'], ['aaabbb','311F8A54SV9K6B5FF4EAB20536','311F8A54SV9K6B5FF4EAB20536'] ] 修改/app/views.py第行d89f33b18ba2a74cd38499e587cb9dcd为靶机中设置的admin_token值的md5 if('d89f33b18ba2a74cd38499e587cb9dcd'==hl.hexdigest()): 运行 python3 manage.py init python3 manage.py manage.py runserver --insecure 靶机 安装所需环境 靶机:python+requests 修改send_flag.py参数,并将其放入靶机,设权限700。 靶机 sudo python send_flag.py。 靶机生成flag脚本,send_flag.py import requests import time import random import string import hashlib token='woshiwuxudong' # 红队 baji='311F8A54SV9K6B5FF4EAB20536' def getFlag(): #return ''.join(random.sample(string.ascii_letters + string.digits, 48)) m = hashlib.md5(''.join(random.sample(string.ascii_letters + string.digits, 48)).encode(encoding="utf-8")).hexdigest() return m while(1): f=open('/flag','w') flag=getFlag() f.write(flag) data={ 'flag':flag, 'token':token, 'baji':baji, } r=requests.post('http://127.0.0.1/caipanflag/',data=data) print(r.text) f.close() time.sleep(300) 重要须知 更新作者基础上: 1.增加flag验证一次性失效性,使得每个用户都并且仅可以提交一次flag 2.增加排名情况 3.flag改为MD5 4.增加丢失flag一轮扣100分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值